Как отправить soap запрос java

Клиент web-сервиса SOAP

Данная статья является продолжением описания WEB-сервиса SOAP. С общим описанием веб-сервисов (что это такое и какие типы веб-сервисов используются) можно познакомиться здесь. Создание и тестирование WEB-сервиса SOAP рассмотрено отдельно на практическом примере в среде разработки Eclipse. Для описания WEB-сервиса SOAP используется язык WSDL В этой статье на рабочем примере будем рассматривать вопрос создания клиента веб-сервисов SOAP. В качестве «подопытных» используем действующие на момент написания статьи два веб-сервиса.

Первый веб-сервис http://www.webservicex.net/uszip.asmx используем для получения почтовых значений ZIP районов города New York. На следующем скриншоте представлены методы WEB-сервиса, которые Вы можете увидеть при нажатии на ссылку. Используем второй по списку метод GetInfoByCity.

Как отправить soap запрос java

Второй веб-сервис BELAVIA включает метод получения списка аэропортов GetAirportsList и метод получения списка рейсов с информацией о вылете/прилёте и состоянии рейса GetTimeTable. По ссылке можно перейти на страницу описания веб-сервиса и посмотреть параметры методов web-сервиса BELAVIA, а также примеры запросов и ответов. В примере будем получать список аэропортов, используя метод GetAirportsList.

Примечание : если по указанным выше ссылкам можно открыть описания WEB-сервисов, то рассматриваемый на странице пример сможет выполнить запрос и получить ответ.

Структура сообщений SOAP

Оболочка сообщения ( ) содержит элементы Header и Body, которые также, как и Envelope принадлежат пространству имен http://schemas.xmlsoap.org/soap/envelope/.

Для работы с WEB-сервисом SOAP удобнее всего использовать SAAJ (SOAP with Attachments API for Java), который представляет программный интерфейс Java для сообщений SOAP. В пакет SAAJ включен класс SOAPConnection, который позволяет отправлять запросы веб-сервису. Объект подключения SOAPConnection создается с помощью SOAPConnectionFactory, который также используется и для создания SOAP сообщения (SOAPMessage). Следующий код демонстрирует создание SOAPConnection и SOAPMessage.

С помощью объекта MessageFactory создается объект сообщения SOAPMessage, у которого первоначально разделы envelope и header пусты. Объект SOAPPart содержит envelope, в который включается тело сообщения. Для формирования тела сообщения определяется ссылка SOAPBody.

SAAJ также позволяет напрямую создать объект SOAPPart-сообщения из внешнего файла. Так часто отправляемый запрос можно поместить в файл weather.msg, чтобы при необходимости его содержимое загружать в тело SOAP вместо ручного создания. Следующий код демонстрирует формирование тела SOAP сообщения с использованием потока ввода.

Класс StreamSource открывает файловый поток ввода FileInputStream и читает готовое к отправке сообщение.

Пример клиента WEB-сервиса SOAP

Как отправить soap запрос java

Библиотека saaj.jar позволяет использовать в клиенте web-сервиса SOAP программный интерфейс Java для сообщений SAAJ (SOAP with Attachments API for Java).

Структура класса SoapClientExample

SoapClientExample включает методы формирования SOAP сообщения (createSoapEnvelope, createSOAPRequest) и метод вызова веб-сервиса (callSoapWebService). Код методов представлен ниже. Переменные, определяющие параметры Web-сервиса и запроса, вынесены из методов и объявлены глобальными. Метод setSoapParams в зависимости от установленного флага belavia инициализирует параметры запроса одного из используемых web-сервисов.

Метод создания оболочки сообщения

Метод createSoapEnvelope формирует тело сообщения в зависимости от установленного флага belavia.

Метод создания запроса к веб-сервису

Метод createSOAPRequest подготавливает SOAP сообщение и вызывает метод формирования тела сообщения createSoapEnvelope.

Метод вызова WEB-сервиса

