JAX-WS vs SAAJ Style, для использования

В чем разница, философская или нет, между вызовом веб-службы из Java-кода с использованием классов Service и Dispatch, а также класса SOAPConnection?

Например, что-то вроде этого:

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

против чего-то примерно такого уровня?

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

В чем разница между ними и почему выбрать один подход над другим?

Ответ 1

Следующая строка - выдержка из Java SOA Cookbook - O'Reilly

"Соединение SOAP позволяет отправлять SOAP-сообщение ресурсу в конце URL. Это удобно использовать в любой ситуации, но необходимо, если эта служба не имеют определенный WSDL. Thats, потому что вызов Service.create требует прохождения в местоположение WSDL. Это может быть редко, если у вас нет WSDL с SOAP-основанной службы, но это произойдет, и вы будете готовы.

Чтобы создать соединение с веб-службой, которая не предоставляет WSDL, вы можете использовать Класс SOAPConnection для прямой связи с удаленным ресурсом. Затем вы создаете объект URL, представляющий удаленный ресурс (сервлет), который вы хотите вызвать. Передайте сообщение запроса SOAP и конечную точку вы хотите вызвать метод вызова на свой объект соединения, а затем дождаться чтобы вернуть ответ SOAP.

• URL-адрес конечной точки, переданный методу connection.call, может быть либо строкой, либо java.net.URL. "

Ответ 2

У меня такое чувство, что в конце Dispatch просто делегирует действия на уровень SAAJ. Однако я не смог это подтвердить.

С точки зрения лучшей практики, я чувствую, что методология Dispatch более уместна, поскольку она абстрагирует некоторые из накладных расходов на работу с API SAAJConnection более низкого уровня. Например: нет необходимости делать close() в экземпляре соединения, ссылка на отправку не нужно воссоздавать в отличие от экземпляра SOAPConnection.