如何强制Savon使用特定的参数案例

时间:2016-01-08 20:03:34

标签: ruby web-services soap wsdl savon

我尝试使用Savon连接到SOAP API。

WSDL显示了这一点:

wsdl:operation name="CustomerList" parameterOrder="Username Password Settings">
  <wsdl:input message="impl:CustomerListRequest" name="CustomerListRequest"/>
  <wsdl:output message="impl:CustomerListResponse" name="CustomerListResponse"/>
</wsdl:operation>

客户支持部门表示要使用此类请求:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ei2="http://ei2.nobj.nable.com/">
  <soap:Header/>
  <soap:Body>
    <ei2:customerList>
    <!--Optional:-->
    <ei2:username>testaccount@n-able.com</ei2:username>
    <!--Optional:-->
    <ei2:password>!PDf2lfij23l!!</ei2:password>
    <!--Zero or more repetitions:-->
    <ei2:settings>
      <!--Optional:-->
      <ei2:key>null</ei2:key>
      <!--Optional:-->
      <ei2:value>null</ei2:value>
     </ei2:settings>
  </ei2:customerList>
 </soap:Body>
</soap:Envelope>

这是我的要求:

{"SOAPAction"=>"\"CustomerList\"", "Content-Type"=>"text/xml;charset=UTF-8", "Content-Length"=>"452"}

<?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:impl="http://www.n-able.com/mickey" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">  
   <env:Body>
     <impl:CustomerList>
      <username>test@test.com</username>
      <password>MytestPassword1234</password>
      <settings>
        <listSOs>false</listSOs>
      </settings>
    </impl:CustomerList>
  </env:Body>
</env:Envelope>

不同之处在于Savon使用的WSDL和生成方法可以调用,我的请求发送CustomerList而不是API似乎期待的customerList

有没有办法强制Savon发送CustomerList而不是customerList而不用手工构建整个SOAP请求?

编辑1 在这个Github问题中找到了答案。 https://github.com/savonrb/savon/issues/530

通过将以下内容添加到gemspec中,我能够获得格式良好的请求:

spec.add_runtime_dependency      'savon', '~> 2.3'
spec.add_runtime_dependency      'wasabi', '~> 3.2'

1 个答案:

答案 0 :(得分:0)

在您构建客户端时包含其中一个:

convert_request_keys_to :camelcase  # or one of [:lower_camelcase, :upcase, :none]

或没有WSDL工作,并使用'strings'手动编写调用。