JAX-WS vs SAAJ Style, die zu verwenden

Welchen Unterschied gibt es, philosophisch oder nicht, zwischen dem Aufruf eines Webdienstes aus Java-Code mithilfe von Service- und Dispatch-classn oder einer SOAPConnection-class?

Zum Beispiel so etwas:

SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance(); SOAPConnection soapConnection = scf.createConnection(); SOAPMessage reply = soapConnection.call(soapMessage, url); 

vs etwas in etwa in dieser Richtung?

 svc = Service.create(url, serviceName); Dispatch dispatch = svc.createDispatch(portName, SOAPMessage.class, service.Mode.MESSAGE); SOAPMessage reply = (SOAPMessage)dispatch.invoke(soapMessage); 

Was ist der Unterschied zwischen diesen und warum wählen Sie einen Ansatz gegenüber dem anderen?

Die folgende Zeile ist ein Auszug aus dem Java SOA Cookbook – O’Reilly

“Die SOAP-Verbindung ermöglicht es Ihnen, eine SOAP-Nachricht an eine Ressource am Ende einer URL zu senden. Dies ist in jeder Situation nützlich, aber notwendig, wenn dieser Dienst keine definierte WSDL aufweist. Dies ist erforderlich, da der Aufruf von Service.create erforderlich ist Es kann jedoch vorkommen, dass Sie keine WSDL mit einem SOAP-basierten Dienst haben, aber das ist der Fall, und Sie werden vorbereitet sein.

Um eine Verbindung zu einem Webdienst herzustellen, der keine WSDL verfügbar macht, können Sie die SOAPConnection-class verwenden, um direkt mit der Remoteressource zu kommunizieren. Sie erstellen dann ein URL-Objekt, das die Remote-Ressource (Servlet) darstellt, die Sie aufrufen möchten. Übergeben Sie die SOAP-Anforderungsnachricht und den Endpunkt, den Sie aufrufen möchten, an die Aufrufmethode für Ihr Verbindungsobjekt, und warten Sie, bis eine SOAP-Antwort zurückgegeben wird.

• Die Endpunkt-URL, die an die connection.call-Methode übergeben wird, kann entweder eine Zeichenfolge oder eine java.net.URL sein. ”

Ich habe das Gefühl, dass die Disposition die Aktionen am Ende einfach auf eine SAAJ-Ebene delegiert. Das konnte ich jedoch nicht bestätigen.

Aus der Sicht dessen, was eine bessere Praxis ist, empfinde ich die Dispatch-Methode als angemessener, da sie einige der Gemeinkosten der Arbeit mit der SAAJConnection-API auf niedrigerer Ebene abstrahiert. Wie – es besteht keine Notwendigkeit, eine close () -Operation für die Verbindungsinstanz auszuführen. Im Gegensatz zur SOAPConnection-Instanz muss die Dispatch-Referenz nicht neu erstellt werden.