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 — это основной модуль, который предоставляет центральные интерфейсы, такие как WebServiceMessage и SoapMessage , инфраструктуру на стороне сервера, мощные средства диспетчеризации сообщений и классы поддержки для реализации конечных точек веб-служб. Он также предоставляет клиентский клиент веб-службы в виде WebServiceTemplate .
 - 
Поддержка Spring-WS — этот модуль обеспечивает поддержку JMS, электронной почты и т. Д.
 - 
Spring-WS Security — этот модуль отвечает за обеспечение реализации WS-Security, интегрированной с основным модулем веб-служб. Используя этот модуль, мы можем добавлять основные токены, подписывать, шифровать и дешифровать SOAP-сообщения. Этот модуль позволяет использовать существующую реализацию безопасности Spring для аутентификации и авторизации.
 - 
Spring XML — этот модуль предоставляет классы поддержки XML для Spring Web Services. Этот модуль используется внутри среды Spring-WS.
 - 
Spring OXM — этот модуль предоставляет классы поддержки для XML и сопоставления объектов.
 
Ядро Spring-WS — это основной модуль, который предоставляет центральные интерфейсы, такие как WebServiceMessage и SoapMessage , инфраструктуру на стороне сервера, мощные средства диспетчеризации сообщений и классы поддержки для реализации конечных точек веб-служб. Он также предоставляет клиентский клиент веб-службы в виде WebServiceTemplate .
Поддержка Spring-WS — этот модуль обеспечивает поддержку JMS, электронной почты и т. Д.
Spring-WS Security — этот модуль отвечает за обеспечение реализации WS-Security, интегрированной с основным модулем веб-служб. Используя этот модуль, мы можем добавлять основные токены, подписывать, шифровать и дешифровать SOAP-сообщения. Этот модуль позволяет использовать существующую реализацию безопасности Spring для аутентификации и авторизации.
Spring XML — этот модуль предоставляет классы поддержки XML для Spring Web Services. Этот модуль используется внутри среды Spring-WS.
Spring OXM — этот модуль предоставляет классы поддержки для XML и сопоставления объектов.
Spring WS — настройка среды
В этой главе мы поймем процесс настройки Spring-WS в системах на базе Windows и Linux. Spring-WS может быть легко установлен и интегрирован с вашей текущей средой Java и MAVEN , выполнив несколько простых шагов без каких-либо сложных процедур настройки. Администрация пользователя требуется при установке.
Системные Требования
В следующей таблице перечислены системные требования, а последующие шаги помогут нам выполнить процедуру настройки среды.
| JDK | Java SE 2 JDK 1.5 или выше | 
| объем памяти | 1 ГБ ОЗУ (рекомендуется) | 
| Дисковое пространство | Нет минимальных требований | 
| Версия операционной системы | Windows XP или выше, Linux | 
Давайте теперь перейдем к этапам установки Spring-WS.
Шаг 1. Проверьте установку Java
Для начала в вашей системе должен быть установлен Java Software Development Kit (SDK). Чтобы убедиться в этом, выполните любую из следующих двух команд в зависимости от платформы, на которой вы работаете.
Если установка Java была выполнена правильно, то на ней отобразится текущая версия и спецификация вашей установки Java. Пример вывода приведен в следующей таблице.
| Платформа | команда | Пример вывода | 
|---|---|---|
| Windows | 
 Откройте командную консоль и введите — \> Java-версия  | 
 Java версия «1.7.0_60» Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19) 64-разрядная серверная виртуальная машина Java Hotspot (TM) (сборка 24.60-b09, смешанный режим)  | 
| Linux | 
 Откройте командный терминал и введите — $ java-версия  | 
 Java-версия «1.7.0_25» Открытая среда выполнения JDK (rhel-2.3.10.4.el6_4-x86_64) Откройте виртуальную машину 64-разрядного сервера JDK (сборка 23.7-b01, смешанный режим)  | 
Откройте командную консоль и введите —
\> Java-версия
Java версия «1.7.0_60»
Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19)
64-разрядная серверная виртуальная машина Java Hotspot (TM) (сборка 24.60-b09, смешанный режим)
Откройте командный терминал и введите —
$ java-версия
Java-версия «1.7.0_25»
Открытая среда выполнения JDK (rhel-2.3.10.4.el6_4-x86_64)
Откройте виртуальную машину 64-разрядного сервера JDK (сборка 23.7-b01, смешанный режим)
- 
Мы предполагаем, что читатели этого руководства установили Java SDK версии 1.7.0_60 в своей системе.
 - 
Если у вас нет Java SDK, загрузите его текущую версию с https://www.oracle.com/technetwork/java/javase/downloads/index.html и установите его.
 
Мы предполагаем, что читатели этого руководства установили Java SDK версии 1.7.0_60 в своей системе.
Если у вас нет Java SDK, загрузите его текущую версию с https://www.oracle.com/technetwork/java/javase/downloads/index.html и установите его.
Шаг 2. Установите среду Java
Установите переменную среды JAVA_HOME, чтобы она указывала на местоположение базовой директории, где установлена Java на вашем компьютере.
| S.No. | Платформа и описание | 
|---|---|
| 1 | 
 Windows Установите JAVA_HOME в C: \ ProgramFiles \ java \ jdk1.7.0_60  | 
| 2 | 
 Linux Экспорт JAVA_HOME = / usr / local / java-current  | 
Windows
Установите JAVA_HOME в C: \ ProgramFiles \ java \ jdk1.7.0_60
Linux
Экспорт JAVA_HOME = / usr / local / java-current
Добавьте полный путь расположения компилятора Java к системному пути.
| S.No. | Платформа и описание | 
|---|---|
| 1 | 
 Windows Добавьте строку «C: \ Program Files \ Java \ jdk1.7.0_60 \ bin» в конец системной переменной PATH.  | 
| 2 | 
 Linux Экспорт PATH = $ PATH: $ JAVA_HOME / bin /  | 
Windows
Добавьте строку «C: \ Program Files \ Java \ jdk1.7.0_60 \ bin» в конец системной переменной PATH.
Linux
Экспорт PATH = $ PATH: $ JAVA_HOME / bin /
Выполните команду java -version из командной строки, как описано выше.
Шаг 3: Скачать архив Maven
Загрузите Maven 3.3.3 с https://maven.apache.org/download.cgi
| Операционные системы | Название архива | 
|---|---|
| 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 | 
 Установите переменные среды, используя системные свойства. M2_HOME = C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3 М2 =% M2_HOME% \ Bin MAVEN_OPTS = -Xms256m -Xmx512m  | 
