Статьи

SOAP веб-сервисы

Что такое 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

soapmessagestructure

Конверт сообщения 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, если вы загружаете его со своего сайта .
Проект: Загрузите его здесь .

Веб-сервис

Создайте новый проект веб-приложения.

samplewebservice_project

Создайте простой 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

deploywebservice

Протестируйте веб-сервис, используя опцию «Тестировать веб-сервис»

webservice_test_btn1

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

webservice_test

Вы можете проверить фактическую услугу, передав значение и нажав кнопку «showMessage».

webservice_test_actual

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

webservice_wsdl

Клиент

Не так сложно разоблачить услугу, но что это будет без клиентов, использующих ее? Давайте создадим клиент, который на самом деле будет вызывать веб-сервис. Еще раз, NetBeans предоставляет нам возможность создавать заглушки и объекты с помощью URL WSDL. Разрешить использование, чтобы сосредоточиться на потреблении услуг.

Создать новый проект Java

webservice_client_pro

Создайте новый клиент веб-службы в проекте Java

В среде IDE NetBeans есть отличная функция для создания клиента веб-службы. Красиво и изящно создает необходимые объекты с учетом вашего WSDL.

webservice_client

Укажите URL-адрес WSDL и ваш набор.

webservice_cl_provide_wsdl_url

Сгенерированный исходный код, который может использовать ваш клиент

webservice_cl_gen_code

Вызов веб-сервиса от клиента

После создания заглушек вы можете вызвать их из своего проекта.

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.

webservice_cl_new_run

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 Элвина Рейеса в блоге Элвина «Джей» Рейес .