2010-09-20 10 views
7

Próbuję użyć Savona do zrobienia pewnych żądań SOAP, ale obawiam się, że muszę nieco wyjść poza podstawy.Jak używać obiektów z xsi: typy w Savonie

muszę wysłać coś na wzór:

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

Teraz, gdybym nie musiał określić, że xsi: type, że będzie to prosta sprawa:

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

Problem polega na tym, że xsi: wpisz parametr; ze względu na sposób, w jaki usługa internetowa, z której korzystam, jest zbudowana wokół polimorfizmu, muszę wyraźnie określić, jaki typ ma parametr. Czy jest jakiś sposób, żeby to zrobić (najlepiej bez generowania własnego XML?) Naprawdę chciałbym upuścić soap4r na dobre :)

Dzięki! Atrybuty

Odpowiedz

7

Określanie XML w hash jest dość brzydki, ale jest to możliwe:

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

Proszę spojrzeć: http://github.com/rubiii/savon/wiki/SOAP

Do Savon obsługuje XML Schema Atrybuty Proponuję użyć Builder
(która pochodzi z Savon), aby wygenerować XML:

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

I tak: { 'xsi: type' => V alueClass '}} literówka? ostatni "po ValueClass? – Ba7a7chy

+1

tak, to literówka! poprawi odpowiedź. – rubiii

+0

Jak mogę zrobić to samo w Savon 2.x? Ponieważ nie ma już mydła. – Miletos

Powiązane problemy