Что такое SOAP в соответствии с определением W3C
«SOAP — это легкий протокол, предназначенный для обмена структурированной информацией в децентрализованной распределенной среде. Он использует технологии XML для определения и расширяемой структуры обмена сообщениями, обеспечивая конструкцию сообщения, которой можно обмениваться по множеству базовых протоколов. Фреймворк был спроектирован так, чтобы быть независимым от какой-либо конкретной модели программирования и другой конкретной семантики реализации »
Простой протокол доступа к объектам
- Проводной протокол, аналогичный IIOP для CORBA и JRMP для RMI
- XML используется для кодирования данных — текстовый и двоичный протокол
- Поддерживает RPC на основе XML (удаленный вызов процедур), чтобы упростить миграцию существующих схем распределения RPC в систему на основе SOAP (обратите внимание, что этот подход больше не используется из-за введения RMI.
Чрезвычайно важно, чтобы любой разработчик Java / J2EE понимал концепцию работы SOAP, поскольку это позволит им создавать лучшее приложение, которое взаимодействует и интегрируется с другими системами. Как и любые другие основы, лучше понять основные понятия.
Однако в большинстве случаев разработчики будут использовать реализации API высокого уровня (JAX-WS) для создания этих сервисов, поэтому фактический механизм SOAP скрыт.
Характеристика SOAP
- По умолчанию SOAP не имеет состояния, но в конечном итоге может использоваться для выполнения транзакций с отслеживанием состояния (передача данных о состоянии объекту).
- Односторонняя парадигма обмена сообщениями: приложения могут создавать более сложные шаблоны взаимодействия, комбинируя такой односторонний обмен с функциями, предоставляемыми базовым протоколом (http), специфичной для приложения информацией и стандартом более высокого уровня (таким как «WS-Addressing»).
- В SOAP ничего не говорится о семантике данных, передаваемых приложением. На самом деле все равно, какие данные (XML является лишь рекомендацией, поскольку это универсальный формат, то есть любая платформа понимает и может анализировать такую структуру).
Цели дизайна SOAP
- Простота
- растяжимость
- Несмотря на то, что он предлагает вышеупомянутое, он не поддерживает функции расширенной поддержки распространения, такие как распределенный GC, объект по ссылке, активация и пакетирование сообщений.
Структура сообщения SOAP
Конверт сообщения SOAP
- Встроенная информация включает в себя пространство имен и информацию о кодировке
- Заголовок (необязательно)
- Тело (обязательно) — обрабатывается получателем
Заголовок SOAP (<env: header>)
- Используется для расширения (контекст, аутентификация, транзакция, управление)
- Изготовлен из блоков заголовков (состав блоков заголовков)
- Большинство стандартных действий веб-службы в основном определяют стандартные записи заголовка для конкретного домена.
Блоки заголовка SOAP (записи)
- Дочерние элементы заголовка SOAP
- Разработанный в ожидании бурного использования SOAP
- Проверено, вставлено, удалено или переслано узлами SOAP, обнаруженными в пути сообщения SOAP.
SOAP Body (<env: Body>)
- Состав блоков тела
- потребляется SOAP-получателем
- Переносить сквозную информацию (XML, методы и параметры RPC, сбой SOAP — исключения)
- Сообщения о сбоях SOAP
Сообщения об ошибках
Если во время связи возникнут какие-либо ошибки или возникнут какие-либо исключения, клиенту будет возвращено сообщение об ошибке, чтобы он мог корректно обработать проблему. Существуют предопределенные значения кода ошибки SOAP.
- VersionMisMatch (недопустимое пространство имен в конверте SOAP несоответствия версий)
- MustUnderstand (Receiver не понимает и, следовательно, не может обработать обязательный блок заголовка SOAP)
- Клиент (ошибка связи на стороне клиента)
- Сервер (ошибка связи на стороне сервера)
Это может быть использовано для возврата любых читаемых исключений клиенту. Это чрезвычайно полезно и обязательно нужно делать всем, кто создает веб-сервисы.
Пример кода
Оставим понятия, давайте углубимся в пример кода. Я использовал NetBeans для создания примера.
Технический стек: среда IDE NetBeans с Java / Java EE, сервер приложений Glassfish
Все они поставляются в комплекте с IDE NetBeans, если вы загружаете его со своего сайта .
Проект: Загрузите его здесь .
Веб-сервис
Создайте новый проект веб-приложения.
Создайте простой Java-класс и #Annotate
01
02
03
04
05
06
07
08
09
10
11
12
13
|
@WebService public class SampleWebService { /** * Show Message * @param message * @return */ @WebMethod public String showMessage(String message){ return message; } } |
Разверните приложение веб-службы на Glassfish
Протестируйте веб-сервис, используя опцию «Тестировать веб-сервис»
После нажатия на тест ниже, будет запущена веб-страница, которая позволит вам протестировать фактический метод WebService.
Вы можете проверить фактическую услугу, передав значение и нажав кнопку «showMessage».
Вы также можете получить доступ к файлу WSDL по предоставленной ссылке. Вы можете увидеть определения SOAP, пространства имен и записи.
Клиент
Не так сложно разоблачить услугу, но что это будет без клиентов, использующих ее? Давайте создадим клиент, который на самом деле будет вызывать веб-сервис. Еще раз, NetBeans предоставляет нам возможность создавать заглушки и объекты с помощью URL WSDL. Разрешить использование, чтобы сосредоточиться на потреблении услуг.
Создать новый проект Java
Создайте новый клиент веб-службы в проекте Java
В среде IDE NetBeans есть отличная функция для создания клиента веб-службы. Красиво и изящно создает необходимые объекты с учетом вашего WSDL.
Укажите URL-адрес WSDL и ваш набор.
Сгенерированный исходный код, который может использовать ваш клиент
Вызов веб-сервиса от клиента
После создания заглушек вы можете вызвать их из своего проекта.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
/** * * @author alvinreyes */ public class SampleWebServiceClient { /** * @param args the command line arguments */ public static void main(String[] args) { System.out.println(showMessage( "Hello" )); } private static String showMessage(java.lang.String arg0) { com.areyes.soap.sample.SampleWebServiceService service = new com.areyes.soap.sample.SampleWebServiceService(); com.areyes.soap.sample.SampleWebService port = service.getSampleWebServicePort(); return port.showMessage(arg0); } } |
Создайте свой проект перед запуском клиента. Это позволит вашему проекту распознавать новые классы и пакеты Java.
1
2
3
4
5
6
7
8
|
wsimport-client-SampleWebServiceService: files are up to date wsimport-client-generate: Compiling 1 source file to /Users/alvinreyes/NetBeansProjects/SampleWebServiceClient/build/classes compile-single: run-single: Hello BUILD SUCCESSFUL (total time : 3 seconds) |
Вы можете скачать актуальный проект здесь
Ссылка: | SOAP Web Services от нашего партнера JCG Элвина Рейеса в блоге Элвина «Джей» Рейес . |