【问题标题】:How do I create a Ruby SOAP client without using a WSDL?如何在不使用 WSDL 的情况下创建 Ruby SOAP 客户端?
【发布时间】:2010-07-07 15:42:04
【问题描述】:

我需要编写一个能够发送和接收soap消息的soap客户端。

此soap 服务没有关联的WSDL 文件,soap4r 和savon 似乎都需要一个。

我有一个我需要在 Java 中执行的示例,请参阅下面的链接。

http://community.cecid.hku.hk/index.php/product/article/writing_hermes_2_ws_client_under_java/#ebms-2_0-sender-ws

我可以为此使用 java,在这一点上似乎更容易。不过我个人更喜欢用 ruby​​ 编码,而且我们公司的 ruby​​ 资源比 java 多。

任何人都可以确认它可以在不编写我自己的专用肥皂库的情况下在 ruby​​ 中执行类似于 java 示例的操作吗?我需要能够发送有效载荷,我相信它通常以肥皂附件的形式。

我对查看不使用 WSDL 的 soap4r 示例特别感兴趣,因为我在 google 上找不到任何示例。

非常感谢任何帮助。

【问题讨论】:

    标签: ruby soap


    【解决方案1】:

    从 Savon v2 开始,语法略有不同

    client = Savon.client do
      endpoint "http://example.com"
      namespace "http://v1.example.com"
    end
    

    http://savonrb.com/version2/client.html

    【讨论】:

      【解决方案2】:

      Savon 不需要 WSDL 文档。请查看the new documentation。如果您知道 SOAP 端点和目标命名空间,您可以像这样执行 SOAP 请求:

      client = Savon::Client.new
        wsdl.endpoint = "http://example.com"
        wsdl.namespace = "http://soap.example.com"
      end
      
      client.request :any_soap_action do
        soap.body = { :do => "something" }
      end
      

      【讨论】:

        【解决方案3】:
        client = Savon::Client.new
          wsdl.endpoint = "http://example.com"
          wsdl.namspace = "http://soap.example.com"
        end
        

        这不起作用,它错过了块名和命名空间中的“e”:

        client = Savon::Client.new do | wsdl |
          wsdl.endpoint = "http://example.com"
          wsdl.namespace = "http://soap.example.com"
        end
        

        【讨论】:

        • 修正了“命名空间”的拼写。谢谢。但是您对 block 论点是错误的。如果你传递一个没有参数的块,savon 将使用实例 eval(带委托)。
        猜你喜欢
        • 1970-01-01
        • 2011-08-30
        • 2011-01-10
        • 1970-01-01
        • 2014-12-30
        • 2013-11-08
        • 1970-01-01
        • 1970-01-01
        • 2020-05-13
        相关资源
        最近更新 更多