Warum wird der Namensraum "wsdl" in den Aktionsnamen eingefügt, wenn savon für die Ruby-Soap-Kommunikation verwendet wird?

8

Ich versuche auf einen SOAP-Dienst zuzugreifen, den ich nicht kontrolliere. Eine der Aktionen heißt ProcessMessage . Ich folgte dem Beispiel und generierte eine SOAP-Anfrage, aber ich bekam einen Fehler zurück und sagte, dass die Aktion nicht existiert. Ich verfolgte das Problem auf die Art und Weise, wie der Briefumschlag generiert wird.

%Vor%

Das ProcessMessage -Tag sollte sein:

%Vor%

Das ist es, wenn es von der Beispiel-Java-App generiert wird und es funktioniert. Dieses Tag ist der einzige Unterschied zwischen dem, was meine Ruby-App generiert, und der Beispiel-Java-App. Gibt es eine Möglichkeit, den Namensraum "wsdl:" vor diesem einen Tag loszuwerden und ein Attribut wie dieses hinzuzufügen. Abgesehen davon, gibt es eine Möglichkeit, die Aktion so zu erzwingen, dass sie nicht einfach als String wie der Rest des Körpers weitergegeben wird?

Hier ist mein Code:

%Vor%

Ich habe versucht, Handsoap, aber es unterstützt nicht HTTPS und ist verwirrend. Ich habe es versucht, aber es ist noch verwirrender als Handsoap.

    
konung 19.02.2010, 05:44
quelle

3 Antworten

4

Steve, siehst du das wsdl: vor dem ProcessMessage-Tag? - Ich dachte, das war die einzige Sache, die mich abwarf, aber es ist nicht (übrigens ist es schwer in Seife.rb in Savon Lib in Zeile 160 gesetzt). Das, auch wenn ich es nicht in soap.namespaces spacifiere - es wird schwer erzeugt und im finalen XML angehängt. Was von meinem Service nicht erlaubt ist.

Während das erzeugte xml ein gültiges xml ist, ist es nicht vollständig durch die requirments des Dienstes, mit dem ich versuche zu sprechen. Ie .: in generierten XML,

%Vor%

Tag fehlt, auch brauche ich PayloadManifest in der Kopfzeile, und ich brauche wsu: erstellt und wsu: läuft in meinem wsse: tag ab, aber sie sind nicht implementiert, etc., etc. ein paar andere kleine Macken, die sind zu spezifisch für meinen Fall. Allerdings hat soap eine private Methode = xml_body. Auch die Soap lib in der Methode to_xml überprüft, ob @xml_body bereits gesetzt wurde, bevor sie ihr eigenes XML erzeugt. Also änderte ich leicht das Verhalten von Seife. indem man soap.xml_body = öffentlich zugänglich macht. So konnte ich tun:

%Vor%

Was endlich funktioniert !!!!

Ich schlage das rubii vor - wenn diese Option verfügbar ist, wird das viele seltene Fälle lösen - wo Leute ihr benutzerdefiniertes xml erzeugen und den Rest von savon lib benutzen können.

    
konung 16.03.2010, 20:39
quelle
10

Sie müssen ein Array an soap übergeben. Geben Sie als zweites Element einen Hash ein, der die Details des Namespaces enthält.

%Vor%

Dies sollte sicherstellen, dass Sie mit der Namespace-Deklaration als Attribut für das Hauptelement enden.

Sie werden wahrscheinlich auch mit einer Namespace-Deklaration vor dem Element enden, so wie

%Vor%

Aber das war für mich kein Problem, es war das Fehlen des Namespace-Attributs, nicht das Vorhandensein des Namespace vor dem Element.

    
Steve Weet 16.03.2010 09:20
quelle
7

Für meinen Web-Service musste ich den "wsdl" -Namespace über Steve's Lösung loswerden.

Getestet mit Savon 0.9.6:

%Vor%     
Kenji Noguchi 06.08.2011 22:26
quelle

Tags und Links