Ich arbeite an einem Java 6-Anwendungsserver, der über einen Webdienst zum Empfangen von SOAP-Nachrichten mit einer HL7-Nachricht verfügt. Die Java-Anwendung wird auf Glassfish 3.1 ausgeführt. Der Client ist eine von Drittanbietern entwickelte C # -Anwendung (die auf dem Microsoft .NET 4.0-Framework ausgeführt wird) und sendet diese SOAP-Nachrichten an den Java-Server.
Mein erstes Problem war, dass der Client die WSDL, die vom Server generiert wurde, nicht analysieren konnte. Ich habe das inzwischen gelöst, indem ich meine eigene benutzerdefinierte WSDL implementiere und sie entsprechend abstimme. Dadurch konnte der Client die WSDL analysieren und SOAP-Nachrichten an meine Java-Serveranwendung senden.
Jedes Mal, wenn eine Nachricht auf der Serverseite empfangen wird, erhält der Parameter ("putXML" genannt) jedoch einen null
-Wert.
Das Glassfish-Serverprotokoll zeigt Folgendes an, wenn eine Nachricht empfangen wird:
%Vor%Hier ist die benutzerdefinierte WSDL, die ich erstellt und meinem SOAP-Webdienst zugeordnet habe:
%Vor%Und hier ist der Java Web Service:
%Vor%Gibt es etwas, was ich falsch mache?
Was kann ich tun, um den Java-Webdienst so zu reparieren, dass er einen Wert ungleich null erhält?
Ist das ein Problem mit dem Kunden? Wenn ja, müsste ich eine Art Interceptor erstellen?
Aktualisieren
Heute habe ich versucht, einen schnellen C # -Client zu erstellen, der meinen Java SOAP-Webdienst verwendet. Unten ist der Code:
%Vor% Wenn ich diesen Client ausführe, erhalte ich den gleichen null
-Wert im Parameter, als ich erwartet habe, dass die Zeichenfolge Test
angezeigt wird. Außerdem erwarte ich, dass result
eine Antwortzeichenfolge enthält, aber es gibt auch einen null
-Wert zurück.
Denken Sie daran, dass ich die C # -Client-Anwendung von Drittanbietern nicht ändern kann. Was kann ich am Java-Ende tun?
Update 2
Ich habe kürzlich eine Handler-Chain-Klasse hinzugefügt, die die rohen SOAP-Nachrichten erfasst und protokolliert. Die Nachricht, die vom Client gesendet wird, sieht folgendermaßen aus:
%Vor%Nachdem ich von @dlawrence in die richtige Richtung gelenkt wurde, konnte ich mein Problem lösen. Wie ich in der Frage erwähnt habe, musste ich immer noch eine benutzerdefinierte WSDL verwenden. Ich musste nur ein paar Änderungen an der WSDL und dem Java-Code vornehmen, um das Problem zu lösen.
Hier ist ein Unterschied, der meine Änderungen an der WSDL darstellt:
%Vor% Im Grunde war das ein dreiteiliger Fix ...
1). Ich musste das Attribut elementFormDefault="qualified"
aus dem <s:schema>
-Tag entfernen.
2). Dann musste ich das Attribut form="qualified"
auf meinem <s:element name="putXML" ...>
-Tag hinzufügen.
3). Schließlich musste ich sicherstellen, dass ich das Attribut soapAction="http://MyProject.MyPackage/putHL7Data"
auf meinem <soap:operation>
-Tag hatte.
Hier ist ein Unterschied, der meine Änderungen an der Java-Webmethode darstellt:
%Vor% Wie Sie sehen, musste ich nur das targetNamespace
-Attribut zu meinem @WebParam
hinzufügen.
Tags und Links java soap web-services glassfish-3 wsdl