如何使用Savon将编码属性添加到body标签?
一些背景: 我正在尝试使用savon连接到SOAP资源。我可以获取WSDL文件并浏览方法。
@client = Savon::Client.new("http://some.domain.com/v2messaging/service?WSDL")
当我尝试使用登录方法时
response = @client.request :service, :login do
soap.body = {
"String_1" => "username",
"String_2" => "password"
}
end
我收到此错误:
失败/错误:响应= @ client.request:service,:login do Savon :: SOAP :: Fault:(env:Client)在处理请求时捕获异常:意外编码样式:expected = http:/ /schemas.xmlsoap.org/soap/encoding/,实际
身体标签的差异。这是预期的xml(通过SOAPUI应用程序找到):
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:service="etapestryAPI/service">
<env:header/>
<env:body>
<service:login env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<String_1>username</String_1>
<String_2>password</String_2>
</service:login>
</env:body>
</env:Envelope>
萨文发送:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:service="etapestryAPI/service" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://java.sun.com/jax-rpc-ri/internal" xmlns:ins1="etapestryAPI/service">
<env:Body>
<service:login>
<String_1>username</String_1>
<String_2>password</String_2>
</service:login>
</env:Body>
</env:Envelope>
这些之间有一些区别,但返回的错误与env:login标记上的env:encodingStyle属性有关。如何添加此属性?
答案 0 :(得分:1)
我想出了这个。要向函数标记添加属性(在本例中为login),可以向该方法传入一个附加参数:
response = @client.request :service, :login, "env:encodingStyle" => "http://schemas.xmlsoap.org/soap/encoding/" do
soap.body = {
"String_1" => "username",
"String_2" => "password"
}
end
这可能现在可以在不通过块的情况下工作。