【发布时间】:2016-10-21 14:26:27
【问题描述】:
我正在尝试重写由 savon body 命名空间编写的 - ins0
我有这个客户端变量:
client = Savon.client(wsdl: "https://integcert.synxis.com/interface/Contracts/ChannelConnect2004.wsdl", log_level: :debug, log: true, pretty_print_xml: true, env_namespace: :soapenv, namespaces: {"xmlns:soapenv": "http://schemas.xmlsoap.org/soap/envelope/", "xmlns:head": "http://htng.org/1.1/Header/","xmlns:ns": "http://www.opentravel.org/OTA/2003/05"}, convert_request_keys_to: :none, namespace_identifier: "ns", element_form_default: :qualified)
当我在做请求时:
client.call(:ping, soap_header: { "head:HTNGHeader": { "head:From": { "head:Credential": { "head:userName": "******", "head:password":"*****" }}}}, message: {"ns:EchoData": "TestData"})
我有这个soap rq body:
<soapenv:Body>
<ins0:OTA_PingRQ>
<ns:EchoData>TestData</ns:EchoData>
</ins0:OTA_PingRQ>
</soapenv:Body>
这个ins0是从哪里来的?
当我尝试使用namespace_identifier: nil 参数定义客户端并执行此类请求时:
client.call(:ping, soap_header: { "head:HTNGHeader": { "head:From": { "head:Credential": { "head:userName": "******", "head:password":"*****" }}}}, message: {"ns:OTA_PingRQ": {"ns:EchoData": "TestData"}})
我有这个soap rq body:
<soapenv:Body>
<OTA_PingRQ>
<ns:OTA_PingRQ>
<ns:EchoData>TestData</ns:EchoData>
</ns:OTA_PingRQ>
</OTA_PingRQ>
我想要的正确身体是:
<soapenv:Body>
<ns:OTA_PingRQ>
<ns:EchoData>TestData</ns:EchoData>
</ns:OTA_PingRQ>
</soapenv:Body>
任何想法如何删除额外的嵌套 OTA_PingRQnode 或用自定义替换 ins0 命名空间?
【问题讨论】:
-
请发布完整的 XML,包括 SOAP:envelope。命名空间前缀 ins0 必须已在 SOAP 信封中声明。如果 ins0 和 ns 都定义为“opentravel.org/OTA/2003/05”,那么请求将是有效的。我建议使用 SOAP UI 来验证和测试您生成的 SOAP 请求。
标签: ruby-on-rails soap wsdl savon