2010-09-20 15 views
7

Estoy intentando usar Savon para realizar algunas solicitudes SOAP, pero me temo que necesito ir más allá de lo básico.Cómo usar objetos con xsi: tipos en Savon

tengo que enviar algo a lo largo de las líneas de:

<env:Body> 
    <wsdl:methodName> 
    <parameter xsi:type='ValueClass'>value</parameter> 
    </wsdl:methodName> 
</env:Body> 

Ahora, si yo no tuviera que especificar que xsi: type, sería una simple cuestión de:

client.method_name { |soap| soap.body = {:parameter => 'value'} } 

El problema es el xsi: escriba en el parámetro; debido a la forma en que el servicio web que estoy usando se basa en el polimorfismo, necesito especificar explícitamente de qué tipo es el parámetro. ¿Hay alguna forma de que pueda hacer esto (preferiblemente sin tener que generar mi propio XML?) Realmente me encantaría dejar soap4r para siempre :)

¡Gracias! atributos

Respuesta

7

XML Especificar en un Hash es bastante feo, pero es posible:

client.method_name do |soap| 
    soap.body = { 
    :parameter => 'value', 
    :attributes! => { :parameter => { 'xsi:type' => ValueClass } } 
    } 
end 

favor, eche un vistazo a: http://github.com/rubiii/savon/wiki/SOAP

Hasta Savon compatible con XML Atributos de esquema, sugeriría que usted utilice Builder
(que viene con Savon) para generar el código XML:

client.method_name do |soap| 
    xml = Builder::XmlMarkup.new 
    soap.body = xml.parameter "value", "xsi:type" => "ValueClass" 
end 
+1

que esto: { 'xsi: type' => V alueClass '}} un error tipográfico? el último 'después de ValueClass? – Ba7a7chy

+1

sí, ¡eso es un error tipográfico! va a corregir la respuesta. – rubiii

+0

¿Cómo puedo hacer lo mismo en Savon 2.x? Ya no hay jabón. Nadie más. – Miletos

Cuestiones relacionadas