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.