相关疑难解决方法(0)

当使用savon进行ruby soap通信时,为什么"wsdl"命名空间被插入操作名称?

我正在尝试访问我无法控制的SOAP服务.其中一个动作叫做ProcessMessage.我按照示例生成了一个SOAP请求,但是我收到一条错误,说该操作不存在.我将问题追溯到信封体生成的方式.

<env:Envelope ... ">
    <env:Header>
        <wsse:Security ... ">
            <wsse:UsernameToken ...">
                <wsse:Username>USER</wsse:Username>
                    <wsse:Nonce>658e702d5feff1777a6c741847239eb5d6d86e48</wsse:Nonce>
                    <wsu:Created>2010-02-18T02:05:25Z</wsu:Created>
                    <wsse:Password ... >password</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
    </env:Header>
    <env:Body>
        <wsdl:ProcessMessage>
            <payload>
                ......
            </payload>
        </wsdl:ProcessMessage>
    </env:Body>
</env:Envelope>     
Run Code Online (Sandbox Code Playgroud)

那个ProcessMessage标签应该是:

    <ProcessMessage xmlns="http://www.starstandards.org/webservices/2005/10/transport">
Run Code Online (Sandbox Code Playgroud)

这就是样本Java应用程序生成它时的工作原理.该标记是我的Ruby应用程序生成的示例和示例Java应用程序之间的唯一区别.有没有办法摆脱"wsdl:"那个标签前面的命名空间,并添加这样的属性.除此之外,有没有办法强制动作不是通过像身体其他部分一样传递出来的?

这是我的代码:

require 'rubygems'
require 'savon'
client = Savon::Client.new "https://gmservices.pp.gm.com/ProcessMessage?wsdl"

response = client.process_message! do | soap, wsse |
wsse.username = "USER"
wsse.password = "password"
soap.namespace = "http://www.starstandards.org/webservices/2005/10/transport" #makes no difference
soap.action = "ProcessMessage" #makes no difference
soap.input = "ProcessMessage" #makes no difference

#my body …
Run Code Online (Sandbox Code Playgroud)

ruby soap savon

8
推荐指数
3
解决办法
8636
查看次数

标签 统计

ruby ×1

savon ×1

soap ×1