Что такое 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
|
@WebServicepublic 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 datewsimport-client-generate:Compiling 1 source file to /Users/alvinreyes/NetBeansProjects/SampleWebServiceClient/build/classescompile-single:run-single:HelloBUILD SUCCESSFUL (total time: 3 seconds) |
Вы можете скачать актуальный проект здесь
| Ссылка: | SOAP Web Services от нашего партнера JCG Элвина Рейеса в блоге Элвина «Джей» Рейес . |











