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 . |