spring-ws搭建webservice服务

本文主要介绍如何根据spring提供的spring-ws构建一个简单的webservice服务。

在开始之前,首先需要新建一个maven项目,这里不再赘述如何新建maven web项目。

1、配置pom文件

使用spring-ws构建webservice服务,需要依赖spring-ws-core,spring-core

<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.webservice</groupId>
	<artifactId>service</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>service Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<spring.version>4.3.2.RELEASE</spring.version>
		<log4j2_version>2.5</log4j2_version>
		<springws.version>2.4.0.RELEASE</springws.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<!-- spring 依赖配置 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- webservice依赖配置 -->
		<dependency>
			<groupId>org.springframework.ws</groupId>
			<artifactId>spring-ws-core</artifactId>
			<version>${springws.version}</version>
		</dependency>
		<!-- log4j依赖配置 -->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>${log4j2_version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
			<version>${log4j2_version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-web</artifactId>
			<version>${log4j2_version}</version>
		</dependency>
	</dependencies>
	<build>
		<finalName>service</finalName>
	</build>
</project>
2、配置web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<display-name>Archetype Created Web Application</display-name>
	<servlet>
		<servlet-name>spring-ws</servlet-name>
		<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
		<!--Spring-WS配置文件的位置,默认寻找[servlet-name]-servlet.xml文件 -->  
        <!--<init-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/spring-ws-config.xml</param-value>   
            </init-param> -->  
		<init-param>
			<param-name>transformWsdlLocations</param-name>
			<param-value>true</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring-ws</servlet-name>
		<url-pattern>/service/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>spring-ws</servlet-name>
		<url-pattern>*.wsdl</url-pattern>
	</servlet-mapping>
</web-app>
3、配置ws文件

在WEB-INF文件夹下新建一个spring-ws-servlet.xml文件、然后进行配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sws="http://www.springframework.org/schema/web-services"
	xmlns:ws="http://www.springframework.org/schema/integration/ws"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-4.0.xsd  
    http://www.springframework.org/schema/web-services  
    http://www.springframework.org/schema/web-services/web-services-2.0.xsd">

	<!-- 扫描指定包下的组件 -->
	<context:component-scan base-package="service.ron" />

	<!-- 引入wsdl文件 -->
	<sws:static-wsdl location="/WEB-INF/wsdl/UserService.wsdl" />
</beans>
4、在WEB-INF下新建wsdl文件夹,新建UserService.wsdl文件并做如下配置

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:tns="http://localhost/namespace/userservice/" 
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="UserService"
	targetNamespace="http://localhost/namespace/userservice/">
	<!-- 定义webservice使用的数据类型 -->
	<wsdl:types>
		<xsd:schema targetNamespace="http://localhost/namespace/userservice/">
			<xsd:element name="login">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="username" type="xsd:string" />
						<xsd:element name="password" type="xsd:string" />
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="loginResponse">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="out" type="xsd:string" />
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="checkuser">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="userkey" type="xsd:string" />
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="checkuserResponse">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="out" type="xsd:string" />
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:schema>
	</wsdl:types>
	<!-- 定义操作登录的数据元素 -->
	<wsdl:message name="login">
		<wsdl:part element="tns:login" name="parameters" />
	</wsdl:message>
	<wsdl:message name="loginResponse">
		<wsdl:part element="tns:loginResponse" name="parameters" />
	</wsdl:message>
	<!-- 定义操作检查用户的数据元素 -->
	<wsdl:message name="checkuser">
		<wsdl:part element="tns:checkuser" name="parameters" />
	</wsdl:message>
	<wsdl:message name="checkuserResponse">
		<wsdl:part element="tns:checkuserResponse" name="parameters" />
	</wsdl:message>
	<!-- 描述个提供的服务、可被执行的操作,以及相关的消息。 -->
	<wsdl:portType name="IUserService">
		<!-- 描述login服务 -->
		<wsdl:operation name="login">
			<wsdl:input message="tns:login" />
			<wsdl:output message="tns:loginResponse" />
		</wsdl:operation>
		<!-- 描述checkuser服务 -->
		<wsdl:operation name="checkuser">
			<wsdl:input message="tns:checkuser" />
			<wsdl:output message="tns:checkuserResponse" />
		</wsdl:operation>
	</wsdl:portType>
	<!-- 为每个端口定义消息格式和协议细节。 -->
	<wsdl:binding name="UserServiceSOAP" type="tns:IUserService">
		<soap:binding style="document"
			transport="http://schemas.xmlsoap.org/soap/http" />
		<wsdl:operation name="login">
			<soap:operation soapAction="http://localhost:8080/service/UserService/login" />
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="checkuser">
			<soap:operation soapAction="http://localhost:8080/service/UserService/checkuser" />
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:service name="UserService">
		<wsdl:port binding="tns:UserServiceSOAP" name="UserServiceSOAP">
			<soap:address location="http://localhost:8080/service/UserService.wsdl" />
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>
5、生成java文件

运行cmd命令 进入sdk的bin目录
输入命令:wsimport -keep -verbose -s '代码路径' 'wsdl文件路径'
 新建包,并拷贝生成的文件到项目中,有些没用的可以删掉,清理之后的文件目录大致为:


6、编写userservice接口实现类

package service.ron.service;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;

import service.ron.api.IUserService;

/**
 * @Comment
 * @Author Ron
 * @date 2017年1月9日 上午11:26:35
 */
@Component("userService")
public class UserServiceImpl implements IUserService {
	private static final Logger logger = LogManager.getLogger(UserServiceImpl.class);

	@Override
	public String login(String username, String password) {
		// TODO Auto-generated method stub
		logger.info(username + "登录");
		String out = "";
		if (username.equals("ron") && password.equals("111")) {
			out = "login success";
		} else {
			out = "login error";
		}
		logger.info(username + " " + out);
		return out;
	}

	/**
	 * 检查用户
	 */
	@Override
	public String checkuser(String userkey) {
		return "00";
	}
}

7、编写endpoint

生成的代码中没有endpoint,需要我们自己去写endpoint

package service.ron.endpoint;

import javax.annotation.Resource;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
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 service.ron.api.IUserService;
import service.ron.entity.Checkuser;
import service.ron.entity.CheckuserResponse;
import service.ron.entity.Login;
import service.ron.entity.LoginResponse;
/**
 * @Comment
 * @Author Ron
 * @date 2017年1月9日 上午11:32:37
 */
@Endpoint
public class UserServiceEndpoint {
	private static final Logger logger = LogManager.getLogger(UserServiceEndpoint.class);
	// UserService.wsdl声明的命名空间
	public static final String USERVICE_NAMESPACE = "http://localhost/namespace/userservice/";

	@Resource(name = "userService")
	private IUserService userService;

	@PayloadRoot(namespace = USERVICE_NAMESPACE, localPart = "login")
	@ResponsePayload
	public LoginResponse handleLoginRequest(@RequestPayload Login request) {
		logger.info("Entered into handelLoginRequest method.");

		String info = userService.login(request.getUsername(),request.getPassword());

		LoginResponse response = new LoginResponse();
		response.setOut(info);

		logger.info("Exit from handelLoginRequest method.");
		return response;
	}
	
	/**
	 * @Comment 处理检查用户信息
	 * @Author Ron
	 * @Date 2017年1月9日 下午4:43:46
	 * @param request
	 * @return
	 */
	@PayloadRoot(namespace = USERVICE_NAMESPACE, localPart = "checkuser")
	@ResponsePayload
	public CheckuserResponse handleCheckRequest(@RequestPayload Checkuser request) {
		logger.info("Entered into handleCheckRequest method.");
		
		String info = userService.checkuser(request.getUserkey());
		
		CheckuserResponse response = new CheckuserResponse();
		
		response.setOut(info);

		logger.info("Exit from handleCheckRequest method.");
		return response;
	}
}

8、soapui测试结果

如果不知道soapui是啥或者不知道怎么用,百度一下就可以了。




源码下载:http://download.csdn.net/detail/zyhlwzy/9732973

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RonTech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值