在这里简单的说下CXF对REST的支持,先对REST概念说下。
REST 是一种软件架构模式,只是一种风格,不是像SOAP 那样本身承载着一种消息协议,也可以叫做REST 是基于HTTP协议的软件架构。
REST 中重要的两个概念就是资源定位和资源操作,而HTTP 协议恰好完整的提供了这两个要点,HTTP 协议中的URI 可以完成资源定位,GET、POST、OPTION等方法可以完成资源操作,因此REST 完全依赖HTTP 协议就可以完成Web 服务,而不像SOAP 协议那样只利用HTTP 的传输特性,定位与操作由SOAP 协议自身完成,也正是由于SOAP 消息的存在,使得SOAP 笨重。你也可以说REST 充分利用了HTTP 协议的特性,而不是像SOAP 那样只利用了其传输这一特性(事实上大多数人提到HTTP 协议就只会想到它能用于数据传输)。
REST 是一种软件架构理念,现在被移植到Web 服务上(因此不要提到REST 就马上想到WebService,JAX-RS 只是将REST 设计风格应用到Web 服务开发),那么在开发Web 服务上,偏于面向资源的服务适用于REST,偏于面向活动的服务。另外,REST 简单易用,效率高,SOAP 成熟度较高,安全性较好。REST 提供的网络服务叫做OpenAPI,它不仅把HTTP 作为传输协议,也作为处理数据的工具,可以说对HTTP 协议做了较好的诠释,充分体现了HTTP 技术的网络能力。目前Google、Amazon、淘宝都有基于REST 的OpenAPI 提供调用。
WebService中,JAX-RS 只是将REST 设计应用到Web 服务开发.JAX-RS提供对了REST的支持
我们先看看具体的例子
1、接口类
@Path("/rest_HelloWorld")
public interface Rest_HelloWorld {
@GET
@Produces (MediaType.TEXT_PLAIN)
@Path("/say/{name}")
public String say(@PathParam("name")String name);
@GET
@Produces (MediaType.TEXT_PLAIN)
@Path("/sayHello/{name}")
public String sayHello(@PathParam("user")User user);
@GET
@Produces ({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
@Path("/getList/{id}")
public List<User> getList(@PathParam("id")Long id);
}
CXF的Rest使用的JAX-RS规范。JAX-RS: Java API for RESTful Web Services是一个Java编程语言的应用程序接口,支持按照 表象化状态转变 (REST)架构风格创建Web服务Web服务. JAX-RS使用了Java SE 5引入的Java 标注来简化Web服务客户端和服务端的开发和部署。
JAX-RS提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源。标注包括:
(1)、@Path,标注资源类或方法的相对路径
(2)、@GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型
(3)、@Produces,标注返回的MIME媒体类型,( 注解标注,这个注解可以包含一组字符串,默认值是*/*,它指定REST 服务的响应结果的MIME 类型,例如:application/xml、application/json、image/jpeg 等),你 也可以同时返回多种类型,但具体生成结果时使用哪种格式取决于ContentType。CXF 默认返回的是JSON 字符串。
(4)、@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。
注意:前两章说的CXF与spring整合及 都是使用JAX-WS规范。JAX-WS规范是一组XML web services的JAVA API。jaxws 是配置SOAP 方式的Web 服务
Spring中引入了两个新的名称空间jaxws、jaxrs,因为CXF 实现了Spring 的NamespaceHandler 接口,实现这个接口可以在Spring 中增加额外的配置。那么jaxws 自然是配置SOAP 方式的Web 服务,你可以看到有jaxws:server、jaxws:endpoint、jaxws:client 三个元素,jaxws:server 和jaxws:endpoint 是等效的,都用于发布Web 服务,出现jaxws:endpoint 的原因是JAX-WS 规范中使用EndPoint 发布Web 服务(前面使用过这种
方式),CXF 为了和JAX-WS 对应,提供了这个与jaxws:server 功能一样的配置元素;
jaxrs是REST 方式的Web 服务,有jaxrs:server、jaxrs:client 两个元素。
2、接口实现类
@Service("rest_HelloWorldImpl")
public class Rest_HelloWorldImpl implements Rest_HelloWorld {
public String say(String name) {
return name+",您好!";
}
public String sayHello(User user) {
return user.getName()+",您好!";
}
public List<User> getList(Long id){
List<User> list = new ArrayList<User>();
Long sid=1L;
User user = new User(sid,"张三"+sid,21);
list.add(user);
sid=2L;
user = new User(sid,"张三"+sid,21);
list.add(user);
sid=3L;
user = new User(sid,"张三"+sid,21);
list.add(user);
return list;
}
}
3、CXF在Spring中的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.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">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="inMessageInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" />
<bean id="outMessageInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<!--id:名称(随意配),implementor:指定接口具体实现类,address:随意配-->
<jaxws:endpoint id="helloWorld" implementor="#HelloWorldImpl" address="/HelloWorld" >
<!-- 输入日志拦截器 -->
<jaxws:inInterceptors>
<ref bean="inMessageInterceptor"/>
</jaxws:inInterceptors>
<!-- 输出日志拦截器 -->
<jaxws:outInterceptors>
<ref bean="outMessageInterceptor"/>
</jaxws:outInterceptors>
<jaxws:properties>
<entry key="mtom_enabled" value="true"></entry>
</jaxws:properties>
</jaxws:endpoint>
<jaxrs:server id="rest_HelloWorld" address="/">
<jaxrs:inInterceptors>
<ref bean="inMessageInterceptor"/>
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<ref bean="outMessageInterceptor"/>
</jaxrs:outInterceptors>
<jaxrs:serviceBeans>
<ref bean="rest_HelloWorldImpl" />
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</jaxrs:extensionMappings>
<jaxrs:languageMappings>
<entry key="en" value="en-gb" />
</jaxrs:languageMappings>
</jaxrs:server>
<!-- WebService 客户端 spring 配置文件cxf与Spring集成,cxf里提供了一个工厂类org.apache.cxf.jaxws.JaxWsProxyFactoryBean,
可以方便实现的调用WebService。serviceClass属性是接口类,address是webService的路径在其他bean里如果要调用webservice,
只要将client这个bean注入到需要使用的bean里。-->
<bean id="client" class="com.exp.service.outer.HelloWorld" factory-bean="clientFactory" factory-method="create" />
<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="com.exp.service.outer.HelloWorld" />
<property name="address" value="http://localhost:8080/demo/webservice/HelloWorld" />
</bean>
</beans>
注意:以下代码是新增加代码
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
<jaxrs:server id="rest_HelloWorld" address="/">
<jaxrs:inInterceptors>
<ref bean="inMessageInterceptor"/>
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<ref bean="outMessageInterceptor"/>
</jaxrs:outInterceptors>
<jaxrs:serviceBeans>
<ref bean="rest_HelloWorldImpl" />
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</jaxrs:extensionMappings>
<jaxrs:languageMappings>
<entry key="en" value="en-gb" />
</jaxrs:languageMappings>
</jaxrs:server>
4、访问
http://localhost:8080/demo/webservice/rest_HelloWorld/getList/1
返回JSON格式: http://localhost:8080/demo/webservice/rest_HelloWorld/getList/1?_type=json
返回XML格式: http://localhost:8080/demo/webservice/rest_HelloWorld/getList/1?_type=xml
得到结果
<Users>
<User>
<id>1</id>
<name>张三1</name>
<age>21</age>
</User>
<User>
<id>2</id>
<name>张三2</name>
<age>21</age>
</User>
<User>
<id>3</id>
<name>张三3</name>
<age>21</age>
</User>
</Users>
使用CXF的rest还需要额外增加一个Jar:jsr311-api-1.1.1.jar
为了支持返回JSON格式,还需要jettison-1.1.jar
分享到:
相关推荐
【标题】"CXF开发REST风格接口所需的最小JAR包" 在Java开发中,Apache CXF是一个广泛使用的开源服务框架,它支持Web服务(SOAP)和RESTful接口的创建。REST(Representational State Transfer)风格的接口已经成为...
【标题】"java cxf规范rest"涉及到的是Java开发中使用Apache CXF框架实现RESTful服务的相关技术。CXF是一个开源的服务框架,它允许开发者创建和消费各种Web服务,包括基于JAX-WS和JAX-RS的标准。REST...
【Spring CXF REST Demo】项目是一个使用Maven构建的Java应用程序,它展示了如何将Spring框架与Apache CXF集成,以创建RESTful风格的服务。在这个项目中,开发者可以学习到如何利用CXF作为服务端的REST服务提供者,...
Apache CXF是一个流行的开源框架,它提供了强大的支持来构建RESTful Web服务。下面将详细讲解如何使用CXF搭建RESTful风格的Web服务。 1. **CXF简介** Apache CXF是一个全面的服务开发框架,它允许开发者创建和部署...
REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,常用于构建现代Web服务。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析...
REST(Representational State Transfer)是一种软件架构风格,常用于构建现代Web服务,强调简洁、无状态和基于标准的接口设计。 首先,让我们了解REST的基本原则。RESTful API通常基于HTTP协议,通过GET、POST、...
Apache CXF是一个开源项目,提供了全面的服务框架,支持多种协议,如SOAP、XML-RPC、REST等。它拥有强大的数据绑定和转换功能,支持JAXB、JSON、XMLBeans等多种数据格式。 #### 三、搭建REST服务环境 为了更好地...
CXF提供了强大的支持来创建RESTful Web服务,使得开发人员能够方便地实现文件下载功能。 【描述】:“CXF REST Web服务实现文件下载” 在CXF中实现RESTful Web服务进行文件下载,主要涉及到以下几个关键步骤: 1....
CXF同样支持REST服务的开发,你可以使用JAX-RS(Java API for RESTful Web Services)规范来实现。例如,通过使用@Path、@GET、@POST等注解,你可以指定资源路径、HTTP方法以及处理这些请求的方法。 为了将CXF与...
Apache CXF不仅支持传统的SOAP Web服务,也支持RESTful风格的服务。使用CXF开发RESTful服务,我们可以利用JAX-RS(Java API for RESTful Web Services)规范,它是Java平台上的RESTful服务开发标准。 **三、CXF与...
"SPRING-MVC-MQ-CXF-REST_Demo"这个项目很可能是用来演示如何在同一个应用中整合Spring MVC、MQ、CXF和REST技术。项目可能包含了以下部分: 1. Spring MVC配置:展示了如何设置DispatcherServlet、视图解析器以及...
它支持多种协议和服务风格,包括 SOAP 和 REST。在本篇中,我们将探讨如何使用 CXF 开发 RESTful Web 服务,以及如何与 Spring 框架集成。 **RESTful Web 服务基础** REST(Representational State Transfer)是一...
在本文中,我们将探讨三种常用的技术:REST、Hessian和CXF,它们都可以用来实现Web服务,尤其是当我们使用Maven作为构建工具时。 首先,REST(Representational State Transfer,表述性状态转移)是一种基于HTTP...
2. **RESTful支持**:CXF也支持REST(Representational State Transfer)风格的Web服务。通过JAX-RS(Java API for RESTful Web Services)规范,开发者可以轻松地创建资源驱动的API。 3. **互操作性**:CXF致力于...
它支持SOAP、RESTful等多种Web服务规范,使得开发者能够灵活地选择适合项目需求的服务风格。CXF提供了丰富的API和工具,简化了Web服务的开发过程。 首先,我们来看SOAP协议。SOAP是一种基于XML的消息传递协议,用于...
4. **RESTful服务**:CXF同样支持RESTful风格的服务,通过JAX-RS(Java API for RESTful Web Services)规范。开发者可以通过简单的注解来定义资源类和方法,从而创建REST API。 5. **服务部署与测试**:讲述如何将...
对于RESTful风格的Web服务,CXF提供了一种称为JAX-RS(Java API for RESTful Web Services)的API支持。JAX-RS定义了如何在Java类和方法上使用注解来声明资源路径、HTTP方法和消息体。在CXF中,我们可以使用`@Path`...
2. **RESTful服务**:除了传统的SOAP服务,CXF也支持Representational State Transfer(REST)风格的应用程序开发,这使得开发更加轻量级和灵活。 3. **JAX-RS集成**:CXF提供了对Java API for RESTful Web ...
2. **SOAP与REST支持**:CXF可以处理SOAP消息,同时支持RESTful风格的服务,这意味着你可以构建既支持SOAP又支持REST的应用程序,提供了灵活性。 3. **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding...
除了传统的SOAP服务,CXF也支持RESTful风格的服务。使用CXF,开发者可以轻松地创建符合REST原则的HTTP服务,支持JSON和XML等多种数据格式。CXF的JAX-RS(Java API for RESTful Web Services)实现使得REST服务的开发...