| Linux | 
 Откройте командный терминал и установите переменные среды. export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.3 экспорт M2 = $ M2_HOME / bin экспорт MAVEN_OPTS = -Xms256m -Xmx512m  | 
| макинтош | 
 Откройте командный терминал и установите переменные среды. export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.3 экспорт M2 = $ M2_HOME / bin экспорт MAVEN_OPTS = -Xms256m -Xmx512m  | 
Установите переменные среды, используя системные свойства.
M2_HOME = C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3
М2 =% M2_HOME% \ Bin
MAVEN_OPTS = -Xms256m -Xmx512m
Откройте командный терминал и установите переменные среды.
export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.3
экспорт M2 = $ M2_HOME / bin
экспорт MAVEN_OPTS = -Xms256m -Xmx512m
Откройте командный терминал и установите переменные среды.
export M2_HOME = / usr / local / apache-maven / apache-maven-3.3.3
экспорт M2 = $ M2_HOME / bin
экспорт MAVEN_OPTS = -Xms256m -Xmx512m
Шаг 6: Добавьте расположение каталога Maven bin в системный путь
Теперь добавьте переменную M2 к системному пути.
| Операционные системы | Выход | 
|---|---|
| Windows | Добавьте строку;% M2% в конец системной переменной Path. | 
| Linux | экспорт PATH = $ M2: $ PATH | 
| макинтош | экспорт PATH = $ M2: $ PATH | 
Шаг 7: Проверьте установку Maven
Теперь откройте консоль и выполните следующую команду mvn .
| Операционные системы | задача | команда | 
|---|---|---|
| Windows | Открытая командная консоль | c: \> mvn —version | 
| Linux | Открытый командный терминал | $ mvn —version | 
| макинтош | Открытый терминал | машина: <Джозеф $ mvn —version | 
Наконец, проверьте вывод приведенных выше команд, который должен быть таким, как показано ниже —
| Операционные системы | Выход | 
|---|---|
| Windows | 
 Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30) Дом Maven: C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3 Версия Java: 1.7.0_75, поставщик: корпорация Oracle Домашняя страница Java: C: \ Program Files \ Java \ jdk1.7.0_75 \ jre Локаль по умолчанию: en_US, кодировка платформы: Cp1252  | 
| Linux | 
 Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30) Дом Maven: /usr/local/apache-maven/apache-maven-3.3.3 Версия Java: 1.7.0_75, поставщик: корпорация Oracle Домашняя страница Java: /usr/local/java-current/jdk1.7.0_75/jre  | 
| макинтош | 
 Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30) Дом Maven: /usr/local/apache-maven/apache-maven-3.3.3 Версия Java: 1.7.0_75, поставщик: корпорация Oracle Домашняя страница Java: /Library/Java/Home/jdk1.7.0_75/jre  | 
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30)
Дом Maven: C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3
Версия Java: 1.7.0_75, поставщик: корпорация Oracle
Домашняя страница Java: C: \ Program Files \ Java \ jdk1.7.0_75 \ jre
Локаль по умолчанию: en_US, кодировка платформы: Cp1252
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30)
Дом Maven: /usr/local/apache-maven/apache-maven-3.3.3
Версия Java: 1.7.0_75, поставщик: корпорация Oracle
Домашняя страница Java: /usr/local/java-current/jdk1.7.0_75/jre
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30)
Дом Maven: /usr/local/apache-maven/apache-maven-3.3.3
Версия Java: 1.7.0_75, поставщик: корпорация Oracle
Домашняя страница Java: /Library/Java/Home/jdk1.7.0_75/jre
Шаг 8: Настройте Eclipse IDE
Все примеры в этом руководстве были написаны с использованием Eclipse IDE. Рекомендуется, чтобы читатели установили последнюю версию Eclipse на свою машину. Чтобы установить Eclipse IDE, загрузите последние версии Eclipse по следующей ссылке https://www.eclipse.org/downloads/ . После загрузки установки распакуйте бинарный дистрибутив в удобное место.
Например, в C: \ eclipse для Windows или / usr / local / eclipse в Linux / Unix и, наконец, установите переменную PATH соответствующим образом. Eclipse можно запустить, выполнив следующие команды на компьютере с Windows, или вы можете просто дважды щелкнуть файл eclipse.exe.
%C:\eclipse\eclipse.exe
Eclipse можно запустить, выполнив следующие команды на компьютере UNIX (Solaris, Linux и т. Д.):
$/usr/local/eclipse/eclipse
После успешного запуска, если все в порядке, должен появиться следующий экран —
Шаг 9: Настройка Apache Tomcat
Мы можем загрузить последнюю версию Tomcat с https://tomcat.apache.org/ . После загрузки установки распакуйте бинарный дистрибутив в удобное место. Например, в C: \ apache-tomcat-7.0.59 на компьютере с Windows или в /usr/local/apache-tomcat-7.0.59 на компьютере с Linux / Unix, а затем установите переменную среды CATALINA_HOME, указывающую на места установки.
Tomcat можно запустить, выполнив следующие команды на компьютере с Windows, или вы можете просто дважды щелкнуть на файле startup.bat
%CATALINA_HOME%\bin\startup.bat or C:\apache-tomcat-7.0.59\bin\startup.bat
Tomcat можно запустить, выполнив следующие команды на компьютере с UNIX (Solaris, Linux и т. Д.):
$CATALINA_HOME/bin/startup.sh or /usr/local/apache-tomcat-7.0.59/bin/startup.sh
После успешного запуска веб-приложения по умолчанию, включенные в Tomcat, будут доступны по адресу — http: // localhost: 8080 / . Если все в порядке, то должен появиться следующий экран —
Дополнительную информацию о настройке и запуске Tomcat можно найти в документации, включенной здесь, а также на веб-сайте Tomcat — https://tomcat.apache.org.
Tomcat можно остановить, выполнив следующие команды на компьютере с Windows —
%CATALINA_HOME%\bin\shutdown or C:\apache-tomcat-7.0.59\bin\shutdown
Tomcat можно остановить, выполнив следующие команды на компьютере UNIX (Solaris, Linux и т. Д.):
$CATALINA_HOME/bin/shutdown.sh or /usr/local/apache-tomcat-7.0.59/bin/shutdown.sh
Как только мы закончим с этим последним шагом, мы готовы приступить к первому Примеру веб-служб, который мы обсудим в следующей главе.
Spring WS — первое приложение
Давайте начнем писать настоящий веб-сервис на основе SOAP с Spring-WS Framework. Прежде чем мы начнем писать наш первый пример с использованием среды Spring-WS, мы должны убедиться, что среда Spring-WS настроена правильно, как описано в главе « Веб-службы Spring — настройка среды» . Мы предполагаем, что у читателей есть некоторые базовые знания работы с Eclipse IDE.
Поэтому давайте приступим к написанию простого приложения Spring WS, в котором будет представлен метод веб-службы для оформления отпуска в HR Portal.
Контракт-первый подход
Spring-WS использует подход Contract-first, что означает, что мы должны иметь готовые структуры XML перед написанием любого кода реализации на основе JAVA. Мы определяем объект LeaveRequest, который имеет подобъекты — Leave и Employee.
Ниже приведены необходимые XML-конструкции.
Leave.xml
<Leave xmlns = "http://tutorialspoint.com/hr/schemas"> <StartDate>2016-07-03</StartDate> <EndDate>2016-07-07</EndDate> </Leave>
Employee.xml
<Employee xmlns = "http://tutorialspoint.com/hr/schemas"> <Number>404</Number> <FirstName>Mahesh</FirstName> <LastName>Parashar</LastName> </Employee>
LeaveRequest.xml
<LeaveRequest xmlns = "http://tutorialspoint.com/hr/schemas">
   <Leave>
      <StartDate>2016-07-03</StartDate>
      <EndDate>2016-07-07</EndDate>
   </Leave>
   
   <Employee>
      <Number>404</Number>
      <FirstName>Mahesh</FirstName>
      <LastName>Parashar</LastName>
   </Employee>
