rubyxmlsoapsavon

Sending raw XML using Savon 2


I'm trying to use Savon to send requests to a webservice. The service I'm consuming requires nested namespaces, and I haven't figured out yet how to provide them on a request.

I've tried to craft the request by hand (with nokogiri, actually) and send the resulting xml:

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

But savon escapes the string and sends &lt;elem/&gt;

How can I send raw xml without escaping?


Solution

  • The call should look like this:

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

    Or if you just want to set one or multiple namespaces then create a client as follows (without 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
    )
    

    The namespaces are a Hash parameter.