Warum ist "wsdl" namespace warf in Aktion bei der Verwendung von savon für die ruby-soap-Kommunikation?

Ich versuche, Zugriff auf einen SOAP-service, den ich nicht kontrollieren. Eine der Aktionen nennt ProcessMessage. Ich folgte dem Beispiel und generiert eine SOAP-Anfrage, aber ich bekam einen Fehler zurück und sagte, dass die Aktion nicht vorhanden ist. Ich verfolgte das problem auf die Art und Weise der Körper der Hülle erzeugt wird.

<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>     

Dass ProcessMessage tag sollte sein:

    <ProcessMessage xmlns="http://www.starstandards.org/webservices/2005/10/transport">

Das ist, was es ist, wenn es erzeugt wird, durch die Beispiel-Java-app, und es funktioniert. Diesem tag der einzige Unterschied zwischen dem, was meine Ruby app erzeugt und die Beispiel-Java-app. Gibt es eine Möglichkeit, um loszuwerden, das "wsdl:" namespace vor, dass ein tag und ein Attribut hinzuzufügen, das wie. Abgesehen von, dass, gibt es eine Möglichkeit zu zwingen, die Aktion nicht generiert werden, indem nur die als Zeichenfolge übergeben, wie der rest des Körpers?

Hier ist mein code:

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

Ich habe versucht, handsoap, aber es nicht unterstützt HTTPS und ist verwirrend. Ich habe versucht, soap4r aber aber es ist noch mehr verwirrend als handsoap.

  • ein ticket wurde geöffnet, unter: github.com/rubiii/savon/issues#issue/39
  • Hi Nick, hast du irgendwo mit diesem, wie ich sehe das gleiche Problem.
  • Hallo Steve. Ich lege diesen Teil des Projekts auf dem status "warten" - da gab es andere, wichtigere, Funktionen benötigen, die Umsetzung, und das war auf eine "nice to have" - Liste. Ich werde versuchen, Ihre Lösung noch heute und sehen, ob funktioniert. Vielen Dank für das lassen mich wissen, du!
InformationsquelleAutor konung | 2010-02-19
Schreibe einen Kommentar