2010-09-20 20 views
7

Bazı SOAP istekleri yapmak için Savon'u kullanmaya çalışıyorum, ama korkarım temellerin biraz ötesine geçmem gerekiyor. O xsi belirtmek olmasaydı,Xsi ile nesneler nasıl kullanılır: Savon'daki türler:

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

Şimdi::

Ben çizgisinde bir şey göndermek gerekir

client.method_name { |soap| soap.body = {:parameter => 'value'} } 
: tipi, basit bir mesele olacaktır

Sorun, parametredeki xsi: tipidir; Kullandığım web hizmeti, polimorfizm etrafında inşa edilmiş olduğundan, parametrenin ne tür olduğunu açıkça belirtmem gerekiyor. Bunu yapabilmem için herhangi bir yolu var mı (tercihen kendi XMLimi oluşturmak zorunda kalmadan) İyi bir şekilde soap4r'i bırakmayı çok isterim :)

Teşekkürler! Bir Hash oldukça çirkin içinde

cevap

7

belirtilmesi XML nitelikleri, ama mümkün:

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

de bakabilirsiniz: Lütfen http://github.com/rubiii/savon/wiki/SOAP Savon XML Şeması Nitelikler destekler kadar, sana Builder kullanmayı öneririm

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

bu: { 'xsi: type' => V XML'inizi oluşturmak için (Savon ile gelir)
alopClass '}} bir yazım hatası mı? Son 'ValueClass sonra? – Ba7a7chy

+1

evet, bu bir yazım hatası! cevabı düzeltmek için gidiyor. – rubiii

+0

Savon 2.x'te bunu nasıl yapabilirim? Artık sabun kalmadı. – Miletos

İlgili konular