spring web services что это такое
Создание SOAP Web-сервиса
Этот урок освещает пошаговое создание сервера SOAP web сервиса с использованием Spring.
Что вы создадите
Вы создадите сервер, который предоставляет данные из различных Европейских стран, используя WSDL SOAP web сервис.
Что вам потребуется
Как проходить этот урок
Как и большинство уроков по Spring, вы можете начать с нуля и выполнять каждый шаг, либо пропустить базовые шаги, которые вам уже знакомы. В любом случае, вы в конечном итоге получите рабочий код.
Чтобы начать с нуля, перейдите в Настройка проекта.
Настройка проекта
Для начала вам необходимо настроить базовый скрипт сборки. Вы можете использовать любую систему сборки, которая вам нравится для сборки проетов Spring, но в этом уроке рассмотрим код для работы с Gradle. Если вы не знакомы с ней, ознакомьтесь с соответсвующим уроком Сборка Java-проекта с использованием Gradle.
Создание структуры каталогов
Создание файла сборки Gradle
Ниже представлен начальный файл сборки Gradle. Если вы используете Spring Tool Suite (STS), то можете импортировать урок прямо из него.
Spring Boot gradle plugin предоставляет множество удобных возможностей:
Добавление Spring-WS зависимости
Созданный вами проект должен включать в ваш файл сборки зависимости spring-ws-core и wsdl4j.
Создание XML схемы для определения домена
Домен web сервиса описан в файле XML схемы(XSD), который Spring-WS будет экспортировать автоматически как WSDL.
Создайте XSD файл с операциями для возвращения name, population, capital и currency:
Генерация доменных классов на основе XML схемы
Следубщим шагом необходимо сгенерировать Java классы из XSD файла. Правильным подходом является их автоматическое создание в процессе сборки с использованием плагина maven или gradle.
Конфигурация плагина для maven:
Сгенерированные классы будут помещены в target/generated-sources/jaxb/ каталог.
То же самое и с gradle:
Т.к. gradle не имеет JAXB плагина(пока), он включает в себя ant задачу, которая делает файл сборки немного сложнее по сравнению с файлом сборки Maven.
В обоих случаях, процесс генерации объектов включен в жизненный цикл сборки, поэтому не требуются отдельные шаги по запуску этого процесса.
Создание репозитория
Для предоставления данных web сервисом, создайте репозиторий. В этом уроке вы создаете простой репозиторий с установленными данными.
Создание точки выхода сервиса
Для создания точки выхода сервиса, вам необходим только POJO с несколькими Spring WS аннотациями для обработки входящих SOAP запросов.
@Endpoint регистрирует класс Spring WS как потенциальный кандидат для обработки входящих SOAP сообщений
@PayloadRoot используется Spring WS для выбора метода обработчика на основе namespace и localPart сообщения
@RequestPayload указывает на то, что входящее сообщение будет сопоставлено параметру request метода
@ResponsePayload создает соответствующее значение возвращаемому значению полезной части ответа.
Конфигурирование бинов web сервиса
Создайте новый класс, связанный с конфигурацией Spring WS бинов:
Создание приложения исполняемым
Несмотря на то, что пакет этого сервиса может быть в составе web-приложения и WAR файлов, более простой подход, продемонстрированный ниже создает отдельное самостоятельное приложение. Вы упаковываете все в единый, исполняемый JAR-файл, который запускается через хорошо знакомый старый main() Java-метод. Попутно, вы используете поддержку Spring для встроенного Tomcat контейнера сервлетов как HTTP среду выполнения вместо развертывания на сторонний экземпляр.
Сборка исполняемого JAR
Вы можете собрать единый исполняемый JAR-файл, который содержит все необходимые зависимости, классы и ресурсы. Это делает его легким в загрузке, версионировании и развертывании сервиса как приложения на протяжении всего периода разработки, на различных средах и так далее.
Затем вы можете запустить JAR-файл:
Запуск приложения
Если вы используете Gradle, вы можете запустить ваш сервис из командной строки:
Как вариант, вы можете запустить ваш сервис напрямую из Gradle примерно так:
Тестирование приложения
Существует несколько способов тестирования SOAP интерфейса. Вы можете использовать что-то типа SoapUI или просто использовать инструменты командной строки, если у вас *nix/Mac система, как показано ниже:
В результате вы должны увидеть следующий ответ:
Поздравляем! Вы только что создали SOAP сервис с использованием Spring Web Services.
Spring Web Services
Spring Web Services (Spring-WS) is a product of the Spring community focused on creating document-driven Web services. Spring Web Services aims to facilitate contract-first SOAP service development, allowing for the creation of flexible web services using one of the many ways to manipulate XML payloads. The product is based on Spring itself, which means you can use the Spring concepts such as dependency injection as an integral part of your Web service.
People use Spring-WS for many reasons, but most are drawn to it after finding alternative SOAP stacks lacking when it comes to following Web service best practices. Spring-WS makes the best practice an easy practice. This includes practices such as the WS-I basic profile, Contract-First development, and having a loose coupling between contract and implementation. The other key features of Spring Web services are:
Features
Makes the Best Practice an Easy Practice: Spring Web Services makes enforcing best practices easier. This includes practices such as the WS-I basic profile, Contract-First development, and having a loose coupling between contract and implementation.
Powerful mappings: You can distribute incoming XML request to any object, depending on message payload, SOAP Action header, or an XPath expression.
XML API support: Incoming XML messages can be handled in standard JAXP APIs such as DOM, SAX, and StAX, but also JDOM, dom4j, XOM, or even marshalling technologies.
Flexible XML Marshalling: The Object/XML Mapping module in the Spring Web Services distribution supports JAXB 1 and 2, Castor, XMLBeans, JiBX, and XStream. And because it is a separate module, you can use it in non-Web services code as well.
Reuses your Spring expertise: Spring-WS uses Spring application contexts for all configuration, which should help Spring developers get up-to-speed nice and quickly. Also, the architecture of Spring-WS resembles that of Spring-MVC.
Supports WS-Security: WS-Security allows you to sign SOAP messages, encrypt and decrypt them, or authenticate against them.
Integrates with Acegi Security: The WS-Security implementation of Spring Web Services provides integration with Spring Security. This means you can use your existing configuration for your SOAP service as well.
Built by Maven: This assists you in effectively reusing the Spring Web Services artifacts in your own Maven-based projects.
Apache license. You can confidently use Spring-WS in your project.
SOAP Web-сервис средствами Spring-WS
Когда-то поставили передо мной задачу начать разработку Web-сервисов и дали мне сорцы простейшего проекта без каких-либо объяснений. Проект, конечно же, не запускался. Что такое Spring и как он работает, я тоже представления не имел. Адекватных статей по разработке Web-сервисов средствами Spring ни русскоязычных, ни англоязычных я тоже не смог найти. Пришлось разбираться во всем самому, оказалось все не так страшно.
И вот недавно я решил посмотреть, какие новые возможности добавились в Spring с тех пор, и обновить старые сервисы, что в результате и сподвигло меня на написание данной статьи.
Данная статья является руководством по разработке простейшего Web-сервиса, использующего SOAP-протокол, средствами Spring-WS.
И так, писать будем простейший сервис, принимающий имя пользователя и отправляющий приветствие и текущее время на сервере.
Что же нам потребуется?
Подготовка к работе
Создаем новый проект Web-приложения. В Eclipse это: «File => New => Dynamic Web Project».
Я назвал проект: HelloService.
Далее копируем библиотеки из Spring, XMLBean, wsdl4j, commons-logging в каталог проекта WEB-INF/lib.
При желании можете добавить их к библиотекам сервера, чтобы не таскать их с каждым приложением.
Создание WSDL-схемы
По сути WSDL-схема предназначена для описания сервиса.
Вручную создавать её мы, конечно же, не будем. Схема будет сгенерирована автоматически средствами Spring’а, но об этом позднее.
Определяем входные и выходные данные
Создаем описание входных и выходных данных
В каталоге WEB-INF создаем файл HelloService.xsd. Данный файл нужен будет для генерации WSDL-схемы и создания соответствующих Java-классов.
Текст файла:
Атрибут targetNamespace – используемое пространство имен. Т.е. все созданные объекты будут располагаться в пакете org.example.helloService.
Элементы ServiceRequest и ServiceResponse описывают соответственно входные и выходные данные (запрос/ответ).
Атрибуты minOccurs и maxOccurs определяют количество повторений данного компонента в пределах одного элемента. Если эти параметры не указывать, то по умолчанию они считаются равными 1. Для необязательного компонента необходимо указать minOccurs=0. При неограниченном количестве компонент: maxOccurs=unbounded.
Подробнее о XML-схемах можно прочитать здесь.
Создаем JavaBeans
На основании созданной схемы будем создавать Java классы. Для этого создаем файл build.xml:
Параметр WS_HOME должен указывать на каталог, где располагается XMLBeans.
HelloService.xsd – путь к созданной схеме.
lib\helloservice.jar – создаваемая java-библиотека.
Реализация сервиса
Создаем интерфейс и класс сервиса
Интерфейс сервиса: HelloService.java:
Реализация сервиса: HelloServiceImpl.java:
Данный код, я думаю, не нуждается в комментариях. Единственное, что у людей, не сталкивающихся ранее со Spring’ом, может вызвать вопросы, так это аннотация @ Service. Но об этом же расскажу чуть позже.
Endpoint
Endpoint – класс, который будет отвечать за обработку входящих запросов (своего рода точка входа).
Создаем файл HelloServiceEndpoint.java:
Что же здесь сделано?
Аннотация @Endpoint как раз и определяет, что данный класс будет обрабатывать входящие запросы.
namespaceUri – то же пространство имен, что и указывалось при создании xml-схемы.
Теперь вернемся немного назад и вспомним про аннотацию @ Service. Если не вдаваться в подробности, чтобы не перегружать читателя лишней информацией, то эта аннотацию говорит Spring’у создать соответствующий объект. А аннотация @Autowired служит для инъекции (автоматической подстановки) соответствующего объекта. Конечно же при построении простых приложений в использовании данных аннотаций отсутствует смысл, но я решил все-такие не исключать их в данном примере.
И так, идем далее.
Аннотация @PayloadRoot перед методом определяет, при получении какого запроса будет вызван данный метод. В нашем случае, это «ServiceRequest».
В остальном опять же все должно быть ясно. Обратите внимание, что ServiceRequest, ServiceResponse и т.д. – это как раз те классы, которые были созданы на основе нашей xml-схемы.
Spring-конфигурация сервиса
Вот и близится уже завершение.
Создаем файл service-ws-servlet.xml.
sws:annotation-driven – говорит как раз о том, что в данном проекте используются аннотации.
А context:component-scan указывает на пакет, в котором будет производится поиск аннотаций, при этом поиск производится и в подпакетах.
Два последующих бина всегда будут неизменны. Суть их заключается в приеме и преобразовании запроса из Xml в Java-объект и дальнейшего обратного преобразования.
sws:dynamic-wsdl отвечает за автоматическую генерацию WSDL-документа на основе созданной Xml-схемы.
location указывает на путь к схеме.
locationUri – адрес (относительно контейнера), по которому будет доступна WSDL-схема.
В моем случае WSDL доступен по следующему адресу:
localhost/HelloService/HelloService.wsdl
Дескриптор развертывания
Ну и, наконец, последнее.
В каталоге WEB-INF изменяем или создаем файл web.xml.
Данный файл описывать уже не буду, большинство и так должны знать. Для несложных проектов он по сути не должен изменяться. Стоит отметить только, что имя сервлета(servlet-name) должно соответствовать имени файла Spring-конфигурации сервиса service-ws-servlet.xml.
Ну и далее деплоим приложение на сервер.
На этом создание сервиса завершено. Если ничего не пропустили, то сервис должен функционировать.
Проверка работоспособности
Самым первым признаком корректной работы является созданная WSDL-схема.
Для проверки просто переходим по адресу этой схемы (http://localhost/HelloService/HelloService.wsdl) и смотрим: там должен отобразиться xml-файл. Если ничего не отобразилось или какая ошибка появилась, перечитываем внимательно всю статью и ищем, что сделали не так.
Для дальнейшей проверки нам потребуется soapUI (у меня версия 3.0.1).
Устанавливаем и запускаем его.
Создаем новый проект: File => New soapUI Project. В поле Initial WSDL/WADL вставляем ссылку на WSDL-схему (http://localhost/HelloService/HelloService.wsdl).
В созданном проекте открываем необходимый запрос.
В поле Name вбиваем имя и жмем на кнопку «Send request»
В результате получаем ответ от сервера с приветствием и текущим временем.
Если что-то пошло не так, то опять перечитываем данную статью.
Spring WS — Краткое руководство
Spring Web Services (Spring-WS) — один из проектов, разработанных Spring Community. Его основной задачей является создание управляемых документами веб-сервисов. Проект Spring Web Services упрощает разработку сервисов SOAP в первую очередь, предоставляет несколько способов создания гибких веб-сервисов, которые могут манипулировать полезными нагрузками XML различными способами.
Веб-сервисы Spring без проблем используют такие концепции Spring, как внедрение зависимостей и конфигурации. Spring-WS требует Spring 3.0 версии. При разработке сначала контракта мы начинаем с WSDL Contract, а затем будем использовать JAVA для реализации требуемого контракта.
В отличие от подхода «последний контракт», когда интерфейсы JAVA генерируют контракт WSDL / XSD. Контракт на основе WSDL остается независимым от реализации JAVA в подходе контракт-первый. В случае, если нам требуется изменить интерфейсы JAVA, нет необходимости сообщать об изменениях, внесенных в существующий контракт WSDL, пользователям веб-служб. Spring-WS стремится обеспечить слабую связь между контрактом WSDL и его реализацией на основе JAVA.
Характеристики
Ниже приведены функции веб-служб Spring.
Сопоставление XML с объектами — запросы на основе XML могут быть сопоставлены с любым объектом с использованием информации, хранящейся в полезной нагрузке сообщения, заголовке действия SOAP или с помощью выражения XPath.
Поддержка нескольких API для разбора XML — Помимо стандартных API JAXP (DOM, SAX, StAX) для разбора входящих XML-запросов, поддерживаются и другие библиотеки, такие как JDOM, dom4j, XOM.
Поддержка нескольких API для маршалирования XML — Spring Web Services поддерживает библиотеки JAXB 1 и 2, Castor, XMLBeans, JiBX и XStream, используя свой модуль сопоставления объектов / XML. Модуль Object / XML Mapping также можно использовать в коде не-веб-сервисов.
Конфигурации на основе Spring — Spring Web Services использует контексты приложения Spring для своих конфигураций, имеющих архитектуру, аналогичную Spring Spring MVC.
Интегрированный модуль WS-Security. Используя модуль WS-Security, вы можете подписывать, шифровать, дешифровать SOAP-сообщения или аутентифицировать их.
Поддержка Acegi Security. Используя реализацию WS-Security веб-служб Spring, можно настроить конфигурацию Acegi для ваших служб SOAP.
Сопоставление XML с объектами — запросы на основе XML могут быть сопоставлены с любым объектом с использованием информации, хранящейся в полезной нагрузке сообщения, заголовке действия SOAP или с помощью выражения XPath.
Поддержка нескольких API для разбора XML — Помимо стандартных API JAXP (DOM, SAX, StAX) для разбора входящих XML-запросов, поддерживаются и другие библиотеки, такие как JDOM, dom4j, XOM.
Поддержка нескольких API для маршалирования XML — Spring Web Services поддерживает библиотеки JAXB 1 и 2, Castor, XMLBeans, JiBX и XStream, используя свой модуль сопоставления объектов / XML. Модуль Object / XML Mapping также можно использовать в коде не-веб-сервисов.
Конфигурации на основе Spring — Spring Web Services использует контексты приложения Spring для своих конфигураций, имеющих архитектуру, аналогичную Spring Spring MVC.
Интегрированный модуль WS-Security. Используя модуль WS-Security, вы можете подписывать, шифровать, дешифровать SOAP-сообщения или аутентифицировать их.
Поддержка Acegi Security. Используя реализацию WS-Security веб-служб Spring, можно настроить конфигурацию Acegi для ваших служб SOAP.
Архитектура
Проект Spring-WS состоит из пяти основных модулей, которые описаны ниже.
Поддержка Spring-WS — этот модуль обеспечивает поддержку JMS, электронной почты и т. Д.
Spring-WS Security — этот модуль отвечает за обеспечение реализации WS-Security, интегрированной с основным модулем веб-служб. Используя этот модуль, мы можем добавлять основные токены, подписывать, шифровать и дешифровать SOAP-сообщения. Этот модуль позволяет использовать существующую реализацию безопасности Spring для аутентификации и авторизации.
Spring XML — этот модуль предоставляет классы поддержки XML для Spring Web Services. Этот модуль используется внутри среды Spring-WS.
Spring OXM — этот модуль предоставляет классы поддержки для XML и сопоставления объектов.
Поддержка Spring-WS — этот модуль обеспечивает поддержку JMS, электронной почты и т. Д.
Spring-WS Security — этот модуль отвечает за обеспечение реализации WS-Security, интегрированной с основным модулем веб-служб. Используя этот модуль, мы можем добавлять основные токены, подписывать, шифровать и дешифровать SOAP-сообщения. Этот модуль позволяет использовать существующую реализацию безопасности Spring для аутентификации и авторизации.
Spring XML — этот модуль предоставляет классы поддержки XML для Spring Web Services. Этот модуль используется внутри среды Spring-WS.
Spring OXM — этот модуль предоставляет классы поддержки для XML и сопоставления объектов.
Spring WS — настройка среды
Системные Требования
В следующей таблице перечислены системные требования, а последующие шаги помогут нам выполнить процедуру настройки среды.
JDK | Java SE 2 JDK 1.5 или выше |
объем памяти | 1 ГБ ОЗУ (рекомендуется) |
Дисковое пространство | Нет минимальных требований |
Версия операционной системы | Windows XP или выше, Linux |
Давайте теперь перейдем к этапам установки Spring-WS.
Шаг 1. Проверьте установку Java
Для начала в вашей системе должен быть установлен Java Software Development Kit (SDK). Чтобы убедиться в этом, выполните любую из следующих двух команд в зависимости от платформы, на которой вы работаете.
Если установка Java была выполнена правильно, то на ней отобразится текущая версия и спецификация вашей установки Java. Пример вывода приведен в следующей таблице.
Платформа | команда | Пример вывода | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows |
S.No. | Платформа и описание | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
S.No. | Платформа и описание | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
Операционные системы | Название архива |
---|---|
Windows | apache-maven-3.3.3-bin.zip |
Linux | апач-Maven-3.3.3-bin.tar.gz |
макинтош | апач-Maven-3.3.3-bin.tar.gz |
Шаг 4: Распакуйте архив Maven
Распакуйте архив в каталог, в который вы хотите установить Maven 3.3.3. Подкаталог apache-maven-3.3.3 будет создан из архива.
Операционные системы | Местоположение (может отличаться в зависимости от вашей установки) |
---|---|
Windows | C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3 |
Linux | / USR / местные / Apache-Maven |
макинтош | / USR / местные / Apache-Maven |
Шаг 5: Установите переменные окружения Maven
Добавьте M2_HOME, M2 и MAVEN_OPTS к переменным среды.
Операционные системы | Выход |
---|---|
Windows |