在同一个系统里用cxf 实现SOAP 协议和RESTful风格 两种类型的webservice接口(含简单demo)

1,依赖jar

我的Spring 是4.0.8版本的不同版本之间可能会有冲突,需要耐心的试试

 

	<dependency>
	    <groupId>org.apache.cxf</groupId>
	    <artifactId>cxf-rt-frontend-jaxws</artifactId>
	    <version>3.1.12</version>
	</dependency>
	
	
	<dependency>  
            <groupId>com.fasterxml.jackson.jaxrs</groupId>  
            <artifactId>jackson-jaxrs-json-provider</artifactId>  
            <version>2.4.1</version>  
      </dependency>	
	  
	
	<dependency>
	    <groupId>org.apache.cxf</groupId>
	    <artifactId>cxf-rt-transports-http</artifactId>
	    <version>3.0.3</version>
	</dependency>
	<dependency>
	    <groupId>org.apache.cxf</groupId>
	    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
	    <version>3.0.3</version>
	</dependency>
	
	<dependency> <groupId>org.apache.cxf</groupId>
	 <artifactId>cxf-rt-transports-http-jetty</artifactId>
	  <version>3.1.8</version>
	 </dependency>	
	<dependency> <groupId>org.apache.cxf</groupId>
	 <artifactId>cxf-rt-transports-http-jetty</artifactId>
	  <version>3.1.8</version>
	 </dependency>
	<dependency>
	    <groupId>wsdl4j</groupId>
	    <artifactId>wsdl4j</artifactId>
	    <version>1.6.2</version>
	</dependency>

 

 

