使用Savon 2发送原始XML

时间:2014-02-20 16:15:34

标签: ruby xml soap savon

我正在尝试使用Savon向Web服务发送请求。我正在使用的服务需要嵌套的命名空间,我还没有想出如何在请求中提供它们。

我试图手工制作请求(实际上是用nokogiri)并发送生成的xml:

client.call(:some_op, :message=>{:"op"=>"<elem/>"})

但是savon逃脱了字符串并发送了&lt;elem/&gt;

如何在不转义的情况下发送原始xml?

2 个答案:

答案 0 :(得分:16)

通话应如下所示:

client.call(:some_op, xml: "<elem />")

或者,如果您只想设置一个或多个名称空间,则按如下方式创建客户端(不使用WSDL):

client = Savon.client(
  :endpoint => 'http://www.example.com',
  :namespace => 'urn:core.example.com',
  :namespaces => { 'ns1' => 'http://v1.example.com',
                   'ns2' => 'http://v2.example.com' },
  :log => true,
  :log_level => :debug,
  :pretty_print_xml => true
)

名称空间是Hash参数。

答案 1 :(得分:0)

根据文档https://github.com/savonrb/gyoku#special-characters

,似乎Savon内部使用Gyoku Gem将红宝石哈希转换为XML,并且Gyoku不会转义以感叹号结尾的哈希键。

因此,此代码可将原始XML放入请求中,同时仍使用Savon生成信封xml:

client.call(:some_op, :message=>{:"op!"=>"<elem/>"})

相关问题