1. Введение
Это было долгое ожидание, но я наконец публикую учебник по созданию первого приложения на основе SOAP с использованием Spring. JAX-WS (Java API для XML-веб-сервисов) — это набор API-интерфейсов для создания веб-сервисов в формате XML, который мы также чаще всего называем веб-сервисом на основе SOAP , который, как мы надеемся, всем нам известен базовая архитектура.
2. Реализация
Для начала давайте проверим конфигурацию файла pom —
pom.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<!-- Spring dependencies --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.1.RELEASE</version></dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.2.1.RELEASE</version></dependency> <!-- JAX-WS --><dependency> <groupId>org.jvnet.jax-ws-commons.spring</groupId> <artifactId>jaxws-spring</artifactId> <version>1.9</version></dependency> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>2.2.8</version></dependency> |
web.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?xml version="1.0" encoding="ISO-8859-1"?> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee id="WebApp_ID" version="2.5"> <display-name>SOAPWebServiceExample</display-name> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>customer</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>customer</servlet-name> <url-pattern>/customer</url-pattern> </servlet-mapping> </web-app> |
Давайте создадим объект Customer для нашего приложения.
Customer.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
package com.jcombat.entity; public class Customer { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }} |
Давайте теперь создадим интерфейс сервиса и соответствующий ему класс реализации сервиса.
CustomerService.java
|
1
2
3
4
5
6
7
|
package com.jcombat.services.customers; import com.jcombat.entity.Customer; public interface CustomerService { public Customer getCustomerById(String customerId);} |
CustomerServiceImpl.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
package com.jcombat.services.customers; import com.jcombat.entity.Customer; public class CustomerServiceImpl implements CustomerService { public Customer getCustomerById(String customerId) { Customer customer = new Customer(); customer.setId(123); customer.setName("Abhimanyu"); return customer; }} |
Ниже показано, как должен выглядеть applicationContext .
applicationContext.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?xml version="1.0" encoding="UTF-8"?> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ws="http://jax-ws.dev.java.net/spring/core" xsi:schemaLocation="http://www.springframework.org/schema/beans <bean id="customerService" class="com.jcombat.services.customers.CustomerServiceImpl"> </bean> <bean id="customerEndpoint" class="com.jcombat.ws.CustomerEndpoint"> <property name="service" ref="customerService" /> </bean> <wss:binding url="/customer"> <wss:service> <ws:service bean="#customerEndpoint" /> </wss:service> </wss:binding> </beans> |
Обратите внимание, что шаблон URL ( / customer ) связан с классом реализации конечной точки веб-службы ( customerEndpoint ), как видно из приведенного выше фрагмента. Ниже показано, как выглядит наш класс реализации bean-компонента customerEndpoint .
CustomerEndpoint.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package com.jcombat.ws; import javax.jws.WebMethod;import javax.jws.WebService; import com.jcombat.entity.Customer;import com.jcombat.services.customers.CustomerService; @WebService(serviceName = "customerService")public class CustomerEndpoint { private CustomerService service; @WebMethod(exclude = true) public void setService(CustomerService service) { this.service = service; } @WebMethod(operationName = "getCustomer") public Customer getCustomerById(String customerId) { Customer customer = service.getCustomerById(customerId); return customer; } } |
Обратите внимание, что аннотация @WebService указывает среде выполнения сервера выставлять все открытые методы этого класса в качестве методов веб-службы. Если мы хотим, чтобы какой-либо из методов не отображался в качестве метода веб-службы, нам нужно пометить метод с помощью @WebMethod (exclude = true) , как видно из приведенного выше фрагмента. Точно так же, если мы хотим присвоить методу метода веб-службы что-то, отличное от фактического имени метода, указанного в классе ( getCustomerById () ), нам нужно добавить атрибут operationName в аннотацию @WebMethod .
- Если у вас возникли проблемы с зависимостями при настройке проекта, вы можете обратиться по этой ссылке .
3. Запуск приложения
- HTTP: // локальный: 8080 / SOAPWebServiceExample / клиент WSDL
Как только мы нажмем на указанный выше URL, мы сможем увидеть содержимое WSDL, как видно на снимке ниже.
Мы также можем проверить конечную точку с помощью SOAP UI. Создайте новый проект SOAP с тем же расположением WSDL, как указано выше.
4. Загрузите исходный код
| Ссылка: | Приложение веб-сервиса с JAX-WS и Spring от нашего партнера JCG Абхиманью Прасада в блоге jCombat . |

