如何阻止Savon为soap.body添加前缀

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

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

 "XXXXXXXXXXXXXX" 

由于前缀,我的soap服务错误。 如果我这样做,它的工作原理:

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

然而,由于各种原因,这是一种痛苦。 有没有办法阻止savon附加前缀?

使用savon 0.9.6。

这看起来可能是savon 0.9.6中的一个错误 。 尝试更新您的客户端,创建如下代码:

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

编辑 :如果有其他人遇到此问题,请使用解决方案更新答案

事实certificate,如果你提供一个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