jaxrscxf的实现与集成.docx

上传人:b****1 文档编号:424756 上传时间:2022-10-10 格式:DOCX 页数:6 大小:18.18KB
下载 相关 举报
jaxrscxf的实现与集成.docx_第1页
第1页 / 共6页
jaxrscxf的实现与集成.docx_第2页
第2页 / 共6页
jaxrscxf的实现与集成.docx_第3页
第3页 / 共6页
jaxrscxf的实现与集成.docx_第4页
第4页 / 共6页
jaxrscxf的实现与集成.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

jaxrscxf的实现与集成.docx

《jaxrscxf的实现与集成.docx》由会员分享,可在线阅读,更多相关《jaxrscxf的实现与集成.docx(6页珍藏版)》请在冰豆网上搜索。

jaxrscxf的实现与集成.docx

jaxrscxf的实现与集成

jaxrscxf的实现与集成

依赖

本文基于cxf2.7.0,需要在前面的例子中加入对jaxrs的依赖:

Xml代码<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxrs</artifactId><version>2.7.0</version></dependency>

由于2.7.0是采用jax-rs2.0版本,即JSR339,默认会引入:

Java代码<dependency><groupId>javax.ws.rs</groupId><artifactId>javax.ws.rs-api</artifactId><version>2.0-m10</version></dependency>

当然对于之前的版本,基于jsr311。

需要在pom中手动加入:

1.0或1.1版本

Java代码<dependency><groupId>javax.ws.rs</groupId><artifactId>jsr311-api</artifactId><version>1.1.1</version></dependency>

整合

这里主要考虑一下几种整合方式,更多见这里

编程式发布server

在CXF中与JAX-WS一样,提供了JAXRSServerFactoryBean作为工厂服务类来编程式发布资源类

Java代码JAXRSServerFactoryBeansf=newJAXRSServerFactoryBean();//Bindoneormoreresourcessf.setResourceClasses(CustomerService.class,AnotherService.class);//JAX-RS默认是每个请求会实例,这样修改为单例sf.setResourceProvider(CustomerService.class,newSingletonResourceProvider(newCustomerService()));sf.setAddress("http:

//localhost:

9000/");BindingFactoryManagermanager=sf.getBus().getExtension(BindingFactoryManager.class);JAXRSBindingFactoryfactory=newJAXRSBindingFactory();factory.setBus(sf.getBus());manager.registerBindingFactory(JAXRSBindingFactory.JAXRS_BINDING_ID,factory);sf.create();

spring

当然这里说的与spring整合少不了与web容器的整合,首先需要在web.xml中添加CXF的servlet监听请求路径:

Xml代码<servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class><load-on-startup>5</load-on-startup></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>

下面介绍两种spring的配置,这也是通用的

jaxrs命名空间

这是一个最简单的配置:

Xml代码<?

xmlversion="1.0"encoding="UTF-8"?

><beansxmlns="http:

//www.springframework.org/schema/beans"xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"xmlns:

jaxrs="http:

//cxf.apache.org/jaxrs"xsi:

schemaLocation="http:

//www.springframework.org/schema/beanshttp:

//www.springframework.org/schema/beans/spring-beans.xsdhttp:

//cxf.apache.org/jaxrshttp:

//cxf.apache.org/schemas/jaxrs.xsd"><importresource="classpath:

META-INF/cxf/cxf.xml"/><importresource="classpath:

META-INF/cxf/cxf-servlet.xml"/><jaxrs:

serverid="customerService"address="/jaxrs"><jaxrs:

serviceBeans><refbean="restPathService1"/></jaxrs:

serviceBeans></jaxrs:

server><beanid="restPathService1"class="org.ws.server.cxf.chap3.cxf.server.CustomerService"/></beans>

当然在jaxrs:

server中可以加入其他节点,具体可参考http:

//cxf.apache.org/schemas/jaxrs.xsd

springbean

也可以使用普通的bean配置,只是需要作为JAXRSServerFactoryBean实例的属性:

Xml代码<?

xmlversion="1.0"encoding="UTF-8"?

><beansxmlns="http:

//www.springframework.org/schema/beans"xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"xsi:

schemaLocation="http:

//www.springframework.org/schema/beanshttp:

//www.springframework.org/schema/beans/spring-beans.xsd"><importresource="classpath:

META-INF/cxf/cxf.xml"/><importresource="classpath:

META-INF/cxf/cxf-servlet.xml"/><beanclass="org.apache.cxf.jaxrs.JAXRSServerFactoryBean"init-method="create"><propertyname="address"value="/jaxrs"/><property:

serviceBeans><refbean="restPathService1"/></property:

serviceBeans></bean><beanid="restPathService2"class="org.ws.server.cxf.chap3.cxf.server.AnotherService"/></beans>

数据绑定(DataBindings)

CXF对JAX-RS的数据绑定与之前的一样,需要选择相应的绑定类型,如需要加入JAXB对XML的处理:

Xml代码<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-databinding-jaxb</artifactId><version>${cxf.version}</version></dependency>

这也是CXF对JAX-RS的默认编码类型,因此我们在采用XML作为传输时只需要做简单的处理:

资源类中的一个方法:

Java代码@GET@Path("/meth1")@Produces({MediaType.APPLICATION_XML})publicUsermeth1(){returnnewUser(1,"robin","123");}

其中User作为返回需要以XML的格式传输,最简单的处理只需要在:

Java代码@XmlRootElement(name="user")publicclassUser{privateIntegerid;privateStringusername;privateStringpassword;

当然更多操作需要了解

再介绍对JSON格式的处理,由于CXF默认支持是依赖Jettison通常我们更喜欢Jackson。

所以,首先需要加入其依赖:

Java代码<dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-jaxrs</artifactId><version>1.9.0</version></dependency>

需要更换默认的JSONproviders为Jackson:

Xml代码<jaxrs:

providers><beanclass="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/></jaxrs:

providers>

Xml代码<jaxrs:

providers><beanclass="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/></jaxrs:

providers>

一个完整的例子:

资源类的方法声明:

Java代码@GET@Path("/meth2")@Produces({MediaType.APPLICATION_JSON})publicUsermeth2(){returnnewUser(1,"robin","123");}

spring配

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1