CXF简介
- CXF是Apache社区的一个java实现webservice的框架
- CXF提供了两种独立的实现webservice的方式
- JAX-WS : 基于SOAP协议,传输XML数据
- JAX-RS : 基于HTTP协议,遵守restful风格,支持xml,json等http支持的数据
- webservice也是一种service,基本的代码和以前的service没有差别
- webservice的整体分为两个部分: 服务器和客户端
- webservice的服务器端,一定要是一个web应用。
JAX-RS服务
restful风格
JAX-RS服务的使用(服务器端的发布)
用于webservice数据传输的javabean对象,要添加注解 @XmlRootElement(name = “User”)
service接口注解
接口注解
@Path(“/userService”) 请求的路径,可选
@Produces(“/“) 当前webservice支持的数据类型,可选
方法注解
restful风格,请求的方式。必须
- @POST
- @GET
- @PUT
- @DELETE
@Path(“/user”) 请求的路径,必须
@Consumes({ “application/xml”, “application/json” }) 只要方法带参数
@Produces({ “application/xml”, “application/json” }) 只要方法带返回值
结论: 只要是webservice的方法,都加上上述两个注解,就可以
接收path的参数的注解
@PathParam(“id”) 接收客户端传递的path参数,方法的参数中
@Path(“/user/{id}”) 定义path参数的名称
调用的时候:http://127.0.0.1:8080/userService/user/1
RS服务的调用
导入rs-client的依赖
WebClient 类来调用RS服务
create 参数就是请求的webservice的url
type 发送给服务器数据格式 — @Consumes
accept 接收服务器传输数据格式 —- @Produces
通过http请求方式发生请求
//查询方法,返回的是list集合 Collection<? extends User> collection = WebClient // 请求的url .create("http://localhost:9997/userService/user") // 接收的webservice方法返回数据的类型(服务器必须支持) .accept(MediaType.APPLICATION_XML) // 通过get请求,想获取对象的集合 .getCollection(User.class); User user = WebClient .create("http://localhost:9997/userService/user") .accept(MediaType.APPLICATION_XML) .get(User.class); //保存 WebClient.create("http://localhost:9997/userService/user") .type(MediaType.APPLICATION_JSON).post(user); //修改 WebClient.create("http://localhost:9997/userService/user") .type(MediaType.APPLICATION_JSON).put(user); // 删除用户 WebClient.create("http://localhost:9997/userService/user/1") // 向webservice的方法发送参数的数据类型 .type(MediaType.APPLICATION_JSON).delete();
如果要使用JSON作为rs服务的数据传输格式,必须依赖
<!-- 在CXF扩展提供者,提供转换json接口 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-extension-providers</artifactId> <version>3.0.1</version> </dependency> <!-- cxf 扩展提供者 转换json 默认需求一个工具包 --> <dependency> <groupId>org.codehaus.jettison</groupId> <artifactId>jettison</artifactId> <version>1.3.7</version> </dependency>
spring整合RS服务
代码的编写和注解的使用和单独使用RS服务完全一致
配置
web.xml
<!-- spring配置文件位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- spring核心监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- CXF在web应用中的处理的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>/services/*</url-pattern> </servlet-mapping>
注意: 一旦配置了CXFServlet就必须要有RS服务,不然项目启动报错,缺少一个cxf放入bean.
application.xml
引入名称空间 xmlns:jaxrs="http://cxf.apache.org/jaxrs" <!-- address 发布服务地址 servicesBeans 服务实现类 --> <jaxrs:server id="userService" address="/userService" > <jaxrs:serviceBeans> <!-- 配置具体的实现类 --> <bean class="cn.itcast.cxf.service.UserServiceImpl" /> </jaxrs:serviceBeans> <!-- 添加调用的日志拦截器,在开发阶段建议配置 --> <jaxrs:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" /> </jaxrs:inInterceptors> <jaxrs:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> </jaxrs:outInterceptors> </jaxrs:server>
spring整合的rs服务的请求路径
http://ip:port/projectName/servletUrl/springAddress/接口Path/方法Pathhttp://localhost:9996/cxf_rs_spring/cxf_rs_spring/userService/userService/user
一个spring整合的JAX-RS服务的创建过程
- 创建maven工程,添加依赖。
- 先写JavaBean,添加对应的注解
- 再写 Service,Dao的代码,正常编写,再Service接口中,添加对应的注解
- 配置web.xml listener,servlet(复制)
- 配置application.xml,发布webservice
CXF(服务框架)的使用
最新推荐文章于 2024-07-28 15:40:39 发布