</LeaveRequest>
hr.xsd
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"
   xmlns:hr = "http://tutorialspoint.com/hr/schemas"
   elementFormDefault = "qualified"
   targetNamespace = "http://tutorialspoint.com/hr/schemas">
   
   <xs:element name = "LeaveRequest">
      <xs:complexType>
         <xs:all>
            <xs:element name = "Leave" type = "hr:LeaveType"/>
            <xs:element name = "Employee" type = "hr:EmployeeType"/>
         </xs:all>
      </xs:complexType>
   </xs:element>
   
   <xs:complexType name = "LeaveType">
      <xs:sequence>
         <xs:element name = "StartDate" type = "xs:date"/>
         <xs:element name = "EndDate" type = "xs:date"/>
      </xs:sequence>
   </xs:complexType>
   
   <xs:complexType name = "EmployeeType">
      <xs:sequence>
         <xs:element name = "Number" type = "xs:integer"/>
         <xs:element name = "FirstName" type = "xs:string"/>
         <xs:element name = "LastName" type = "xs:string"/>
      </xs:sequence>
   </xs:complexType>
</xs:schema>
Создать проект
Теперь давайте откроем командную консоль, перейдем в каталог C: \ MVN и выполним следующую команду mvn .
C:\MVN>mvn archetype:generate -DarchetypeGroupId = org.springframework.ws -DarchetypeArtifactId = spring-ws-archetype -DgroupId = com.tutorialspoint.hr -DartifactId = leaveService
Maven начнет обработку и создаст полную структуру проекта приложения Java.
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] Using property: groupId = com.tutorialspoint.hr [INFO] Using property: artifactId = leaveService Define value for property 'version': 1.0-SNAPSHOT: : [INFO] Using property: package = com.tutorialspoint.hr Confirm properties configuration: groupId: com.tutorialspoint.hr artifactId: leaveService version: 1.0-SNAPSHOT package: com.tutorialspoint.hr Y: : [INFO] ------------------------------------------------------------------------- --- [INFO] Using following parameters for creating project from Old (1.x) Archetype: spring-ws-archetype:2.0.0-M1 [INFO] ------------------------------------------------------------------------- --- [INFO] Parameter: groupId, Value: com.tutorialspoint.hr [INFO] Parameter: packageName, Value: com.tutorialspoint.hr [INFO] Parameter: package, Value: com.tutorialspoint.hr [INFO] Parameter: artifactId, Value: leaveService [INFO] Parameter: basedir, Value: C:\mvn [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: C:\mvn\leaveService [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 35.989 s [INFO] Finished at: 2017-01-21T11:18:31+05:30 [INFO] Final Memory: 17M/178M [INFO] ------------------------------------------------------------------------
Теперь перейдите в каталог C: / MVN . Мы увидим проект Java-приложения, созданный с именем exitService (как указано в artifactId). Обновите pom.xml и добавьте HumanResourceService.java и HumanResourceServiceImpl.java в следующую папку — C: \ MVN \ leftService \ src \ main \ java \ com \ tutorialspoint \ hr \ service. Как только это будет сделано, добавьте LeaveEndpoint.java в следующую папку — C: \ MVN \ exitService \ src \ main \ java \ com \ tutorialspoint \ hr \ ws.
pom.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/maven-v4_0_0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.tutorialspoint.hr</groupId>
   <artifactId>leaveService</artifactId>
   <packaging>war</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>leaveService Spring-WS Application</name>
   <url>http://www.springframework.org/spring-ws</url>
   
   <build>
      <finalName>leaveService</finalName>
   </build>
   
   <dependencies>
      <dependency>
         <groupId>org.springframework.ws</groupId>
         <artifactId>spring-ws-core</artifactId>
         <version>2.4.0.RELEASE</version>
      </dependency>
      
      <dependency>
         <groupId>jdom</groupId>
         <artifactId>jdom</artifactId>
         <version>1.0</version>
      </dependency>
      
      <dependency>
         <groupId>jaxen</groupId>
         <artifactId>jaxen</artifactId>
         <version>1.1</version>
      </dependency>
      
      <dependency>
         <groupId>wsdl4j</groupId>
         <artifactId>wsdl4j</artifactId>
         <version>1.6.2</version>
      </dependency>
   </dependencies>
</project>
HumanResourceService.java
package com.tutorialspoint.hr.service;
import java.util.Date;
public interface HumanResourceService {
   void bookLeave(Date startDate, Date endDate, String name);
}
HumanResourceServiceImpl.java
package com.tutorialspoint.hr.service;
import java.util.Date;
import org.springframework.stereotype.Service;
@Service
public class HumanResourceServiceImpl implements HumanResourceService {
   public void bookLeave(Date startDate, Date endDate, String name) {
      System.out.println("Booking holiday for [" + startDate + "-" + endDate + "]
         for [" + name + "] ");
   }
}
LeaveEndpoint.java
package com.tutorialspoint.hr.ws;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import com.tutorialspoint.hr.service.HumanResourceService;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.xpath.XPath;
@Endpoint
public class LeaveEndpoint {
   private static final String NAMESPACE_URI = "http://tutorialspoint.com/hr/schemas";
   private XPath startDateExpression;
   private XPath endDateExpression;
   private XPath nameExpression;
   private HumanResourceService humanResourceService;
   @Autowired
   public LeaveEndpoint(HumanResourceService humanResourceService) throws JDOMException {
      this.humanResourceService = humanResourceService;
      Namespace namespace = Namespace.getNamespace("hr", NAMESPACE_URI);
      startDateExpression = XPath.newInstance("//hr:StartDate");
      startDateExpression.addNamespace(namespace);
      endDateExpression = XPath.newInstance("//hr:EndDate");
      endDateExpression.addNamespace(namespace);
      nameExpression = XPath.newInstance("concat(//hr:FirstName,' ',//hr:LastName)");
      nameExpression.addNamespace(namespace);
   }
   @PayloadRoot(namespace = NAMESPACE_URI, localPart = "LeaveRequest")                  
   public void handleLeaveRequest(@RequestPayload Element leaveRequest) throws Exception {
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
      Date startDate = dateFormat.parse(startDateExpression.valueOf(leaveRequest));
      Date endDate = dateFormat.parse(endDateExpression.valueOf(leaveRequest));
      String name = nameExpression.valueOf(leaveRequest);
      humanResourceService.bookLeave(startDate, endDate, name);
   }
}	
/WEB-INF/spring-ws-servlet.xml
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:sws = "http://www.springframework.org/schema/web-services"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/web-services
   http://www.springframework.org/schema/web-services/web-services-2.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   <context:component-scan base-package = "com.tutorialspoint.hr"/>
   <bean id = "humanResourceService"
      class = "com.tutorialspoint.hr.service.HumanResourceServiceImpl" />
   <sws:annotation-driven/>
   <sws:dynamic-wsdl id = "leave"
      portTypeName = "HumanResource"
      locationUri = "/leaveService/"
      targetNamespace = "http://tutorialspoint.com/hr/definitions">
      <sws:xsd location = "/WEB-INF/hr.xsd"/>
   </sws:dynamic-wsdl>
</beans>
/WEB-INF/web.xml
<web-app xmlns = "http://java.sun.com/xml/ns/j2ee"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
   version = "2.4">
   <display-name>TutorialsPoint HR Leave Service</display-name>
   <servlet>
      <servlet-name>spring-ws</servlet-name>
      <servlet-class>
         org.springframework.ws.transport.http.MessageDispatcherServlet
      </servlet-class>
      <init-param>
         <param-name>transformWsdlLocations</param-name>
         <param-value>true</param-value>
      </init-param>
   </servlet>
   <servlet-mapping>
      <servlet-name>spring-ws</servlet-name>
      <url-pattern>/*</url-pattern>
   </servlet-mapping>
</web-app>
/WEB-INF/hr.xsd
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"
   xmlns:hr = "http://tutorialspoint.com/hr/schemas"
   elementFormDefault = "qualified"
   targetNamespace = "http://tutorialspoint.com/hr/schemas">
   <xs:element name = "LeaveRequest">
      <xs:complexType>
         <xs:all>
            <xs:element name = "Leave" type = "hr:LeaveType"/>
            <xs:element name = "Employee" type = "hr:EmployeeType"/>
         </xs:all>
      </xs:complexType>
   </xs:element>
   <xs:complexType name = "LeaveType">
      <xs:sequence>
         <xs:element name = "StartDate" type = "xs:date"/>
         <xs:element name = "EndDate" type = "xs:date"/>
      </xs:sequence>
   </xs:complexType>
   <xs:complexType name = "EmployeeType">
      <xs:sequence>
         <xs:element name = "Number" type = "xs:integer"/>
         <xs:element name = "FirstName" type = "xs:string"/>
         <xs:element name = "LastName" type = "xs:string"/>
      </xs:sequence>
   </xs:complexType>
</xs:schema>
Построить проект
Теперь давайте откроем командную консоль, перейдем в каталог C: \ MVN \ leftService и выполним следующую команду mvn .
C:\MVN\leaveService>mvn clean package
Maven начнет строить проект.
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building leaveService Spring-WS Application 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ leaveService --- [INFO] Deleting C:\mvn\leaveService\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ leaveServi ce --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ leaveService -- - [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. b uild is platform dependent! [INFO] Compiling 3 source files to C:\mvn\leaveService\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ le aveService --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\mvn\leaveService\src\test\resource s [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ leaveSe rvice --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ leaveService --- [INFO] No tests to run. [INFO] [INFO] --- maven-war-plugin:2.2:war (default-war) @ leaveService --- [INFO] Packaging webapp [INFO] Assembling webapp [leaveService] in [C:\mvn\leaveService\target\leaveServ ice] [INFO] Processing war project [INFO] Copying webapp resources [C:\mvn\leaveService\src\main\webapp] [INFO] Webapp assembled in [7159 msecs] [INFO] Building war: C:\mvn\leaveService\target\leaveService.war [INFO] WEB-INF\web.xml already added, skipping [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 19.667 s [INFO] Finished at: 2017-01-21T11:56:43+05:30 [INFO] Final Memory: 18M/173M [INFO] ------------------------------------------------------------------------
Импортировать проект в Eclipse
Следуйте приведенным ниже инструкциям, чтобы импортировать проект в Eclipse.
- 
Откройте Затмение.
 - 
Выберите Файл → Импорт → опция.
 - 
Выберите Maven Projects Option. Нажмите на кнопку «Далее».
 - 
Выберите местоположение проекта, в котором проект leftService был создан с использованием Maven.
 - 
Нажмите кнопку Готово.
 
Откройте Затмение.
Выберите Файл → Импорт → опция.
Выберите Maven Projects Option. Нажмите на кнопку «Далее».
Выберите местоположение проекта, в котором проект leftService был создан с использованием Maven.
Нажмите кнопку Готово.
Запустить проект
Как только мы закончим с созданием исходных файлов и файлов конфигурации, экспортируйте приложение. Щелкните правой кнопкой мыши по приложению, используйте опцию «Экспорт» → «Файл WAR» и сохраните файл leftService.war в папке веб-приложений Tomcat.
Запустите сервер Tomcat и убедитесь, что мы можем получить доступ к другим веб-страницам из папки веб-приложений с помощью стандартного браузера. Попробуйте получить доступ к URL-адресу — http: // localhost: 8080 / exitService / exit.wsdl, если с веб-приложением Spring все в порядке, мы должны увидеть следующий экран.
Spring WS — статический WSDL
В предыдущей главе Spring -WS — First Application мы автоматически сгенерировали WSDL с помощью конфигурации Spring WS. В этом случае мы покажем, как выставить существующий WSDL с помощью Spring WS.
| шаг | Описание | 
|---|---|
| 1 | Создайте проект с именем leftService в пакете com.tutorialspoint, как описано в главе Spring WS — First Application. | 
| 2 | Создайте WSDL-файл exit.wsdl в подпапке / WEB-INF / wsdl. | 
| 3 | Обновите файл spring-ws-servlet.xml в подпапке / WEB-INF. Здесь мы используем тег static-wsdl вместо dynamic-wsdl. | 
| 4 | Последний шаг — создать содержимое всех исходных файлов и файлов конфигурации и экспортировать приложение, как описано ниже. | 
/WEB-INF/spring-ws-servlet.xml
<wsdl:definitions xmlns:wsdl = "http://schemas.xmlsoap.org/wsdl/"
   xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:schema = "http://tutorialspoint.com/hr/schemas"
   xmlns:tns = "http://tutorialspoint.com/hr/definitions"
   targetNamespace = "http://tutorialspoint.com/hr/definitions">
   
   <wsdl:types>
      <xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
         <xsd:import namespace = "http://tutorialspoint.com/hr/schemas"
            schemaLocation = "hr.xsd"/>
      </xsd:schema>
   </wsdl:types>
   
   <wsdl:message name = "LeaveRequest">
      <wsdl:part element = "schema:LeaveRequest" name = "LeaveRequest"/>
   </wsdl:message>
   
   <wsdl:portType name = "HumanResource">
      <wsdl:operation name = "Leave">
         <wsdl:input message = "tns:LeaveRequest" name = "LeaveRequest"/>
      </wsdl:operation>
   </wsdl:portType>
   
   <wsdl:binding name = "HumanResourceBinding" type = "tns:HumanResource">
      <soap:binding style = "document"
         transport = "http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name = "Leave">
         <soap:operation soapAction = "http://mycompany.com/RequestLeave"/>
         <wsdl:input name = "LeaveRequest">
            <soap:body use = "literal"/>
         </wsdl:input>
      </wsdl:operation>
   </wsdl:binding>
   
   <wsdl:service name = "HumanResourceService">
      <wsdl:port binding = "tns:HumanResourceBinding" name = "HumanResourcePort">
         <soap:address location = "http://localhost:8080/leaveService/"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>
/WEB-INF/spring-ws-servlet.xml
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:context = "http://www.springframework.org/schema/context" xmlns:sws = "http://www.springframework.org/schema/web-services" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services-2.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package = "com.tutorialspoint.hr"/> <sws:annotation-driven/> <sws:static-wsdl id = "leave" location = "/WEB-INF/wsdl/leave.wsdl"/> </beans>
Запустить проект
Как только мы закончили с созданием исходных файлов и файлов конфигурации, мы должны экспортировать приложение. Щелкните правой кнопкой мыши по приложению, выберите «Экспорт» → «Файл WAR» и сохраните файл leftService.war в папке веб-приложений Tomcat.
Теперь запустите сервер Tomcat и убедитесь, что мы можем получить доступ к другим веб-страницам из папки webapps с помощью стандартного браузера. Попробуйте получить доступ к URL-адресу — http: // localhost: 8080 / exitService / exit.wsdl. Если с веб-приложением Spring все в порядке, мы увидим следующий экран.
Spring WS — Сервер записи
В этой главе мы поймем, как создать сервер веб-приложений с помощью Spring WS.
| шаг | Описание | 
|---|---|
| 1 | Создайте проект с именем countryService в пакете com.tutorialspoint, как описано в главе Spring WS — First Application. | 
| 2 | Создайте country.xsd, классы доменов, CountryRepository и CountryEndPoint, как описано в следующих шагах. | 
| 3 | Обновите файл spring-ws-servlet.xml в подпапке / WEB-INF. | 
| 4 | Последний шаг — создать контент для всех исходных файлов и файлов конфигурации и экспортировать приложение, как описано ниже. | 
countries.xsd
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema" 
   xmlns:tns = "http://tutorialspoint/schemas"
   targetNamespace = "http://tutorialspoint/schemas" 
   elementFormDefault = "qualified">
   <xs:element name = "getCountryRequest">
      <xs:complexType>
         <xs:sequence>
            <xs:element name = "name" type = "xs:string"/>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   <xs:element name = "getCountryResponse">
      <xs:complexType>
         <xs:sequence>
            <xs:element name = "country" type = "tns:country"/>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   <xs:complexType name = "country">
      <xs:sequence>
         <xs:element name = "name" type = "xs:string"/>
         <xs:element name = "population" type = "xs:int"/>
         <xs:element name = "capital" type = "xs:string"/>
         <xs:element name = "currency" type = "tns:currency"/>
      </xs:sequence>
   </xs:complexType>
   <xs:simpleType name = "currency">
      <xs:restriction base = "xs:string">
         <xs:enumeration value = "GBP"/>
         <xs:enumeration value = "USD"/>
         <xs:enumeration value = "INR"/>
      </xs:restriction>
   </xs:simpleType>
</xs:schema>
Создать проект
Давайте откроем командную консоль, перейдем в каталог C: \ MVN и выполним следующую команду mvn .
C:\MVN>mvn archetype:generate -DarchetypeGroupId = org.springframework.ws -DarchetypeArtifactId = spring-ws-archetype -DgroupId = com.tutorialspoint -DartifactId = countryService
Maven начнет обработку и создаст полную структуру проекта приложения Java.
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] Using property: groupId = com.tutorialspoint [INFO] Using property: artifactId = countryService Define value for property 'version': 1.0-SNAPSHOT: : [INFO] Using property: package = com.tutorialspoint Confirm properties configuration: groupId: com.tutorialspoint artifactId: countryService version: 1.0-SNAPSHOT package: com.tutorialspoint Y: : [INFO] ------------------------------------------------------------------------- --- [INFO] Using following parameters for creating project from Old (1.x) Archetype: spring-ws-archetype:2.0.0-M1 [INFO] ------------------------------------------------------------------------- --- [INFO] Parameter: groupId, Value: com.tutorialspoint [INFO] Parameter: packageName, Value: com.tutorialspoint [INFO] Parameter: package, Value: com.tutorialspoint [INFO] Parameter: artifactId, Value: countryService [INFO] Parameter: basedir, Value: C:\mvn [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: C:\mvn\countryService [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 35.989 s [INFO] Finished at: 2017-01-21T11:18:31+05:30 [INFO] Final Memory: 17M/178M [INFO] ------------------------------------------------------------------------
Теперь перейдите в каталог C: / MVN. Мы увидим проект Java-приложения, созданный с именем countryService (как указано в artifactId). Обновите pom.xml.
pom.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/maven-v4_0_0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.tutorialspoint.hr</groupId>
   <artifactId>countryService</artifactId>
   <packaging>war</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>countryService Spring-WS Application</name>
   <url>http://www.springframework.org/spring-ws</url>
   
   <build>
      <finalName>countryService</finalName>
   </build>
   
   <dependencies>
      <dependency>
         <groupId>org.springframework.ws</groupId>
         <artifactId>spring-ws-core</artifactId>
         <version>2.4.0.RELEASE</version>
      </dependency>
      
      <dependency>
         <groupId>jdom</groupId>
         <artifactId>jdom</artifactId>
         <version>1.0</version>
      </dependency>
      
      <dependency>
         <groupId>jaxen</groupId>
         <artifactId>jaxen</artifactId>
         <version>1.1</version>
      </dependency>
      
      <dependency>
         <groupId>wsdl4j</groupId>
         <artifactId>wsdl4j</artifactId>
         <version>1.6.2</version>
      </dependency>
   </dependencies>
</project>
Создать доменные классы
Скопируйте файл country.xsd в папку C: \ mvn \ countryService \ src \ main \ resources. Давайте откроем командную консоль, перейдем в каталог C: \ mvn \ countryService \ src \ main \ resources и выполним следующую команду xjc, чтобы сгенерировать классы домена с использованием country.xsd .
C:\MVN\countryService\src\main\resources>xjc -p com.tutorialspoint countries.xsd
Maven начнет обработку и создаст доменные классы в пакете com.tutorialspoint.
parsing a schema... compiling a schema... com\tutorialspoint\Country.java com\tutorialspoint\Currency.java com\tutorialspoint\GetCountryRequest.java com\tutorialspoint\GetCountryResponse.java com\tutorialspoint\ObjectFactory.java com\tutorialspoint\package-info.java
Создайте папку Java в папке C: \ mvn \ countryService \ src \ main. Скопируйте все классы в папку C: \ mvn \ countryService \ src \ main \ java. Создайте CountryRepository и CountryEndPoint для представления базы данных страны и сервера страны соответственно.
CountryRepository.java
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.propertyeditors.CurrencyEditor;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
@Component
public class CountryRepository {
   private static final List<Country> countries = new ArrayList<Country>();
   public CountryRepository(){
      initData();
   }
   public void initData() {
      Country us = new Country();
      us.setName("United States");
      us.setCapital("Washington");
      us.setCurrency(Currency.USD);
      us.setPopulation(46704314);
   
      countries.add(us);
   
      Country india = new Country();
      india.setName("India");
      india.setCapital("New Delhi");
      india.setCurrency(Currency.INR);
      india.setPopulation(138186860);
      countries.add(india);
    
      Country uk = new Country();
      uk.setName("United Kingdom");
      uk.setCapital("London");
      uk.setCurrency(Currency.GBP);
      uk.setPopulation(63705000);
   
      countries.add(uk);
   }
   public Country findCountry(String name) {
      Assert.notNull(name);
      Country result = null;
      for (Country country : countries) {
         if (name.trim().equals(country.getName())) {
            result = country;
         }
      }
      return result;
   }
}
CountryEndPoint.java
package com.tutorialspoint.ws;
import org.jdom.JDOMException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
import com.tutorialspoint.Country;
import com.tutorialspoint.CountryRepository;
import com.tutorialspoint.GetCountryRequest;
import com.tutorialspoint.GetCountryResponse;
@Endpoint
public class CountryEndPoint {
   private static final String NAMESPACE_URI = "http://tutorialspoint/schemas";
   private CountryRepository countryRepository;
   @Autowired
   public CountryEndPoint(CountryRepository countryRepository) throws JDOMException {
      this.countryRepository = countryRepository;
   }
   @PayloadRoot(namespace = NAMESPACE_URI, localPart = "getCountryRequest")
   @ResponsePayload
   public GetCountryResponse getCountry(@RequestPayload GetCountryRequest request) 
      throws JDOMException {
      
      Country country = countryRepository.findCountry(request.getName());
      GetCountryResponse response = new GetCountryResponse();
      response.setCountry(country);
      return response;
   }
}
/WEB-INF/spring-ws-servlet.xml
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:sws = "http://www.springframework.org/schema/web-services"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/web-services
   http://www.springframework.org/schema/web-services/web-services-2.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   <context:component-scan base-package = "com.tutorialspoint"/>
   <sws:annotation-driven/>
   <sws:dynamic-wsdl id="countries"
      portTypeName = "CountriesPort"
      locationUri = "/countryService/"
      targetNamespace = "http://tutorialspoint.com/definitions">
      <sws:xsd location = "/WEB-INF/countries.xsd"/>
   </sws:dynamic-wsdl>
</beans>
/WEB-INF/web.xml
<web-app xmlns = "http://java.sun.com/xml/ns/j2ee"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
   version = "2.4">
   <display-name>TutorialsPoint Country Service</display-name>
   <servlet>
      <servlet-name>spring-ws</servlet-name>
      <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet
      </servlet-class>
      <init-param>
         <param-name>transformWsdlLocations</param-name>
         <param-value>true</param-value>
      </init-param>
   </servlet>
   
   <servlet-mapping>
      <servlet-name>spring-ws</servlet-name>
      <url-pattern>/*</url-pattern>
   </servlet-mapping>
</web-app>
Построить проект
Давайте откроем командную консоль. Перейдите в каталог C: \ MVN \ countryService и выполните следующую команду mvn .
C:\MVN\countryService>mvn clean package
Maven начнет строить проект.
INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building countryService Spring-WS Application 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ countryService --- [INFO] Deleting C:\mvn\countryService\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ countrySer vice --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ countryService --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! [INFO] Compiling 4 source files to C:\mvn\countryService\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ co untryService --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\mvn\countryService\src\test\resour ces [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ country Service --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ countryService --- [INFO] No tests to run. [INFO] [INFO] --- maven-war-plugin:2.2:war (default-war) @ countryService --- [INFO] Packaging webapp [INFO] Assembling webapp [countryService] in [C:\mvn\countryService\target\count ryService] [INFO] Processing war project [INFO] Copying webapp resources [C:\mvn\countryService\src\main\webapp] [INFO] Webapp assembled in [5137 msecs] [INFO] Building war: C:\mvn\countryService\target\countryService.war [INFO] WEB-INF\web.xml already added, skipping [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 16.484 s [INFO] Finished at: 2017-01-28T09:07:59+05:30 [INFO] Final Memory: 19M/170M [INFO] ------------------------------------------------------------------------
Запустить проект
После того, как мы создали исходный файл и файлы конфигурации, экспортируйте файл countryService.war в папку веб-приложений Tomcat.
Теперь запустите сервер Tomcat и убедитесь, что мы можем получить доступ к другим веб-страницам из папки webapps с помощью стандартного браузера. Сделайте запрос POST к URL-адресу — http: // localhost: 8080 / countryService / и с помощью любого клиента SOAP сделайте следующий запрос.
<x:Envelope xmlns:x = "http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:tns = "http://tutorialspoint/schemas">
   <x:Header/>
   <x:Body>
      <tns:getCountryRequest>
         <tns:name>United States</tns:name>
      </tns:getCountryRequest>
   </x:Body>
</x:Envelope>
Вы увидите следующий результат.
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <ns2:getCountryResponse xmlns:ns2 = "http://tutorialspoint/schemas">
         <ns2:country>
            <ns2:name>United States</ns2:name>
            <ns2:population>46704314</ns2:population>
            <ns2:capital>Washington</ns2:capital>
            <ns2:currency>USD</ns2:currency>
         </ns2:country>
      </ns2:getCountryResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Spring WS — сервер модульных испытаний
В этой главе мы поймем, как выполнить модульное тестирование службы веб-приложений, созданной с помощью Spring WS.
| шаг | Описание | 
|---|---|
| 1 | Обновление проекта countryService, созданного в главе Spring WS — Write Server. Добавьте папку src / test / java. | 
| 2 | Создайте CustomerEndPointTest.java в папке — src / test / java / com / tutorialspoint / ws, а затем обновите файл POM.xml, как описано ниже. | 
| 3 | Добавьте spring-context.xml в подпапку src / main / resources. | 
| 4 | Последний шаг — создать контент для всех исходных файлов и файлов конфигурации и протестировать приложение, как описано ниже. | 
pom.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/maven-v4_0_0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.tutorialspoint</groupId>
   <artifactId>countryService</artifactId>
   <packaging>war</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>countryService Spring-WS Application</name>
   <url>http://www.springframework.org/spring-ws</url>
   <build>
      <finalName>countryService</finalName>
   </build>
   
   <dependencies>
      <dependency>
         <groupId>org.springframework.ws</groupId>
         <artifactId>spring-ws-core</artifactId>
         <version>2.4.0.RELEASE</version>
      </dependency>
      
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-test</artifactId>
         <version>2.5</version>
      </dependency>
      
      <dependency>
         <groupId>org.springframework.ws</groupId>
         <artifactId>spring-ws-test</artifactId>
         <version>2.4.0.RELEASE</version>
      </dependency>
      
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-tx</artifactId>
         <version>3.1.2.RELEASE</version>
      </dependency>
      
      <dependency>
         <groupId>jdom</groupId>
         <artifactId>jdom</artifactId>
         <version>1.0</version>
      </dependency>
      
      <dependency>
         <groupId>jaxen</groupId>
         <artifactId>jaxen</artifactId>
         <version>1.1</version>
      </dependency>
      
      <dependency>
         <groupId>wsdl4j</groupId>
         <artifactId>wsdl4j</artifactId>
         <version>1.6.2</version>
      </dependency>
      
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.5</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>
весна-context.xml
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:sws = "http://www.springframework.org/schema/web-services"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/web-services
   http://www.springframework.org/schema/web-services/web-services-2.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   <context:component-scan base-package = "com.tutorialspoint"/>
   <sws:annotation-driven/>
   <bean id = "schema" class = "org.springframework.core.io.ClassPathResource">
      <constructor-arg index = "0" value = "countries.xsd" />
   </bean>
</beans>
CustomerEndPointTest.java
package com.tutorialspoint.ws;
import javax.xml.transform.Source;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.ws.test.server.MockWebServiceClient;
import org.springframework.xml.transform.StringSource;
import static org.springframework.ws.test.server.RequestCreators.withPayload;
import static org.springframework.ws.test.server.ResponseMatchers.payload;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( locations = "/spring-context.xml" )
public class CustomerEndPointTest {
   @Autowired
   private ApplicationContext applicationContext;
   private MockWebServiceClient mockClient;
   @Before
   public void createClient() {
      mockClient = MockWebServiceClient.createClient(applicationContext);
      GenericApplicationContext ctx = (GenericApplicationContext) applicationContext;
      final XmlBeanDefinitionReader definitionReader = new XmlBeanDefinitionReader(ctx);
      definitionReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
      definitionReader.setNamespaceAware(true);
   }
   @Test
   public void testCountryEndpoint() throws Exception {
      Source requestPayload = new StringSource(
         "<getCountryRequest xmlns = 'http://tutorialspoint/schemas'>"+
         "<name>United States</name>"+
         "</getCountryRequest>");				
      Source responsePayload = new StringSource(
         "<getCountryResponse xmlns='http://tutorialspoint/schemas'>" +
         "<country>" +
         "<name>United States</name>"+
         "<population>46704314</population>"+
         "<capital>Washington</capital>"+
         "<currency>USD</currency>"+
         "</country>"+
         "</getCountryResponse>");
      mockClient.sendRequest(withPayload(requestPayload)).andExpect(payload(responsePayload));
   }	
}
Построить проект
Давайте откроем командную консоль, перейдем в каталог C: \ MVN \ countryService и выполним следующую команду mvn.
C:\MVN\countryService>mvn test
Maven начнет сборку и протестирует проект.
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building countryService Spring-WS Application 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ countrySer vice --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 2 resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ countryService --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ co untryService --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\MVN\countryService\src\test\resour ces [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ country Service --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ countryService --- [INFO] Surefire report directory: C:\MVN\countryService\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.tutorialspoint.ws.CustomerEndPointTest Feb 27, 2017 11:49:30 AM org.springframework.test.context.TestContextManager ret rieveTestExecutionListeners INFO: @TestExecutionListeners is not present for class [class com.tutorialspoint .ws.CustomerEndPointTest]: using defaults. Feb 27, 2017 11:49:30 AM org.springframework.beans.factory.xml.XmlBeanDefinition Reader loadBeanDefinitions INFO: Loading XML bean definitions from class path resource [spring-context.xml] Feb 27, 2017 11:49:30 AM org.springframework.context.support.GenericApplicationC ontext prepareRefresh INFO: Refreshing org.springframework.context.support.GenericApplicationContext@b 2eddc0: startup date [Mon Feb 27 11:49:30 IST 2017]; root of context hierarchy Feb 27, 2017 11:49:31 AM org.springframework.ws.soap.addressing.server.Annotatio nActionEndpointMapping afterPropertiesSet INFO: Supporting [WS-Addressing August 2004, WS-Addressing 1.0] Feb 27, 2017 11:49:31 AM org.springframework.ws.soap.saaj.SaajSoapMessageFactory afterPropertiesSet INFO: Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.386 sec Feb 27, 2017 11:49:31 AM org.springframework.context.support.GenericApplicationC ontext doClose INFO: Closing org.springframework.context.support.GenericApplicationContext@b2ed dc0: startup date [Mon Feb 27 11:49:30 IST 2017]; root of context hierarchy Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.517 s [INFO] Finished at: 2017-02-27T11:49:31+05:30 [INFO] Final Memory: 11M/109M [INFO] ------------------------------------------------------------------------
Spring WS — Пишущий клиент
В этой главе мы узнаем, как создать клиент для сервера веб-приложений, созданного на Spring WS — Writing Server с использованием Spring WS.
| шаг | Описание | 
|---|---|
| 1 | Обновите проект countryService в пакете com.tutorialspoint, как описано в главе Spring WS — Writing Server. | 
| 2 | Создайте CountryServiceClient.java в пакете com.tutorialspoint.client и MainApp.java в пакете com.tutorialspoint, как описано в следующих шагах. | 
CountryServiceClient.java
package com.tutorialspoint.client;
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
import com.tutorialspoint.GetCountryRequest;
import com.tutorialspoint.GetCountryResponse;
public class CountryServiceClient extends WebServiceGatewaySupport {
   public GetCountryResponse getCountryDetails(String country){
      String uri = "http://localhost:8080/countryService/";
      GetCountryRequest request = new GetCountryRequest();
      request.setName(country);
      GetCountryResponse response =(GetCountryResponse) getWebServiceTemplate()
         .marshalSendAndReceive(uri, request);
      return response;
   }
}
MainApp.java
package com.tutorialspoint;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import com.tutorialspoint.client.CountryServiceClient;
public class MainApp {
   public static void main(String[] args) {
      CountryServiceClient client = new CountryServiceClient();
      Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
      marshaller.setContextPath("com.tutorialspoint");
      client.setMarshaller(marshaller);
      client.setUnmarshaller(marshaller);
      GetCountryResponse response = client.getCountryDetails("United States");
      System.out.println("Country : " + response.getCountry().getName());
      System.out.println("Capital : " + response.getCountry().getCapital());
      System.out.println("Population : " + response.getCountry().getPopulation());
      System.out.println("Currency : " + response.getCountry().getCurrency());
   }
}
Запустите веб-сервис
Запустите сервер Tomcat и убедитесь, что мы можем получить доступ к другим веб-страницам из папки веб-приложений с помощью стандартного браузера.
Тестовый клиент веб-службы
Щелкните правой кнопкой мыши файл MainApp.java в вашем приложении под Eclipse и используйте команду run as Java Application . Если с приложением все в порядке, оно напечатает следующее сообщение.
Country : United States Capital : Washington Population : 46704314 Currency : USD
Здесь мы создали Client — CountryServiceClient.java для веб-службы на основе SOAP. MainApp использует CountryServiceClient для доступа к веб-сервису, отправляет запрос и получает данные.
Spring WS — клиент модульного тестирования
В этой главе мы узнаем, как выполнить модульное тестирование клиента, созданного в Spring WS — Writing Client, для сервера веб-приложений, созданного в главе Spring WS — Writing Server с использованием Spring WS.
| шаг | Описание | 
|---|---|
| 1 | Обновите проект countryService в пакете com.tutorialspoint, как описано в главе Spring WS — Writing Server. | 
| 2 | Создайте CountryServiceClientTest.java в пакете com.tutorialspoint в папке SRC → Test → Java, как описано в шагах, приведенных ниже. | 
CountryServiceClientTest.java
package com.tutorialspoint;
import static org.junit.Assert.*;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import com.tutorialspoint.client.CountryServiceClient;
public class CountryServiceClientTest {
   CountryServiceClient client;
   
   @Before
   public void setUp() throws Exception {
      client = new CountryServiceClient();
      Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
      marshaller.setContextPath("com.tutorialspoint");
      client.setMarshaller(marshaller);
      client.setUnmarshaller(marshaller);
   }
   @Test
   public void test() {
      GetCountryResponse response = client.getCountryDetails("United States");
      Country expectedCountry = new Country();
      expectedCountry.setCapital("Washington");
      Country actualCountry = response.getCountry();
      Assert.assertEquals(expectedCountry.getCapital(), actualCountry.getCapital());
   }
}
Запустите веб-сервис
Запустите сервер Tomcat и убедитесь, что мы можем получить доступ к другим веб-страницам из папки веб-приложений с помощью стандартного браузера.
Клиент веб-службы модульного тестирования
Давайте откроем командную консоль, перейдем в каталог C: \ MVN \ countryService и выполним следующую команду mvn.
C:\MVN\countryService>mvn test
Maven начнет сборку и тестирование проекта.