Метод callSoapWebService используется для отправки запроса и получения ответа. Отправка сообщений SOAP и получение ответов выполняются за один шаг, т.е. синхронно. Сообщение отправляется в момент вызова метода call объекта SOAPConnection, который принимает в качестве аргументов адрес назначения и само сообщение. После этого соединение не закрывается и находится в ожидании ответа. В качестве ответа метод возвращает другой объект также типа SOAPMessage.

Вывод результата запроса выводится в консоль. Но поскольку полученный объект типа SOAPMessage, также является сообщением SOAP, то как и любое XML-сообщение, его можно трансформировать с помощью XSLT. SOAP позволяет выполнить XSLT-преобразование напрямую. В следующем листинге приводится метод printSOAPMessage, в котором выполняется данное преобразование.

Примечание :
1. XSLT (eXtensible Stylesheet Language Transformations) — это язык преобразования XML-документов. При применении таблицы стилей XSLT, состоящей из набора шаблонов, к XML-документу создается конечное дерево, которое может быть сериализовано в виде XML-документа.
2. Метод printSOAPMessage и флаг useXSLT не представлены в общей структуре класса SoapClientExample, поскольку в бо́льшей степени относятся к XML, чем к SOAP.

При использовании XSLT в методе printSOAPMessage сначала создается объект Transformer. После этого определяется содержимое content типа javax.xml.transform.Source. Поскольку content выводится только в консоль (System.out), то таблица стилей не используется. При обработке можно выделить как оболочку, так и тело сообщения.

Тестирование примера

Программа выводит в консоль тексты SOAP сообщений как запроса, так и ответа.

Ниже представлен результат выполнения запроса к сервису получения ZIP значений города Нью-Йорка. Ответ представлен в виде массива данных (отображены только первые два и последний элементы массива).

Ответ на запрос получения списка аэропортов также представлен в виде массива данных (отображены только четыре первых и последний элементы массива).

Скачать пример

Исходный код примера в виде проекта Eclipse soap-client, включающий библиотеку saaj.jar, можно скачать здесь (23 Кб).

Пример SOAP клиента с авторизацей представлен здесь.

Источник

SOAP request to WebService with java

I’m a bit confused about how to make a request to a webservice via java.

For now the only thing that I’ve understand is that webservices uses xml structured messages, but still I didn’t quite understood how to structure my request.

Basically I’ve to send 2 parameters to the web service and in return I expect two other parameters.

I guess there are some jars that can do most of the job, but I didn’t find any online. Can someone please explain me the basis?

Как отправить soap запрос java

Как отправить soap запрос java

4 Answers 4

A SOAP request is an XML file consisting of the parameters you are sending to the server.

The SOAP response is equally an XML file, but now with everything the service wants to give you.

Basically the WSDL is a XML file that explains the structure of those two XML.

To implement simple SOAP clients in Java, you can use the SAAJ framework (it is shipped with JSE 1.6 and above):

SOAP with Attachments API for Java (SAAJ) is mainly used for dealing directly with SOAP Request/Response messages which happens behind the scenes in any Web Service API. It allows the developers to directly send and receive soap messages instead of using JAX-WS.

See below a working example (run it!) of a SOAP web service call using SAAJ. It calls this web service.

Как отправить soap запрос java

When the WSDL is available, it is just two steps you need to follow to invoke that web service.

Step 1: Generate the client side source from a WSDL2Java tool

Step 2: Invoke the operation using:

If you look further, you will notice that the Stub class is used to invoke the service deployed at the remote location as a web service. When invoking that, your client actually generates the SOAP request and communicates. Similarly the web service sends the response as a SOAP. With the help of a tool like Wireshark, you can view the SOAP messages exchanged.

However since you have requested more explanation on the basics, I recommend you to refer here and write a web service with it’s client to learn it further.

Источник

SOAP-сервер на Java при участии Apache CXF и Spring

0. Начальные условия

Вот так выглядит исходная WSDL-схема:

Сервис имеет весьма простую функциональность: возвращает текущее время в указанном часовом поясе. В случае, когда пояс не указан, сервис возвращает текущее время сервера.

Структура проекта

Как отправить soap запрос java

Определим структуру проекта. В папке build будем хранить скрипты для ant. В модуле ObjectLibrary будем держать исходную схему, а также сгенерированные по ней классы. Модуль CurrentTimeService будет основным, в нем будем держать реализацию сервиса, также по нему будем собирать war-файл.

