Então você quer consumir SOAP em Ruby? Bem, Savon é para você!
O triste é: no momento em que você vai além de solicitações SOAP muito simples, você obterá silêncio de rádio a partir da documentação lá.
Mesmo pesquisando por aí, descobrimos muitas coisas que funcionam para o Savon versão 1, mas são ligeiramente diferentes na versão 2.
Esta postagem é para a versão 2, mesmo que a versão 3 esteja chegando.
Suponha que um WSDL em um servidor de endpoint executando TLSv1 e um certificado autoassinado.
Ele também usa vários namespaces e atributos XML em subelementos na solicitação.
Aqui está um exemplo de solicitação:
<soapenv:Envelope >="http://schemas.xmlsoap.org/soap/envelope/" >="http://www.w3.org/2001/XMLSchema-instance" >="http://magiccompany.com/supermagic">
<soapenv:Header/>
<soapenv:Body>
<mag:example>
<someStuff>123</someStuff>
<someAuthStuff >="http://magiccompany.com/specialstuff"
xsi:type="n2:SpecialLogin">
<username>abc</username>
<password>test123</password>
</someAuthStuff>
</mag:example>
</soapenv:Body>
</soapenv:Envelope>
Agora precisamos de alguns ajustes nos padrões de Savon.
Atributos de configuração
Agora, na v2 do Savon, você pode definir atributos no elemento raiz da solicitação (em nosso caso mag:example
, adicionando uma attributes
chave ao hash da solicitação como este:
client.call (: someMethod, message: {example: {}}, attribute: {someAttr: 123})
Portanto, esta base é facilmente coberta.
Atributos aninhados
A parte importante neste XML: o namespace adicional e o no elemento aninhado. Então, como colocamos os dois atributos lá em Savon 2?xsi:type
Bem, aí vem o passeio de pônei mágico supernão óbvio : você pode especificá-los colocando uma chave com um hash para os elementos para os quais deseja definir atributos. Diversão!:attributes!
require 'savon'
client = Savon.client(wsdl: 'wsdl/magic.wsdl', ssl_verify_mode: :none, ssl_version: :TLSv1)
client.call(:example, message: {
someStuff: 123,
someAuthStuff: {
username: "abc",
password: "test123"
},
:attributes! => {
someAuthStuff: {
"xsi:type" => "n2:SpecialLogin",
"> => "http://magiccompany.com/specialstuff"
}
}
})
Sim, sim – uso inconsistente da antiga e da nova sintaxe hash, mas para aquela chave, não quero mudar para a antiga sintaxe em nenhum outro lugar. É por isso.
Portanto, agora divirta-se, viva muito e prospere.