2010-10-07 13 views
11

Qual è la differenza, filosofica o meno, tra la chiamata di un servizio Web dal codice Java utilizzando le classi Service e Dispatch, rispetto a una classe SOAPConnection?Stile JAX-WS vs SAAJ, che usare

Per esempio, qualcosa di simile:

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

vs qualcosa di più o meno in questo senso?

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

Qual è la differenza tra questi e perché selezionare un approccio rispetto all'altro?

risposta

1

Ho la sensazione che alla fine, Dispatch semplicemente deleghi le azioni a un livello SAAJ. Tuttavia, non sono stato in grado di confermarlo.

Dal punto di vista di ciò che è una pratica migliore, ritengo che la metodologia di Dispatch sia più appropriata in quanto astrae alcuni dei costi generali del lavoro con l'API SAAJConnection di livello inferiore. Come - non c'è bisogno di fare un close() sull'istanza di connessione, il riferimento di dispacciamento non deve essere ricreato diversamente dall'istanza SOAPConnection.

+0

Vuoi dire;. SAAJ è di livello inferiore che significa che può essere più spesific ma si deve scrivere un sacco di cose ma JAXWS è più semplice ma non puoi essere più spesifico? Ti ho preso in modo corretto? – PeerNet

3

La seguente riga sono estratto da Java SOA Cookbook -. O'Reilly

"La connessione SOAP consente di inviare un messaggio SOAP a una risorsa alla fine di un URL Questo è comodo da usare in qualsiasi situazione, ma necessaria se tale servizio non ha un WSDL definito. Questo perché chiamare Service.create richiede di passare nella posizione del WSDL. Potrebbe essere raro che non si disponga di un WSDL con un servizio basato su SOAP , ma succede e sarai preparato

Per creare una connessione a un servizio Web che Non esporre un WSDL, è possibile utilizzare la classe SOAPConnection per comunicare direttamente con la risorsa remota. Quindi si crea un oggetto URL che rappresenta la risorsa remota (servlet) che si desidera chiamare. Passare il messaggio di richiesta SOAP e l'endpoint da richiamare al metodo di chiamata sull'oggetto di connessione, quindi attendere per restituire una risposta SOAP.

• L'URL endpoint passato al metodo connection.call può essere una stringa o un java.net.URL "

Problemi correlati