JAX-WS против стиля SAAJ, который использовать - PullRequest
12 голосов
/ 07 октября 2010

В чем заключается философское или иное различие между вызовом веб-службы из кода 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);

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

Ответы [ 2 ]

3 голосов
/ 29 апреля 2014

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

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

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

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

1 голос
/ 08 октября 2010

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

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

...