SOAP-Webservice-Aufrufe von Javascript

8

Ich habe Schwierigkeiten, von einer Webseite aus einen Webservice-Aufruf an einen SOAP-Webdienst zu senden. Der Webdienst ist ein Java-Webdienst, der JAX-WS verwendet.

Hier ist die Webmethode, die ich aufrufen möchte:

%Vor%

Ich habe versucht, den Web-Service-Aufruf mit der JQuery-Bibliothek jqSOAPClient ( Ссылка ) auszuführen.
Hier ist der Code, den ich benutzt habe:

%Vor%

Es scheint keine Antwort zu geben. Wenn in jqSOAPClient.js ich das xData.responseXML Datenelement protokolliere, bekomme ich 'undefiniert'. Im Web-Service sehe ich die Warnung

  

24 Mar 2011 10:49:51 AM com.sun.xml.ws.transport.http.server.WSHttpHandler handleExchange   WARNUNG: Kann die HTTP-Methode nicht verarbeiten: OPTIONS

Ich habe auch versucht, eine Javascript-Bibliothek, soapclient.js ( Ссылка ) zu verwenden. Der clientseitige Code, den ich hier verwende, ist

%Vor%

Ich habe den Teil in soapclient.js umgangen, der die WSDL holt, da es nicht funktioniert (Ich bekomme ein: IOException: An established connection was aborted by the software in your host machine auf der Web-Service-Seite). Die WSDL wird nur für den entsprechenden zu verwendenden Namespace abgerufen. Daher habe ich gerade die Variable ns durch den tatsächlichen Namespace ersetzt.

Ich bekomme genau die gleiche Warnung auf dem Web-Service wie zuvor (kann nicht HTTP-Methode: OPTIONS behandeln) und in der Fehlerkonsole des Browsers bekomme ich den Fehler "Dokument ist null". Wenn ich den Wert von req.responseXML in soapclient.js protokolliere, sehe ich, dass es null ist.

Könnte irgendjemand Ratschläge geben, was schief gehen könnte und was ich tun sollte, damit dies funktioniert?

    
bgh 24.03.2011, 09:22
quelle

3 Antworten

2

Ich habe herausgefunden, was hier vor sich geht. Es ist das gleiche Szenario wie in diesem Thread: jQuery $ .ajax (), $ .post sendet "OPTIONS" als REQUEST_METHOD in Firefox .

Im Grunde benutze ich Firefox und wenn man einen Cross-Domain-Aufruf (Domain der Adresse des Web-Service ist nicht der Domain der Webseite) von Firefox mit AJAX macht, sendet Firefox zuerst ein OPTIONS-HTTP -Nachricht (bevor es die POST-Nachricht sendet), um vom Webdienst zu bestimmen, ob der Anruf zulässig sein soll oder nicht. Der Webdienst muss dann auf diese OPTIONS-Nachricht antworten, um zu sagen, ob die Anfrage durchgelassen werden kann.

Die Warnung von JAX-WS ("Kann HTTP-Methode nicht verarbeiten: OPTIONS") schlägt jetzt vor, dass sie keine OPTIONS-HTTP-Nachrichten behandeln wird. Das ist in Ordnung - der Webservice wird schließlich auf Glassfish laufen. Die Frage ist nun, wie ich Glassfish so konfigurieren kann, dass es auf die Nachricht OPTIONS reagiert.

In dem oben erwähnten Thread sagt Juha, dass er den folgenden Code in Django verwendet:

%Vor%

Access-Control-Allow-Origin gibt ein Muster an, das angibt, welche Ursprünge (Empfängeradressen) akzeptiert werden (meine könnte etwas strenger sein, als einfach irgendeinen Ursprung zuzulassen), und Access-Control-Max-Age gibt an, nach wie vielen Sekunden muss der Client die Erlaubnis erneut anfordern.

Wie mache ich das in Glassfish?

    
bgh 25.03.2011, 12:45
quelle
1

Haben Sie tatsächlich getestet, dass ws funktioniert? Sie können SoapUI zum Überprüfen von Anfragen / Antworten usw. verwenden. Wenn Sie bestätigen, dass ws von SoapUI funktioniert, überprüfen Sie, was das Format der rohen Soap-Nachricht ist. Versuchen Sie dann zu überprüfen, wie es aussieht, bevor Sie die .js-Methode senden, und vergleichen Sie sie.

Es könnte Ihnen helfen zu verstehen, was falsch ist.

    
Aleksandar 24.03.2011 11:20
quelle
0

Überprüfen Sie, ob dies hilft Ссылка

es ist als ungültig gekennzeichnet Ссылка
aber es könnte dir einen Hinweis geben

Andererseits ist es besser, die richtigen Einstellungen für domainübergreifendes Skripting außer Kraft zu setzen, wenn Sie eine lokale Seite erstellen und aufrufen können, die eine Anfrage an ws stellt und das Ergebnis zurückgibt.
Oder noch besser, Sie können eine Seite erstellen, die die URL als Parameter erhält, und eine Anfrage an diese URL senden und nur das Ergebnis zurückgeben. Auf diese Weise wird es generischer und wiederverwendbar.

    
Aleksandar 29.03.2011 21:17
quelle

Tags und Links