`

基于CXF的JAX-WS、JAX-RS(RESTful)的webService

 
阅读更多
原文链接:http://www.open-open.com/lib/view/open1328150536796.html

1、准备

这是一个最基本的基于CXF的Java项目
如果仅发布JAX-WS应用则需要以下jar文件 :
cxf-2.4.2.jar                                 这是CXF的核心包
 xmlschema-core-2.0.jar              这是解析XMLSchema的apache包
 neethi-3.0.1.jar                          apache的WebService策略包
 wsdl4j-1.6.2.jar                          wsdl文件生成包
 servlet-api.jar                            此包就不用多说了吧。。

jetty-util-7.4.5.v20110725.jar    //因为CXF使用内嵌的jetty服务器,以下都是jetty服务器包。
 jetty-server-7.4.5.v20110725.jar
 jetty-http-7.4.5.v20110725.jar
 jetty-io-7.4.5.v20110725.jar
 jetty-continuation-7.4.5.v20110725.jar




2、

如果需要使用JAX-RS发布RESTful的服务则再添加以下jar文件 :
jsr311-api-1.1.1.jar               /这是SUN公司发布的WebService的新标准,此JSR311包中包含了在类上应该添加什么注解如@Post
如果需要返回JSON类型的串则再需要加入
jettison-1.3.jar                   //
因为cxf是用此类解析JSON串的。

(对于一个jax-rs应用,第一个方法必须返回一个JavaBean,
  不能没有返回值,且类上必须使用@XmlRootElement注解)



(待续)



3、
CXF发布服务的类:



lJaxWsServerFactoryBean

•JaxWsServerFactoryBean用于发布一个服务,可以通过默认构造实例此类。

•它的方法如下:

•setServiceBean(Object) – 设置一个服务对象 - *

•setAddress(String url) – 绑定一个地址和端口 - *

•create()  -  在JavaSE环境下,使用jetty发布WebService. - *

•以下是可选方法 :

•setServiceClass(Class cls) – 设置服务对象实现的接口类。

lJaxRsServerFactoryBean

•此类用于发布RESTful风格的webService.

•RESTful风格是以普通get,post请求为标准的,并可以请求和响应json数据。



4、使用CXF发布一个服务





package cn.leaf.one; 

import javax.jws.WebService; 

import org.apache.cxf.jaxws.JaxWsServerFactoryBean; 

/** 

 * 使用CXF发布一个服务 

 * 必须要添加WebService注解。否则不会对外暴露任何一个方法 

 * @author 王健 

 */ 

@WebService 

public class OneService { 

public String sayHi(){      ///此方法将会对外公布

return "Good"; 

} 

public static void main(String[] args) throws Exception { 

JaxWsServerFactoryBean bean  //使用jaxWs对其进行发布 

  = new JaxWsServerFactoryBean(); 

bean.setServiceBean(new OneService()); 

bean.setServiceClass(OneService.class); 

bean.setAddress("http://localhost:4444/one"); 

bean.create(); //内部使用jetty服务器做为支持

System.err.println("服务启动成功。。"); 

//Thread.sleep(1000*60*60); 

//System.exit(0); 

} 

} 



5、获取上面的wsdl文件:http://localhost:4444/one?wsdl[color=red][/color]

6、使用wsimport或是wsdl2java生成客户端调用代码,略。

7、发布一个RESTful的webService


package cn.itcast.ws3; 

import java.util.ArrayList; 

import java.util.List; 

import javax.ws.rs.FormParam; 

import javax.ws.rs.GET; 

import javax.ws.rs.POST; 

import javax.ws.rs.Path; 

import javax.ws.rs.PathParam; 

import javax.ws.rs.Produces; 

import javax.ws.rs.core.MediaType; 


import org.apache.cxf.interceptor.LoggingInInterceptor; 

import org.apache.cxf.interceptor.LoggingOutInterceptor; 

import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; 

import cn.itcast.domain.User; 

/** 

 * 一个基于JAX-RS的服务 

 * JAX-RS是无状态的服务 

 * 注意,必须要在JavaBean上添加@XMLRootElemet注解 

 * 此项目启动成功以后,可以通过以下方式访问: 

[color=red] * http://localhost:9004/users?_wadl&_type=xml [/color]

 * 注意是_wadl&_type=xml 

 * 将返回一个如何调用RESTful ws的wsdl文件说明书 

 * @author 王健 

 * @version 1.0 2011-11-18 

 */ 

@Path(value="/users/") //声明uri路径 

@Produces(value={MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})//声明支持的类型 

public class UserServiceRS { 

private List<User> users = new ArrayList<User>(); 

public UserServiceRS(){ 

User u = new User(); 

u.setAge(90); 

u.setName("大家好"); 

users.add(u); 

} 

/** 

 * 以下代码,请在地址栏这样访问: 

 * http://localhost:9004/users/all/ 

 * 即会以XML形式显示所有用户信息 

 * @return 

 */ 

@GET 

@Path(value="/all/") 

public List<User> getUsers(){ 

System.err.println("调用了users方法"); 

return users; 

} 

/** 

 * 以下在地址栏输入: 

 * http://localhost:9004/users/save/Tom/34 

 * 其中:Tom为要保存的用户名,34为年龄 

 * 即会保存成功 

 */ 

@GET 

@Path(value="/save/{name}/{age}/") 

public User save(@PathParam("name")String name,@PathParam("age")String age){ 

User u = new User(); 

u.setAge(Integer.parseInt(age)); 

u.setName(name); 

System.err.println("保存成功"+u); 

users.add(u); 

return u; 

} 

/** 

 * 提供第二种保存方式 

 * 使用@FormParam方式设置接收表单的参数 

 * 通过HttpClient调用,并设置请求参数 

 */ 

@POST 

@Path(value="/add/") 

public User add(@FormParam("name")String name,@FormParam("age")String age){ 

User u = new User(); 

u.setAge(Integer.parseInt(age)); 

u.setName(name); 

System.err.println("使用POST保存成功"+u); 

users.add(u); 

return u; 

} 


public static void main(String[] args) { 

JAXRSServerFactoryBean bean = //声明JAXRS服务对象 

new JAXRSServerFactoryBean(); 

bean.setServiceBean(new UserServiceRS());//加载服务类 

bean.setAddress("http://localhost:9004/");//声明地址,注意只声明地址和端口即可 

bean.getInInterceptors().add(new LoggingInInterceptor()); 

bean.getOutInterceptors().add(new LoggingOutInterceptor()); 

bean.create();//启动 

System.err.println("JAX-RS启动成功...."); 

} 

} 


8、使用HttpClient调用RESTful的web服务:


package cn.itcast.ws3; 


import org.apache.commons.httpclient.HttpClient; 

import org.apache.commons.httpclient.methods.GetMethod; 

import org.apache.commons.httpclient.methods.PostMethod; 


/** 

 * 使用URLConnection调用RESTful的服务 

 * 此外建议使用httpClient读取,将会更快 

 * 使用urlConnection可能没有返回结果 

 * @author 王健 

 * @version 1.0 2011-11-18 

 */ 

public class UserRsClient { 

UserRsClient() throws Exception{ 

save2(); 

all(); 

} 

/** 

 * 查询所有信息 

 * @throws Exception 

 */ 

private void all() throws Exception{ 

GetMethod get = new GetMethod("http://localhost:9004/users/all"); 

get.setRequestHeader("accept","application/json"); 

HttpClient hc = new HttpClient(); 

hc.getParams().setContentCharset("UTF-8"); //设置编码 

int code = hc.executeMethod(get); 

System.err.println("返回的状态码:"+code); 

if(code==200){ 

String str = get.getResponseBodyAsString(); 

System.err.println("返回信息:\n"+str); 

} 

get.releaseConnection(); 

} 


/** 

 * 保存一条信息,仍然使用GET方式 

 */ 

private void save() throws Exception{ 

String name = "Jack";//因为是get类型,所以不能包含中文 

String age = "35"; 

String url = "http://localhost:9004/users/save/"+name+"/"+age; 

GetMethod get = new GetMethod(url); 

get.setRequestHeader("accept","application/json"); 

HttpClient hc = new HttpClient(); 

hc.getParams().setContentCharset("UTF-8"); //设置编码 

//.setRequestHeader("Content","text/html;charset=UTF-8"); 

int code = hc.executeMethod(get); 

System.err.println("返回的状态码是:"+code); 

if(code==200){ 

String str = get.getResponseBodyAsString(); 

System.err.println("返回的信息是:\n"+str); 

} 

get.releaseConnection(); 

} 


/** 

 * 以下使用POST方式 

 */ 

private void save2() throws Exception{ 

String name = "王健";//因为是get类型,所以不能包含中文 

String age = "35"; 

String url = "http://localhost:9004/users/add/"; 

PostMethod pm = new PostMethod(url); 

pm.setRequestHeader("accept","application/json"); 

pm.setRequestHeader("Encoding","UTF-8"); 

pm.setParameter("name",name); 

pm.setParameter("age",age); 

HttpClient hc = new HttpClient(); 

hc.getParams().setContentCharset("UTF-8");//设置编码,否则会返回中文乱码//TODO:切记 

int code = hc.executeMethod(pm); 

System.err.println("Post方式的返回值是:"+code); 

if(code==200){ 

String ss =  pm.getResponseBodyAsString(); 

System.err.println(">>:"+ss); 

} 

pm.releaseConnection(); 


} 


public static void main(String[] args) throws Exception { 

new UserRsClient(); 

} 

} 
分享到:
评论

相关推荐

    java_webservice_JAX-RS.zip_cxf_jax_jax-rs_spring cxf

    文件"java webservice CXF JAX-WS(SOAP) + JAX-RS(RESTfull).docx"可能包含了具体的示例代码和详细步骤,帮助理解如何在SSH环境中集成并使用CXF和JAX-RS。建议参考文档中的内容进行实践操作,以加深理解。 总的来说...

    JAX-WS_Java API for XML Web Services

    JAX-WS允许开发者使用Java编程语言来构建、部署和消费XML Web服务,它提供了基于WSDL(Web Services Description Language)的编程模型。 **一、JAX-WS的核心组件** 1. **SOAP绑定框架(SOAP Binding Framework)*...

    webservice-cxf-spring-jar.zip

    CXF支持JAX-WS和JAX-RS规范,提供了丰富的API和工具,使得开发Web服务变得简单。 2. **Spring框架**:Spring是一个强大的Java开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。Spring可以和CXF...

    apache-cxf-3.1.1跟3.1.6所有jar包

    3. **JAX-WS和JAX-RS支持**:CXF完全支持JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services),使开发者能轻松地创建和消费这两种类型的Web服务。 4. **数据绑定**:CXF支持...

    webservice实例 CXF的JAXWS和JAXRS实现 及JAXB标准接口实现带jar包

    CXF是一个流行的开源框架,用于创建和消费Web服务,支持多种协议和标准,如JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。同时,JAXB(Java Architecture for XML ...

    JAX-RS cxf web服务 rest简单增删改查 集成spring webService

    通过以上步骤,你可以构建一个基于JAX-RS CXF的RESTful Web服务,并与Spring框架集成,实现简单的CRUD操作。这个服务可以方便地与其他系统交互,提供数据访问接口,同时结合Spring的强大功能,使得服务更易于维护和...

    apache-cxf-2.2.6.zip webservice cxf开发利器完整开发包

    4. **JAX-RS支持**:CXF也支持Java API for RESTful Web Services (JAX-RS),使开发RESTful Web服务变得简单。通过使用注解,开发者可以直接将Java方法映射到HTTP请求,实现资源导向的编程模型。 5. **数据绑定**:...

    cxf-uw-ws-soap

    在"cxg-uw-ws-soap"这个主题中,我们主要关注的是CXF如何实现基于SOAP(Simple Object Access Protocol)的Web服务,并结合UWHK子文件进行讲解。 SOAP是一种标准的协议,用于交换结构化的、基于XML的数据。在Web...

    webservice apache-cxf-3.0.7 jar包

    5. **前端插件**:CXF提供了多种前端插件,如Spring、JAX-WS、JAX-RS等,使得服务的部署和集成更加便捷。 6. **客户端API**:CXF提供了强大的客户端API,可以方便地调用远程Web服务,支持同步和异步调用模式。 7. ...

    apache-cxf-2.7.6所有jar包

    JAX-RS用于构建RESTful服务,而JAX-WS则用于基于SOAP的Web服务。这个“apache-cxf-2.7.6所有jar包”包含了一系列的库文件,这些文件是CXF框架运行所必需的。 在描述中提到的"lib"目录,通常包含的是一系列的.jar...

    CXF学习-环境搭建

    - JAX-WS用于构建基于SOAP的Web服务,而JAX-RS则用于构建RESTful服务。 - CXF支持多种协议,如HTTP、HTTPS、JMS等,以及各种数据绑定机制,如XMLBeans、JAXB等。 2. **安装和配置** - 首先,你需要在你的开发...

    webService(基于cxf)的完整例子

    2. **JAX-WS和JAX-RS**:JAX-WS是用于构建SOAP Web服务的标准,而JAX-RS则用于构建RESTful服务。CXF支持这两种风格,允许开发人员根据需求选择合适的服务类型。 3. **创建Web服务**:在CXF中,可以通过注解或XML...

    webservice-cxf-2.3.5

    - **JAX-RS(Java API for RESTful Web Services)**:CXF 提供了对 JAX-RS 的全面支持,让开发者能够用注解轻松地创建 RESTful API。 - **HTTP 绑定**:CXF 支持多种 HTTP 方法(GET、POST、PUT、DELETE 等),并...

    cxf webservice所需jar包

    CXF提供了多种方式来实现Web服务,包括JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。在开发基于CXF的Web服务时,一个关键的步骤是确保正确地集成了所有必需的库文件,即...

    apache-cxf-3.1.6所有jar包

    1. **服务接口绑定**:CXF支持多种编程模型,如JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。JAX-WS允许开发者通过Java注解来定义SOAP服务,而JAX-RS则简化了RESTful...

    Webservice-CXF实用手册学习大全

    - JAX-RS:JAX-RS(Java API for RESTful Web Services)是用于开发REST(Representational State Transfer)风格的WebService规范,适合于基于HTTP的方法进行操作。 3. CXF框架集成: - Apache CXF是一个开源...

    cxf的jar包

    JAX-WS用于基于SOAP的Web服务,而JAX-RS则用于创建RESTful服务。 2. **cxf-rt-bindings-soap**: 提供了SOAP绑定支持,使得CXF能够处理SOAP消息,包括解析、序列化和异常处理。 3. **cxf-rt-bindings-xml**: 这个...

    java webservice 详细开发示例介绍

    ### Java WebService 详细开发示例介绍 ...JAX-WS适用于需要基于SOAP协议的传统服务,而JAX-RS则更适合现代的、RESTful风格的服务。选择合适的规范和技术栈对于构建高效稳定的分布式系统至关重要。

    基于CXF实现WebService开发.pdf

    基于CXF开发WebService时,开发者可以采用不同的前端API,如JAX-WS或CXF提供的简单前端。Apache CXF支持多种传输协议和服务绑定,包括SOAP/HTTP、RESTful HTTP、JMS和文件传输等。 在开发过程中,可以通过Maven项目...

    apache-cxf-3.1.0

    JAX-WS用于基于SOAP的Web服务,而JAX-RS则面向RESTful风格的服务。这两种技术的结合使CXF成为一个强大的工具,能够满足不同场景下的Web服务需求。 "CXF3.1"代表了CXF的一个特定版本。每个版本都可能包含新特性、...

Global site tag (gtag.js) - Google Analytics