Как помешать Савону добавлять префиксы в soap.body - PullRequest
2 голосов
/ 17 июля 2011

Вот как я создаю клиента:

@client = Savon::Client.new do
  wsdl.document = my_document
  wsdl.endpoint = my_endpoint
end

, и вот как я получаю ответ:

@response = @client.request :the_action do
  soap.body = xml
  soap.body = {"applicationId" => my_application_id }
end

Тем не менее, это создает следующий xml:

"<ins5:applicationId>XXXXXXXXXXXXXX</ins5:applicationId>"

Из-за префикса произошла ошибка службы мыла.Если я делаю это вместо этого, это работает:

@response = @client.request :the_action do
  soap.body =  "<applicationId>#{my_application_id}</applicationId>"
end

Однако это боль по разным причинам.Есть ли способ остановить присоединение префикса к savon?

Использование savon 0.9.6.

1 Ответ

5 голосов
/ 17 июля 2011

Похоже, что это может быть ошибка в savon 0.9.6 .Попробуйте обновить свой клиент, создав код, подобный следующему:

@client = Savon::Client.new do
  wsdl.document = my_document
  wsdl.endpoint = my_endpoint
  wsdl.element_form_default = :unqualified
end

Редактировать : обновить ответ с решением, если кто-то еще сталкивается с этой проблемойwsdl.document savon префикс ваших элементов.Вам лучше не использовать документ wsdl, а просто определить нужные вам пространства имен:

@client = Savon::Client.new do
  wsdl.endpoint = "http://..."
  wsdl.namespace = "http://..." # target namespace
end

@response = @client.request :namespace_prefix, :soap_action do
  soap.element_form_default = :unqualified
  soap.namespaces["xmlns:ns1"] = "http://..."
  soap.namespaces["xmlns:ns2"] = "http://..."

  soap.body =  {:application_id => my_application_id }
end
...