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