2.web.xml配置

 

 

 

 <servlet>
  	<servlet-name>workerWebSer</servlet-name>
  	<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>workerWebSer</servlet-name>
  	<url-pattern>/webservice/*</url-pattern>
  </servlet-mapping>

 

 

3.cxf配置文件

3.1,restFul风格的

 

<?xml version="1.0" encoding="utf-8"?>
<!-- 
   规范:xsd
   
   ns:name space
 -->
<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:jaxws="http://cxf.apache.org/jaxws"
    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://cxf.apache.org/jaxws
		http://cxf.apache.org/schemas/jaxws.xsd
		http://cxf.apache.org/jaxrs
		http://cxf.apache.org/schemas/jaxrs.xsd">

	<!-- 服务发布配置:地址 + 实现类 -->
	
	<!-- 声明web服务的实现类 -->
	<bean id="workerService" class="com.thinkgem.jeesite.webservice.service.WorkerWebService"></bean>
	
	<jaxrs:server address="/rest">
		<jaxrs:serviceBeans>
			<ref bean="workerService"/>
		</jaxrs:serviceBeans>
		  
        
		<!-- 用哪个jar来封装json -->
		 <jaxrs:providers>  
            <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"/>  
        </jaxrs:providers> 
        
        
		
	</jaxrs:server>
		
</beans>

 

3.1.1 restFul风格java代码介绍

 

(我这里介绍的是用json传递消息的)

 

import java.io.UnsupportedEncodingException;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import  java.net.URLDecoder;
import java.util.Date;
import java.util.List;	 
@WebService
@Path("worker")
@Transactional(isolation=Isolation.READ_COMMITTED,propagation=Propagation.REQUIRED ,readOnly=false,rollbackFor=Exception.class)

public class WorkerWebService {
	
	//工单-系统 基础数据 接口
	@PUT
	@Path("/updateBasic")
	@Produces("application/json;charset=UTF-8")
	public String updateBasic(BasicWeb webBasic) throws UnsupportedEncodingException {
		//BasicWeb是用来接收json数据的,我这里是服务端,客户端的BasicWeb应和 这里的BasicWeb一样,否则接收不到
		//逻辑处理代码
		return "success";
	}
	
	//restful风格传递数据有四种类型  @GET   @POST  @PUT  @DELETE  客户端代码与之相对应
	@GET
	@Path("/query/{id63}")
	@Produces("application/json;charset=utf-8")
	public User queryUser(@PathParam("id63")Integer id) {
		System.out.println("in Server query user:"+id);
		return new User(id,"中文");
	}
	@POST
	@Path("/add")
	
	public void insertUser(User user) {
		System.out.println("in Server insert User:"+user);
	}
	@PUT
	@Path("/update")
	public void updateUser(User user) {
		System.out.println("in Server update User:"+user);
		
	}
	@DELETE
	@Path("/delete/{id63}")
	public void deleteUser(@PathParam("id63")Integer id) {
		System.out.println("in Server delete User:"+id);
		
	}
	
}


3.1.2  访问地址:

 

 


 

 

 

 

 

3.1.3  客户端测试代码,顺便说一下没有找不到jar包可以去mvn官网去下载(怎么下?百度一下)

 

3.1.3.1jar包

3.1.3.2测试代码

 

@Test
	public void updateBasic() throws ClientProtocolException, IOException{
		BasicWeb basicWeb=new BasicWeb();
		basicWeb.setCode("workorder");  //死值
		basicWeb.setOrgId("dde8da43712148979534344a99494291");//死值
		basicWeb.setIdentify("test_name4");	//英文
		String   name=URLEncoder.encode("测试wwwwttt123", "UTF-8");
		basicWeb.setName(name);
		String jsonBasicWeb=JSON.toJSONString(basicWeb);
		System.out.println(jsonBasicWeb);
		String result = Request.Put("http://localhost:8080/mycrm/webservice/rest/worker/updateBasic/")
		.body(new StringEntity(jsonBasicWeb))
		.setHeader("content-type","application/json")
		.execute().returnContent().asString(Charset.forName("utf-8"));
		System.out.println(result);
	}
	

 

 

 

 

 

 

3.2,soap协议的配置  

 

<?xml version="1.0" encoding="utf-8"?>
<!-- 
   规范:xsd
   
   ns:name space
 -->
<beans	xmlns="http://www.springframework.org/schema/beans" 
		xmlns:jaxws="http://cxf.apache.org/jaxws"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		xsi:schemaLocation="http://www.springframework.org/schema/beans
		                    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		                    http://cxf.apache.org/jaxws
		                    http://cxf.apache.org/schemas/jaxws.xsd">
	
	<!-- web服务实现声明 -->
	<bean id="ws63" class="com.thinkgem.jeesite.webservice.service.CustomerWebServiceImpl"></bean>
	<!-- web服务配置 :服务地址+服务实现  -->
	<jaxws:server address="/customerService">
		<jaxws:serviceBean>
			<ref bean="ws63"/>
		</jaxws:serviceBean>
		
<!--  接收报文拦截器,可以自定义接收到报文的格式-->

<jaxws:inInterceptors> <bean class="com.thinkgem.jeesite.webservice.utils.CAbstractPhaseInterceptor"> <constructor-arg> <value>receive</value> </constructor-arg> </bean> </jaxws:inInterceptors>

<
!--  发送报文拦截器,可以自定义发送出去报文的格式-->

<!-- <jaxws:outInterceptors> <bean class="com.thinkgem.jeesite.webservice.utils.ArtifactOutInterceptor"/> </jaxws:outInterceptors> --></jaxws:server></beans>

 

3.2soap协议的java代码

3.2.1接口

 

import javax.jws.WebMethod;
import javax.xml.ws.BindingType;
@BindingType("http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true")
public interface CustomerWebService {
	 @WebMethod
	 public String receive(String paramString1,String paramString2,String  paramString3);
}


3.2.2实现类

 

 

@WebService
public class CustomerWebServiceImpl implements CustomerWebService{

	@Autowired
	private CustomerDao customerDao;
	public String receive(String paramString1,String paramString2,String  data) {
	
	}


3.3客户端代码省略,推荐一款好用的工具soapui 工具 来测试    

最后我个人认为用restful风格来写webservice json来传递数据更为方便,不论是客户端还是服务端,soap协议的xml真的繁杂而落后,但两者都需要,赞我一个吧

demo资源下载:http://download.csdn.net/download/zhaofuqiangmycomm/10230174

 
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值