天天看點

spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。

最近研究了一下spring webservice整合,由于第一次做這個,整合期間遇到了不少問題,在網上查找了好久也沒找到完整實作的server和client的demo,有的問題折騰了我好幾天,看到spring的官網裡面有人提相同的問題,但是都沒人給出解決方案,是以就隻能慢慢摸索,經過艱辛的探索,終于實作了一個完整的demo,在這裡我整理了一下分享給大家,希望能幫助大家解決這方面遇到的問題,由于在下才疏學淺,有的地方可能寫得不是很合理,希望大家提出來探讨一下,互相提高。我會盡量把自己遇到的問題展現出來,然後一一解決,廢話不多說,開始幹活:

第一部分實作spring webservice服務端的開發與部署。

1. 建立一個maven的web項目,完成一些準備工作。

1.1 在pom.xml中加入相關jar包,如下:

[html]  view plain copy

spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。
spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>com.zdsoft.webservice</groupId>  
  5.     <artifactId>spring-webservice-server</artifactId>  
  6.     <packaging>war</packaging>  
  7.     <version>0.0.1-SNAPSHOT</version>  
  8.     <name>spring-webservice-server Maven Webapp</name>  
  9.     <url>http://maven.apache.org</url>  
  10.     <dependencies>  
  11.         <dependency>  
  12.             <groupId>org.springframework.ws</groupId>  
  13.             <artifactId>spring-ws-core</artifactId>  
  14.             <version>2.1.4.RELEASE</version>  
  15.         </dependency>  
  16.         <dependency>  
  17.             <groupId>log4j</groupId>  
  18.             <artifactId>log4j</artifactId>  
  19.             <version>1.2.17</version>  
  20.         </dependency>  
  21.     </dependencies>  
  22.     <build>  
  23.         <finalName>spring-webservice-server</finalName>  
  24.     </build>  
  25. </project>  

1.2 建立log4j.xml檔案,配置log4j列印資訊,如下:

[html]  view plain copy

spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。
spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"  debug="true">  
  4.     <appender name="console" class="org.apache.log4j.ConsoleAppender">  
  5.         <param name="Target" value="System.out" />  
  6.         <param name="Threshold" value="ALL" />  
  7.         <layout class="org.apache.log4j.PatternLayout">  
  8.             <param name="ConversionPattern" value="%d{HH:mm:ss:SSS} %p %l>> %m%n" />  
  9.         </layout>  
  10.     </appender>  
  11.     <root>  
  12.         <priority value="ALL" />  
  13.         <appender-ref ref="console" />  
  14.     </root>  
  15. </log4j:configuration>  

1.3 為了能讓我們的webservice能和web的容器內建到一起,需要在web.xml裡面做一些配置,如下:

[html]  view plain copy

spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。
spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。
  1. <!DOCTYPE web-app PUBLIC  
  2.  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
  3.  "http://java.sun.com/dtd/web-app_2_3.dtd" >  
  4. <web-app>  
  5.     <display-name>Archetype Created Web Application</display-name>  
  6.     <servlet>  
  7.         <servlet-name>spring-ws</servlet-name>  
  8.         <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>  
  9.         <!--Spring-WS配置檔案的位置,預設尋找[servlet-name]-servlet.xml檔案 -->  
  10.         <!--<init-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/spring-ws-config.xml</param-value>   
  11.             </init-param> -->  
  12.         <init-param>  
  13.             <param-name>transformWsdlLocations</param-name>  
  14.             <param-value>true</param-value>  
  15.         </init-param>  
  16.         <load-on-startup>1</load-on-startup>  
  17.     </servlet>  
  18.     <servlet-mapping>  
  19.         <servlet-name>spring-ws</servlet-name>  
  20.         <url-pattern>/service  
  21. @Component("userService")  
  22. public class UserServiceImpl implements IUserService {  
  23.     private static final Logger LOG = LogManager.getLogger(UserServiceImpl.class);  
  24.     public String login(String username, String password) {  
  25.         LOG.info("Entered into UserServiceImpl method.");  
  26.         LOG.debug("username:" + username);  
  27.         LOG.debug("password:" + password);  
  28.         String info = "login failed.";  
  29.         if("scott".equals(username) && "tiger".equals(password)) {  
  30.             info = "login success.";  
  31.         }  
  32.         LOG.debug(info);  
  33.         LOG.info("Exit from UserServiceImpl method.");  
  34.         return info;  
  35.     }  
  36.     public User getUser(String username) {  
  37.         LOG.info("Entered into getUser method.");  
  38.         LOG.debug(username);  
  39.         User user = new User();  
  40.         user.setNickname(username + "--nickname");  
  41.         user.setPassword(username + "--password");  
  42.         user.setUsername(username + "--username");  
  43.         LOG.info("Exit from getUser method.");  
  44.         return user;  
  45.     }  
  46. }  