В pom-файлах укажем необходимые модулям зависимости. Внешних зависимостей у нас будет не много: spring-web, log4j, cxf-rt-frontend-jaxws и cxf-rt-transports-http — все они доступны в http://repo1.maven.org/maven2.

1. Создание java-интерфейса на основе WSDL-схемы

Для автоматической генерации java-интерфейса на основе WSDL-схемы воспользуемся утилитой wsdl2java из пакета Apache CXF. Немного модифицируем исходный ant-скрипт для того, чтобы он предварительно очищал директорию, в которую будут складываться java-классы. Это может быть полезно в том случае, если в будущем исходная схема будет меняться. По-умолчанию директория не очищается, что может приводить к появлению «мусора» из классов, которые больше не используются. Такая проблема характерна для схем, имеющих в своем составе сложные составные типы.

Разместим этот скрипт в файле build/build.xml. Запустим таску regenerate.object.library, в результате работы которой в папке ObjectLibrary получим необходимый нам интерфейс.

2. Реализация веб-сервиса на основе полученного интерфейса

Реализацию интерфейса CurrentTimeService разместим в одноименном модуле. Код незамысловатый и в дополнительных комментариях не нуждается.

Теперь, в соответствии с примером, добавим в ресурсы файлы serviceContext.xml и web.xml. Также не забудем про log4j.xml. Найти эти файлы можно в архиве с исходными кодами, ссылка на него приведена в конце статьи. После этого реализацию сервиса можно считать законченной, осталось собрать приложение и проверить его работоспособносcть.

3. Сборка и проверка

Для сборки проекта выполним задачу maven «package». Полученный war-файл развернем на сервере Tomcat. Будем считать, что он доступен на порту 8080.

Как отправить soap запрос java

Для проверки воспользуемся программой soapUI. WSDL-схема сервиса доступна по ссылке http://localhost:8080/CurrentTimeService/service/currentTimeService?wsdl, с ее помощью мы можем создать новый проект soapUI.

Вместо заключения

Поставленная задача достигнута: веб-сервис корректно обрабатывает запросы. Также нам удалось избежать «жесткой» привязки к генерируемой реализации, что делает код более гибким и позволяет прикладывать меньше усилий для внесения изменений в дальнейшем.

Источник

Запрос SOAP на веб-сервис с java

Я немного смущен тем, как сделать запрос к веб-сервису через java.

пока единственное, что я понимаю, это то, что веб-службы используют структурированные сообщения xml, но все же я не совсем понял, как структурировать мой запрос.

в основном я должен отправить 2 параметра в веб-службу, а взамен я ожидаю два других параметра.

Я думаю, есть несколько банок, которые могут сделать большую часть работы, но я не нашел их в интернете. Мочь кто-нибудь объяснит мне основу?

3 ответов

запрос SOAP представляет собой XML-файл, состоящий из параметров, отправляемых на сервер.

ответ SOAP в равной степени является XML-файлом, но теперь со всем, что служба хочет вам дать.

в основном WSDL-это XML-файл, который объясняет структуру этих двух XML.

для реализации простых клиентов SOAP в Java вы можете использовать структуру SAAJ (она поставляется с JSE 1.6 и выше):

мыло с API вложений для Java (SAAJ) в основном используется для работы непосредственно с SOAP-запросами / ответными сообщениями, которые происходят за кулисами в любом API веб-службы. Это позволяет разработчикам напрямую отправлять и получать сообщения soap вместо использования JAX-WS.

см. ниже рабочий пример (запустите его!) вызова веб-службы SOAP с помощью SAAJ. Он зовет этот веб-сервис.

когда WSDL доступен, это всего лишь два шага, которые вам нужно выполнить, чтобы вызвать эту веб-службу.

Шаг 1: Создайте источник на стороне клиента из WSDL2Java инструмент

Шаг 2: вызовите операцию, используя:

Если вы посмотрите дальше, вы заметите, что Stub класс используется для вызова службы, развернутой в удаленном расположении в качестве веб-службы. При вызове этого ваш клиент фактически генерирует запрос SOAP и взаимодействует. Аналогично веб-служба отправляет ответ в мыло. С помощью такого инструмента, как Wireshark, вы можете просматривать обмен сообщениями SOAP.

однако, поскольку вы запросили больше объяснений по основам, я рекомендую вам обратиться здесь и написать веб-сервис, с клиентом, чтобы узнать его дальше.

я столкнулся с другим подобным вопросом здесь. Оба вышеуказанных ответа идеальны, но здесь пытаются добавить дополнительную информацию для тех, кто ищет SOAP1.1, а не SOAP1.2.

просто измените один код строки, предоставленный @acdcjunior, используйте SOAPMessageFactory1_1Impl реализация, она изменит пространство имен на xmlns:soap=»http://schemas.xmlsoap.org/soap/envelope/», который является SOAP1.1 осуществление.

изменить callSoapWebService Способ первый очередь следовать.

Источник

Вызов веб-службы SOAP в Java

Узнайте, как создать SOAP-клиент на Java с помощью JAX-WS RI.

1. Обзор

Для тех, кто только начинает, наше введение в JAX-WS дает отличную информацию по этому вопросу.

2. Веб-Служба

Прежде чем мы начнем создавать клиент, нам нужен сервер. В этом случае сервер предоставляет веб-службу JAX-WS.

Для целей этого урока мы будем использовать веб-сервис, который будет получать данные о стране, учитывая ее название.

2.1. Резюме осуществления

Поскольку мы сосредоточены на создании клиента, мы не будем вдаваться в детали реализации нашего сервиса.

Мы запустим Country Service Publisher как Java-приложение для публикации конечной точки, которая будет принимать входящие запросы. Другими словами, это будет наш сервер.

После запуска сервера нажмите на URL-адрес http://localhost:8888/ws/country?wsdl предоставляет нам файл описания веб-службы. WSDL служит руководством для понимания предложений службы и создания кода реализации для клиента.

2.2. Язык Описания Веб-Сервисов

Давайте посмотрим на WSDL нашего веб-сервиса, страна :

В двух словах, это полезная информация, которую он предоставляет:

Это все, что нам нужно для реализации клиента.

Давайте посмотрим, как это сделать в следующем разделе.

3. Использование wsimport для создания клиентского кода

3.1. Плагин Maven

Во-первых, давайте добавим плагин в ваш pom.xml чтобы использовать этот инструмент через Maven:

Во-вторых, давайте выполним этот плагин:

Другой способ добиться того же – использовать утилиту wsimport //. Он поставляется из коробки со стандартным дистрибутивом JDK 8 и может быть найден в каталоге JAVA_HOME/bin .

Важно иметь в виду, что конечная точка службы должна быть доступна для успешного выполнения плагина или команды.

Далее давайте рассмотрим сгенерированные артефакты.

3.2. Генерируемые POJOs

Как мы видим, сгенерированный класс украшен аннотациями JAXB для маршалинга и разархивирования объекта в XML и из XML.

Кроме того, он генерирует Валюту перечисление:

3.3. Страновая служба

Второй сгенерированный артефакт-это интерфейс, который действует как прокси-сервер для реальной веб-службы.

Интерфейс Country Service объявляет тот же метод, что и наш сервер, findByName :

Примечательно, что интерфейс помечен как javax.jws.WebService с привязкой SOAP.Стиль как RPC, как определено WSDL службы.

3.4. Сервис CountryServiceImpl

Использование прокси-сервера создает впечатление, что мы вызываем службу локально, абстрагируясь от тонкостей удаленного вызова.

4. Тестирование клиента

Затем мы напишем тест JUnit для подключения к веб-службе с помощью сгенерированного клиентского кода.

Прежде чем мы сможем это сделать, нам нужно получить экземпляр прокси-сервера службы на стороне клиента:

Теперь давайте рассмотрим некоторые тесты:

5. Заключение

В качестве альтернативы мы можем использовать другие реализации JAX-WS, такие как Apache CXF, Apache Axis2 и Spring, чтобы сделать то же самое.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *