soap java что это

Введение в SOAP

Что такое SOAP?

SOAP расшифровывается как Simple Object Access Protocol (Простой Протокол Доступа к Объектам). Надеюсь по прочтении статьи вам останется только недоумевать: «Что за странное название?»

SOAP в теперешней его форме – это метод удаленного вызова (RPC, Remote procedure Call) по сети. (Да, он также используется для передачи документов в виде XML, но мы это пока опустим).

Давайте разбираться. Представьте, что у вас есть сервис, который возвращает биржевую котировку (stock quote) для заданного тикера (stock symbol). Он посылает данные на сайт Nasdaq и формирует на основе возвращенного HTML нужный результат. Дальше, чтобы позволить другим разработчикам использовать его внутри своих приложений, вы делаете из этого сервиса компонент, который через Интернет находит информацию о котировках. Работает он отлично, пока в один прекрасный день Nasdaq не меняет разметку своих страниц. Вам приходится пересмотреть всю логику работы компонента и разослать обновления всем разработчикам, использующим его. А им в свою очередь необходимо разослать обновления всем своим пользователям. Если это происходит на более-менее постоянной основе, вы можете нажить немало врагов среди коллег-разработчиков. А с программистами, как известно, шутки плохи. Вы же не хотите завтра доставать фотографию любимого кота из офисного шредера, правда?

Что же делать? Посмотрим. все, что вам нужно, это предоставить одну функцию, которая будет принимать на вход тикер (типа string) и возвращать биржевую котировку (типа float или double). Так не проще ли было бы просто позволить вашим разработчикам каким-то образом вызвать эту функцию через Интернет? Отлично! Тоже мне новость, есть же COM и Corba, и Java, которые этим занимаются уже годами. что правда – то правда, но эти методы не без изъяна. Удаленная настройка COM не тривиальна. Кроме того, нужно открыть столько портов в брандмауэре, что на системного администратора пива не напасешься. Да, и придется забыть о пользователях всех операционных систем кроме Windows. Но ведь позьзователи Linux тоже иногда интересуются биржей.

Хотя, похоже, что не все потеряно для пользователей Linux, если они используют DCOM, больше здесь: http://www.idevresource.com/com/library/res/articles/comonlinux.asp.

На счет Corba и Java я много сказать не могу, так что в качестве упражнения предлагаю читателям найти минусы в этих подходах.

SOAP – это стандарт, который позволяет вам описать такой удаленный вызов и вид, в котором будет возвращаться результат. Таким образом вам нужно разместить вашу функцию в приложении, доступном по сети и получать вызовы в виде SOAP пакетов. После этого вы валидируете входные данные, запускаете вашу функцию и возвращаете результат в новом SOAP пакете. Весь процесс может работать через HTTP, так что вам не придется открывать кучу портов в брандмауэре. Правда просто?

О чем эта статья

Это первая из серии статей о SOAP, которые мы пишем в Agni Software. В этой статье я постараюсь дать вам представление о том, что такое SOAP и как написать приложение, общающееся с SOAP сервером.

Soap и XML

Если вам SOAP пока еще кажется простым, добавим XML. Теперь вместо имени функции и параметров мы получаем довольно сложный XML-конверт, как будто созданный для того, чтобы сбить вас с толку. Но не спешите пугаться. Дальше – больше, и вам нужно увидеть всю картину, чтобы оценить всю сложность SOAP.
Если вы не знаете, что такое XML, для начала прочтите мою статью об XML здесь: http://www.agnisoft.com/white_papers/xml_delphi.asp.

Все SOAP пакеты имеют XML формат. Что это значит? Посмотрим. Взгляните на эту функцию (Pascal):
Выглядит отлично, но проблема в том, что это – Pascal. Какая польза от этого простого определения для Java-разработчика? Или для кого-то, кто работает с VB? Нам нужно что-то, что будет понятно всем, даже VB-программистам. Так дайте им XML, содержащий одну и ту же инфрмацию (параметры, значения биржевых котировок и т.д.). Вы создаете SOAP пакет, который по сути является вызовом вашей функции, обернутый в XML, чтобы любое приложения на любой платформе могло его понять. Теперь посмотрим, как выглядит наш SOAP вызов:
Информативно, правда? SOAP упрощается на глазах. Ладно, шутки в сторону. Теперь я постараюсь объяснить вам, как разобраться в этом SOAP вызове.

Расшифровка тегов

Лирическое отступление на счет пространств имен: Пространство имен дает возможность квалифицировать XML тег. Нельзя, к примеру, иметь две переменные с одинаковым именем в одной процедуре, но если они в двух разных процедурах, проблем не возникает. Таким образом процедура – это пространство имен, так как все имена в ней уникальны. Точно так же XML теги имеют свою область видимости внутри пространств имен, так что имея пространство имен и имя тега, можно однозначно его идентифицировать. Мы определим пространство имен как URI, чтобы отличать наш NS1 от подражателей. В приведенном выше примере NS1 – это алиас, указывающий на urn:xmethods-quotes.

Обратите внимание также на атрибут encodingStyle – этот атрибут определяет каким образом сериализуется SOAP вызов.

Внутри тега указано «IBM». Это – значение параметра symbol функции GetStockQuote.

Ну и в конце, как порядочные люди, мы закрыли все теги.

Вот и разобрались с SOAP пакетом, определяющим вызов к SOAP серверу. А SOAP сервер с помощью XML парсеров, красной кнопки и космической станции «МИР» декодирует этот вызов и определяет, что вам нужна биржевая котировка. Он тут же находит нужную котировку и возвращает вам ее в таком виде:
После разворачивания SOAP конверта, срывания ленточек и шуршания оберткой, мы узнаем, что цена акции IBM – 34.5.

Большинство коммерческих серверов вернуло бы гораздо больше информации, например, в какой валюте и за какую цену была куплена последняя акция. Да и цена акции, пожалуй, была бы поточнее.

Таким образом мы знаем, чего ожидает SOAP сервер и что он вернет. Так КАК же отправить эту информацию? Использовать можно любой транспорт. Самым освещенным является HTTP. Я не стану вдаваться в подробности HTTP, для тех, кто не знает – это то, что использует ваш браузер, чтобы общаться с сайтами, на которые вы заходите.

Нужный HTTP запрос будт выглядеть приблизительно так:
Единственное, что еще стоит отметить – это заголовок SOAPAction. Этот заголовок указывает на цель запроса и является обязательным. Каждый SOAP сервер может иметь неограниченное количество функций и может использовать заголовок SOAPAction чтобы определить какую функцию вызывают. Брандмауэры и мультиплексоры также могут фильтровать контент на основании этого заголовка.

SOAP ответ от HTTP сервера будет выглядеть следующим образом:
Почему HTTP? Во-первых, сетевым администраторам не придется открывать уйму отдельных портов для SOAP вызовов. веб-сервер может спокойно обрабатывать вызовы, т.к. 80-й порт обычно открыт для всех для приема входящих запросов. Еще одним преимуществом является расширяемость веб-серверов с помощью CGI, ISAPI и других нативных модулей. Эта расширяемость позволяет написать модуль, обрабатывающий SOAP запросы не задевая другого веб-контента.

Надеюсь, эта статья помогла пролить немного света на SOAP. Если вы еще здесь и хотите почитать больше на эту тему, посетите сайт авторов: http://www.agnisoft.com/soap

Если Вам понравилась статья, проголосуйте за нее

Голосов: 15 Голосовать soap java что это. Смотреть фото soap java что это. Смотреть картинку soap java что это. Картинка про soap java что это. Фото soap java что это

Источник

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

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

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

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

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

soap java что это. Смотреть фото soap java что это. Смотреть картинку soap java что это. Картинка про soap java что это. Фото 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 что это. Смотреть фото soap java что это. Смотреть картинку soap java что это. Картинка про soap java что это. Фото soap java что это

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

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

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

Источник

Веб-сервисы в Java

Когда вы взаимодействуете с любой веб-страницей, это включает запрос и ответ через HTML-страницу. Аналогично, веб-сервисы также включают запрос и ответ, но в форме XML или JSON. Java, являясь подходящим языком для взаимодействия на стороне сервера, обеспечивает взаимодействие между различными приложениями на разных платформах.

Что такое веб-сервис в Java?

Веб-сервис в Java является подходящей средой для распространения связи между клиентскими и серверными приложениями во всемирной паутине. Это программный модуль, который предназначен для выполнения определенного набора задач следующим образом:

Преимущества

Как правило, существует два типа веб-сервисов в Java:

1. Soap

Простой объектный протокол доступа (SOAP) – это стандартная спецификация протокола обмена сообщениями на основе XML. Связь между веб-сервисом и клиентом происходит с использованием сообщений XML. Простая архитектура веб-сервиса имеет два компонента, а именно клиент и поставщик услуг.

soap java что это. Смотреть фото soap java что это. Смотреть картинку soap java что это. Картинка про soap java что это. Фото soap java что это

На приведенном выше рисунке вы можете заметить, как клиент будет общаться с поставщиком услуг. Поэтому для связи клиент должен знать такую информацию, как расположение сервера веб-служб, доступные функции, типы подписи и возврата, а также форматы ввода-вывода.

Поставщик услуг создаст стандартный XML-файл, который будет содержать всю вышеуказанную информацию. Таким образом, если этот файл передан клиенту, он сможет получить доступ к веб-сервису.

2. RESTful

Передача состояния представления (REST) – это клиент-серверная архитектура без сохранения состояния, в которой веб-службы рассматриваются как ресурсы и могут быть идентифицированы по их URL-адресам. Он состоит из двух компонентов REST-сервера, который обеспечивает доступ к ресурсам, и REST-клиента, который получает доступ и изменяет ресурсы REST. Взгляните на рисунок ниже для того же.

soap java что это. Смотреть фото soap java что это. Смотреть картинку soap java что это. Картинка про soap java что это. Фото soap java что это

В этом стиле архитектуры REST клиент и сервер обмениваются представлениями ресурсов, используя стандартизированный интерфейс и протокол. REST не является конкретным протоколом, но когда люди говорят о REST, они обычно имеют в виду REST по HTTP. Ответ от сервера рассматривается как представление ресурсов. Это представление может быть сгенерировано из одного или нескольких ресурсов. Веб-службы RESTful используют методы протокола HTTP для операций, которые они выполняют. Он включает в себя такие методы, как GET, POST, DELETE и т. д.

Существует два основных API, определенных для разработки приложений веб-служб.

Оба эти API-интерфейса Java являются частью стандартной установки JDK, поэтому вам не нужно добавлять какие-либо jar-файлы для работы с ними.

Пример JAX-WS

Давайте создадим простое приложение Hello World JAX-WS. Здесь создадим простой файл класса с именем Demo.java и напишем программу, как показано ниже, для отображения простого сообщения.

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

Пример JAX-RS

Джерси является эталонной реализацией API JAX-RS, он не является частью стандартного JDK, и вы должны включить все необходимые банки. Лучший способ – использовать сборку Maven, поэтому создайте простой веб-проект Dynamic, а затем преобразуйте его в Maven в Eclipse.

Чтобы создать приложение JAX-RS, вам необходимо выполнить следующие шаги.

Шаг 1: Добавьте зависимости в файл pom.xml, как показано ниже:

Шаг 2: Теперь следующим шагом является добавление сервлета Jersey в наш дескриптор развертывания web.xml в качестве фронт-контроллера.

Шаг 3: После всего этого давайте теперь создадим простой класс обслуживания JAX-RS.

После настройки вышеуказанного файла вам просто нужно экспортировать его как файл WAR, а затем получить к нему доступ в браузере. Вы получите вывод, как показано ниже.

Источник

Веб-сервисы SOAP в примере Java с использованием Eclipse

Веб-сервисы SOAP на java. Пример веб-службы SOAP на Java с использованием пошагового руководства Eclipse. Клиентский проект веб-служб SOAP, пример WSDL

Веб-сервисы SOAP на Java

Я использую Eclipse Mars Release (4.5.0) для этого урока, но я думаю, что эти шаги будут работать и со старыми версиями eclipse. Также убедитесь, что вы добавили Apache Tomcat или любой другой контейнер сервлетов в качестве сервера в Eclipse. Давайте начнем с нашей веб-службы Eclipse реализации прямо сейчас.

Пример веб-службы SOAP

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

Нажмите “Далее”, и вам будет предложено указать” Корневой контекст ” и расположение каталога содержимого. Вы можете оставить их по умолчанию.

Нажмите кнопку Готово, и Eclipse создаст для вас скелет проекта. Давайте начнем с нашей бизнес-логики. Поэтому для нашего примера мы хотели бы опубликовать веб-сервис, который можно использовать для добавления/удаления/получения объекта. Итак, первый шаг-создать компонент модели.

Ниже приведен класс службы реализации, мы используем Map для хранения объектов Person в качестве источника данных. В реальном программировании мы хотели бы сохранить их в таблицах базы данных.

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

Веб-сервисы SOAP на Java с использованием Eclipse

Как только наша бизнес-логика будет готова, следующим шагом будет использование Eclipse для создания приложения веб-службы на основе этого. Создайте новый проект и выберите Мастер веб-службы.

Нажмите кнопку Далее, и вы получите страницу, на которой должны быть предоставлены сведения о веб-сервисе и его клиенте. Это самая важная страница в создании веб-сервиса. Убедитесь, что вы выбрали “Тип веб-службы” как “Веб-служба Java bean снизу вверх”, потому что мы реализуем подход “снизу вверх”. Существует два способа создания веб-службы:

В реализации службы укажите класс реализации PersonServiceImpl полностью классифицированный путь. Убедитесь, что вы переместили ползунок в сервисе и типе клиента в левую сторону, чтобы он мог генерировать клиентскую программу, а также пользовательский интерфейс для тестирования нашей веб-службы. Проверьте наличие конфигураций в реализации веб-службы, вы должны предоставить правильные сведения о времени выполнения сервера, времени выполнения веб-службы и проекте службы. Обычно они заполняются автоматически, и вам не нужно вносить здесь какие-либо изменения.

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

Нажмите кнопку “Далее”, и вы получите страницу запуска сервера, нажмите кнопку “Запустить сервер”, а затем кнопка “Далее” будет включена.

Нажмите на кнопку Далее, и вы получите страницу для запуска “Обозревателя веб-служб”.

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

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

Нажмите кнопку Готово, и Eclipse создаст клиентский проект в вашей рабочей области, а также запустит страницу JSP для тестирования клиента, как показано ниже.

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

Тест веб-службы Eclipse SOAP

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

Откройте Result.jsp в клиентском проекте, и вы увидите, что он использует регистр переключения для создания вывода результата. Для метода getAllPersons() в моем случае это был случай 42. Обратите внимание, что в вашем случае все может быть совершенно по-другому. Я только что изменил код для случая 42, как показано ниже.

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

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

Веб-служба SOAP WSDL и конфигурации

Наконец, вы заметите, что файл WSDL создается в проекте веб – службы, как показано ниже.

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

Вы также можете получить доступ к файлу WSDL веб-службы через браузер, добавив ?wsdl к конечной точке веб-службы.

Вы также заметите, что web.xml модифицирован для использования оси Apache в качестве переднего контроллера для веб-службы.

На рисунке ниже показан веб-сервис и клиентский проект со всеми автоматически сгенерированными заглушками и страницами JSP для тестирования веб-службы.

Это все для веб-сервисов soap в примере java с использованием Eclipse, поскольку вы можете видеть, что вся сложная часть была выполнена Eclipse автоматически, и все наше внимание было сосредоточено на написании бизнес-логики для нашего веб-сервиса.

Источник

Что такое SOAP?

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

6 ответов 6

Лирическая часть.

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

Этот сервер может выполнять множество действий, работать с базой, выполнять какие-то сторонние запросы к другим серверам, заниматься каким-то вычислениями и т.д. жить и возможно развиваться по ему известному сценарию (т.е. по сценарию разработчиков). С таким сервером общаться человеку неинтересно, потому что он может не уметь/не хотеть отдавать красивые странички с картинками и прочим юзер-френдли контентом. Он написан и работает чтобы работать и выдавать на запросы к нему данные, не заботясь, чтоб они были человекочитаемые, клиент сам с ними разберется.

Практическая часть.

Веб-сервис (так называется то, что предоставляет сервер и то, что используют клиенты) дает возможность общения с сервером четко структурированными сообщениями. Дело в том, что веб-сервис не принимает абы какие данные. На любое сообщение, которое не соответствует правилам, веб-сервис ответит ошибкой. Ошибка будет, кстати, тоже в виде xml с четкой структурой (чего нельзя сказать правда о тексте сообщения).

WSDL (Web Services Description Language). Правила, по которым составляются сообщения для веб-сервиса описываются так же с помощью xml и также имеют четкую структуру. Т.е. если веб-сервис предоставляет возможность вызова какого-то метода, он должен дать возможность клиентам узнать какие параметры для данного метода используются. Если веб-сервис ждет строку для метода Method1 в качестве параметра и строка должна иметь имя Param1, то в описании веб-сервиса эти правила будут указаны.

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

Какие плюсы у всех этих наворотов:

Описание, имеющее четкую структуру, читается любым soap-клиентом. Т.е. какой бы ни был веб-сервис, клиент поймет какие данные веб-сервис принимает. По этому описанию клиент может построить свою внутреннюю структуру классов объектов, т.н. binding’и. В итоге программисту, использующему веб-сервис, остается написать что-то типа (псевдокод):

Минусов тоже полно:

В качестве примера есть открытый веб-сервис belavia:

Можете вручную создать и послать запрос типа:

ЗЫ Раньше был открыт веб-сервис аэрофлота, но после того как 1C добавили поддержку soap в 8ку, куча 1с-бета-тестеров с успехом положили его. Сейчас что-то там поменяли (адреса не знаю, можно поискать, если интересно).
ЗЗЫ Дисклеймер. Рассказал на бытовом уровне. Пинать можно.

Источник

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

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