Прошло много времени с тех пор, как этот Q был опубликован, но эй, SOAP тоже не ускоряется. Я думаю, вы что-то реализовали, хотите поделиться?
В любом случае, как своего рода ответ, я был благословлен тем, что клиент заставил меня использовать его SOAP-сервисы (их потрясающая SOA-платформа не поддерживает другие форматы ...) как для извлечения, так и для передачи данных. Я только потребляю, поскольку сам предоставляю хорошие и чистые веб-службы RESTful для других. Я пользуюсь savon (французский для мыла?) С большим успехом
http://savonrb.com
Если вы действительно ленивы, вы жестко закодируете структуру конверта SOAP и введете свои динамические данные. Вот простой пример.
def soap_envelope(pCode)
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:prod='http://xmlns.aBigCompany.com/path/to/NeededService'>
<soapenv:Header/>
<soapenv:Body>
<something:NeededServiceRequest>
<something:productCode>#{pCode}</something:productCode>
</something:NeededServiceRequest>
</soapenv:Body>
</soapenv:Envelope>"
end
И это один из способов его использования
products_wsdl = Savon::Client.new "http://ipAtBigCo:xxxx/path/to/services/NeededService?wsdl"
begin
response = products_wsdl.process! do |soap|
soap.xml = soap_envelope("someProductCode")
end
rescue => e
MyLogger.error "Error: SOAP call for code #{pCode} failed. ++"
raise e
end
response.to_hash # This is the nice part
О SOAP 1.2, savon поддерживает его. О том, что я на самом деле являюсь SOAP-сервисом , провайдером , я не делал этого в рельсах (борись!) И могу только пожелать тебе удачи. Необходимость разработки глупых WSDL - это настоящая проблема с сервисами SOAP. Надеюсь, это кому-нибудь поможет.