Sto tentando di accedere a un servizio SOAP che non controllo. Una delle azioni è denominata ProcessMessage
. Ho seguito l'esempio e generato una richiesta SOAP, ma ho ricevuto un errore che diceva che l'azione non esiste. Ho tracciato il problema sul modo in cui viene generato il corpo dell'involucro.Perché lo spazio dei nomi "wsdl" è interposto nel nome dell'azione quando si utilizza savon per la comunicazione ruby soap?
<env:Envelope ... ">
<env:Header>
<wsse:Security ... ">
<wsse:UsernameToken ...">
<wsse:Username>USER</wsse:Username>
<wsse:Nonce>658e702d5feff1777a6c741847239eb5d6d86e48</wsse:Nonce>
<wsu:Created>2010-02-18T02:05:25Z</wsu:Created>
<wsse:Password ... >password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</env:Header>
<env:Body>
<wsdl:ProcessMessage>
<payload>
......
</payload>
</wsdl:ProcessMessage>
</env:Body>
</env:Envelope>
Che ProcessMessage
tag deve essere:
<ProcessMessage xmlns="http://www.starstandards.org/webservices/2005/10/transport">
Questo è ciò che è quando si è generato dalla applicazione del campione di Java, e funziona. Quel tag è l'unica differenza tra ciò che genera la mia app Ruby e l'app Java di esempio. C'è un modo per sbarazzarsi dello spazio dei nomi "wsdl:"
davanti a quel tag e aggiungere un attributo del genere. Escludendo, c'è un modo per forzare l'azione a non essere generata appena passata come una stringa come il resto del corpo?
Ecco il mio codice:
require 'rubygems'
require 'savon'
client = Savon::Client.new "https://gmservices.pp.gm.com/ProcessMessage?wsdl"
response = client.process_message! do | soap, wsse |
wsse.username = "USER"
wsse.password = "password"
soap.namespace = "http://www.starstandards.org/webservices/2005/10/transport" #makes no difference
soap.action = "ProcessMessage" #makes no difference
soap.input = "ProcessMessage" #makes no difference
#my body at this point is jsut one big xml string
soap.body = "<payload>...</payload>"
# putting <ProccessMessage> tag here doesn't help as it just creates a duplicate tag in the body, since Savon keeps interjecting <wsdl:ProcessMessage> tag.
end
ho provato handsoap ma non supporta HTTPS ed è fonte di confusione. Ho provato soap4r ma è ancora più complicato del handsoap.
un biglietto per questo è stato aperto: http://github.com/rubiii/savon/issues#issue/39 – rubiii
Ciao Nick, sei arrivato da nessuna parte con questo come sto vedendo lo stesso problema. –
Ciao Steve. Ho messo questa parte del progetto in attesa - poiché c'erano altre, più importanti, funzionalità che necessitavano di implementazione, e questo era su una lista "carina da avere". Proverò la tua soluzione più tardi oggi e vedrò se funziona. Grazie per avermi fatto sapere! – konung