2.6 建立endpoint類:UserServiceEndpoint,如下:

[java]  view plain copy

spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。
spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。
  1. package com.zdsoft.webservice.endpoint;  
  2. import javax.annotation.Resource;  
  3. import org.apache.log4j.LogManager;  
  4. import org.apache.log4j.Logger;  
  5. import org.springframework.ws.server.endpoint.annotation.Endpoint;  
  6. import org.springframework.ws.server.endpoint.annotation.PayloadRoot;  
  7. import org.springframework.ws.server.endpoint.annotation.RequestPayload;  
  8. import org.springframework.ws.server.endpoint.annotation.ResponsePayload;  
  9. import com.zdsoft.webservice.api.user.GetUser;  
  10. import com.zdsoft.webservice.api.user.GetUserResponse;  
  11. import com.zdsoft.webservice.api.user.IUserService;  
  12. import com.zdsoft.webservice.api.user.Login;  
  13. import com.zdsoft.webservice.api.user.LoginResponse;  
  14. import com.zdsoft.webservice.api.user.User;  
  15. @Endpoint  
  16. public class UserServiceEndpoint {  
  17.     private static final Logger LOG = LogManager.getLogger(UserServiceEndpoint.class);  
  18.     //UserService.wsdl聲明的命名空間  
  19.     public static final String USERVICE_NAMESPACE = "http://webservice.zdsoft.com/namespace/userservice";  
  20.     @Resource(name="userService")  
  21.     private IUserService userService;  
  22.     @PayloadRoot(namespace = USERVICE_NAMESPACE, localPart = "login")  
  23.     @ResponsePayload  
  24.     public LoginResponse handelLoginRequest(@RequestPayload Login request) {  
  25.         LOG.info("Entered into handelLoginRequest method.");  
  26.         String info = userService.login(request.getUsername(), request.getPassword());  
  27.         LoginResponse response = new LoginResponse();  
  28.         response.setInfo(info);  
  29.         LOG.info("Exit from handelLoginRequest method.");  
  30.         return response;  
  31.     }  
  32.     @PayloadRoot(namespace = USERVICE_NAMESPACE, localPart = "getUser")  
  33.     @ResponsePayload  
  34.     public GetUserResponse HandelGetUserRequest(@RequestPayload GetUser request) {  
  35.         LOG.info("Entered into HandelGetUserRequest method.");  
  36.         User user = userService.getUser(request.getUsername());  
  37.         GetUserResponse response = new GetUserResponse();  
  38.         response.setUser(user);  
  39.         LOG.info("Exit from  HandelGetUserRequest method.");  
  40.         return response;  
  41.     }  
  42. }  

2.7 使用SoapUI工具測試

a. 下載下傳SoapUI,官網:http://www.soapui.org/, 這個工具使用方法去Google一下。

b. 測試我們的login方法,如下:

spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。

c. 測試我們的getUser方法, 如下:

spring webservice (一) 伺服器端開發 1. 建立一個maven的web項目,完成一些準備工作。

繼續閱讀