3

这就是我创建客户端的方式:

@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。

4

1 回答 1

5

这看起来可能是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
于 2011-07-16T22:51:56.113 回答