WebService CXF 使用入门
很多个系统,进行分布的部署,分布的系统数据通信 解决技术就是 WebService
CXF WebService 开发,主要分为两种服务提供方式 WS 、RS
JAX-WS 传输数据,就是 XML 格式,基于 SOAP 协议
JAX-RS 传输数据,传输 XML 格式或者 JSON 格式,基于 HTTP 协议
JAX-RS
RS好处:基于HTTP协议,支持多种消息格式,比如XML,JSON
更易于实现缓存机制(第一次访问资源,缓存,第二次访问资源,放回304客户端本地)
POST请求方式访问 保存操作
PUT请求方法访问 修改操作
GET请求方式访问 查询操作
DELETE请求方式访问 删除操作
不带参数查询:
@GET @Path("/user") @Produces({"application/xml","application/json"}) public List<User> findAllUsers();
带参数查询:
@GET @Path("/user/{id}") @Consumer("application/xml") public User findUserById(@PathParam("id") Integer id);
@Path 服务访问资源路径
@Produces 生成(方法返回值) @Consumes 消费 (方法参数)
@Consumes 指定能够处理客户端传递过来数据格式
@Produces 指定能否生成哪种格式数据返回给客户端
JAX-RS整合spring
导入maven坐标
<!-- CXF进行开发必须导入--> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.0.1</version> </dependency> <!--客户端需要的坐标--> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-client</artifactId> <version>3.0.1</version> </dependency> <!--扩展JSON--> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-extension-providers</artifactId> <version>3.0.1</version> </dependency> <!--转换json工具包,被扩展json依赖--> <dependency> <groupId>org.codehaus.jettison</groupId> <artifactId>jettison</artifactId> <version>1.3.7</version> </dependency>
省略spring的基本坐标
在web.xml文件中配置servlet
<!-- CXF Servlet --> <servlet> <servlet-name>CXFService</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFService</servlet-name> <url-pattern>/service/*</url-pattern> </servlet-mapping>
引入名称空间
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
创建applicationContext-WebService.xml文件
applicationContext-WebService.xml配置模板
<jaxrs:server id="userService" address="/userService"> <jaxrs:serviceBeans> <bean class="com.learn.web.service.base.impl.UserServiceImpl" /> </jaxrs:serviceBeans> <jaxrs:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> </jaxrs:inInterceptors> <jaxrs:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> </jaxrs:outInterceptors> </jaxrs:server>
最终访问资源服务路径
服务器根目录地址 + web.xml 配置 + applicationContext-WebService.xml address 配置 + 类 @Path +
方法 @Path
被传输的实体类需要加上@XmlRootElement,代表这个实体类能在web-service
例如
@XmlRootElement(name = "customer") public class Customer {