- 浏览: 157894 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (130)
- Database (5)
- JavaSE (23)
- JavaScript (11)
- Struts2 (15)
- Hibernate (11)
- Spring (16)
- Linux (4)
- Jquery (3)
- Tools (12)
- Jsp (7)
- 杂谈 (9)
- WEB Project (10)
- WebService (16)
- maven (2)
- android (1)
- memcache (2)
- 网络通信 (4)
- solr (1)
- cxf (7)
- powerdesigner (1)
- jxls (1)
- springmvc (1)
- nosql (1)
- node.js (0)
- thrift (0)
- REST (1)
- tag (1)
最新评论
原文链接:http://www.open-open.com/lib/view/open1328150536796.html
1、准备
这是一个最基本的基于CXF的Java项目
如果仅发布JAX-WS应用则需要以下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发布一个服务
5、获取上面的wsdl文件:http://localhost:4444/one?wsdl[color=red][/color]
6、使用wsimport或是wsdl2java生成客户端调用代码,略。
7、发布一个RESTful的webService
8、使用HttpClient调用RESTful的web服务:
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(); } }
发表评论
-
RESTFUL实现主流框架 CXF、Restlet、RESTEasy、Jersey对比
2013-10-21 10:37 1517http://blog.csdn.net/jianxuan/ ... -
CXF-RESTFUL 入参是复合对象的使用方法
2012-12-18 18:31 1119java 开发CXF-RESTFUL,在服务端的入参如果比 ... -
CXF-WebClient客户端调用,配置JacksonProvider转换器的方法
2012-12-17 11:31 2809java语言调用cxf-rest服务,可以通过CXF-WebC ... -
远程通信技术实现原理(RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS)
2012-12-10 15:16 840在分布式服务框架中, ... -
HTTP Keep-Alive详解
2012-12-07 10:15 828HTTP Keep Alive HTTP Keep-Alive ... -
关于“无状态的HTTP连接提供有状态的连接"
2012-12-07 09:58 1257HTTP是无状态链接,请求 ... -
cxf-rest 配置JSonProvider 来定制JSON的转换格式
2012-12-06 17:08 1418关于CXF JSonProvider CXF通过JSonPro ... -
myeclipse 开发webservice 方法
2012-06-14 18:33 660见附件::: -
Web service框架 ---Axis1,Axis2,Xfire,CXF区别
2012-06-13 18:36 1291原文地址:http://494078416.iteye.com ... -
JAVA中的Web服务规范:jax-ws|jax-rs|jaxm
2012-06-13 17:13 1304JAVA 中共有三种WebService 规范,分别是JAXM ... -
主题:Web Service实践之——开始XFire
2012-06-13 16:29 640原文链接: http://www.ite ... -
java 调用webservice的各种方法总结
2012-06-13 16:13 893原文链接:http://www.blogjava.n ... -
修改cxf rest的返回时间格式
2011-09-19 18:19 937参考:http://stackoverflow.com/que ... -
CXF与spring集成
2010-12-06 12:58 917原文链接:http://blog.csdn.net/pengc ... -
使用 JAX-RS 简化 REST 应用开发
2010-12-06 12:56 1368<!-- Related_Searches_Area_A ... -
xfire webservices图文介绍详细步骤(附源码)<转>
2010-03-25 09:32 1006http://www.iteye.com/topic/6218 ...
相关推荐
文件"java webservice CXF JAX-WS(SOAP) + JAX-RS(RESTfull).docx"可能包含了具体的示例代码和详细步骤,帮助理解如何在SSH环境中集成并使用CXF和JAX-RS。建议参考文档中的内容进行实践操作,以加深理解。 总的来说...
JAX-WS允许开发者使用Java编程语言来构建、部署和消费XML Web服务,它提供了基于WSDL(Web Services Description Language)的编程模型。 **一、JAX-WS的核心组件** 1. **SOAP绑定框架(SOAP Binding Framework)*...
CXF支持JAX-WS和JAX-RS规范,提供了丰富的API和工具,使得开发Web服务变得简单。 2. **Spring框架**:Spring是一个强大的Java开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。Spring可以和CXF...
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支持...
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的RESTful Web服务,并与Spring框架集成,实现简单的CRUD操作。这个服务可以方便地与其他系统交互,提供数据访问接口,同时结合Spring的强大功能,使得服务更易于维护和...
4. **JAX-RS支持**:CXF也支持Java API for RESTful Web Services (JAX-RS),使开发RESTful Web服务变得简单。通过使用注解,开发者可以直接将Java方法映射到HTTP请求,实现资源导向的编程模型。 5. **数据绑定**:...
在"cxg-uw-ws-soap"这个主题中,我们主要关注的是CXF如何实现基于SOAP(Simple Object Access Protocol)的Web服务,并结合UWHK子文件进行讲解。 SOAP是一种标准的协议,用于交换结构化的、基于XML的数据。在Web...
5. **前端插件**:CXF提供了多种前端插件,如Spring、JAX-WS、JAX-RS等,使得服务的部署和集成更加便捷。 6. **客户端API**:CXF提供了强大的客户端API,可以方便地调用远程Web服务,支持同步和异步调用模式。 7. ...
JAX-RS用于构建RESTful服务,而JAX-WS则用于基于SOAP的Web服务。这个“apache-cxf-2.7.6所有jar包”包含了一系列的库文件,这些文件是CXF框架运行所必需的。 在描述中提到的"lib"目录,通常包含的是一系列的.jar...
- JAX-WS用于构建基于SOAP的Web服务,而JAX-RS则用于构建RESTful服务。 - CXF支持多种协议,如HTTP、HTTPS、JMS等,以及各种数据绑定机制,如XMLBeans、JAXB等。 2. **安装和配置** - 首先,你需要在你的开发...
2. **JAX-WS和JAX-RS**:JAX-WS是用于构建SOAP Web服务的标准,而JAX-RS则用于构建RESTful服务。CXF支持这两种风格,允许开发人员根据需求选择合适的服务类型。 3. **创建Web服务**:在CXF中,可以通过注解或XML...
- **JAX-RS(Java API for RESTful Web Services)**:CXF 提供了对 JAX-RS 的全面支持,让开发者能够用注解轻松地创建 RESTful API。 - **HTTP 绑定**:CXF 支持多种 HTTP 方法(GET、POST、PUT、DELETE 等),并...
CXF提供了多种方式来实现Web服务,包括JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。在开发基于CXF的Web服务时,一个关键的步骤是确保正确地集成了所有必需的库文件,即...
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...
- JAX-RS:JAX-RS(Java API for RESTful Web Services)是用于开发REST(Representational State Transfer)风格的WebService规范,适合于基于HTTP的方法进行操作。 3. CXF框架集成: - Apache CXF是一个开源...
JAX-WS用于基于SOAP的Web服务,而JAX-RS则用于创建RESTful服务。 2. **cxf-rt-bindings-soap**: 提供了SOAP绑定支持,使得CXF能够处理SOAP消息,包括解析、序列化和异常处理。 3. **cxf-rt-bindings-xml**: 这个...
### Java WebService 详细开发示例介绍 ...JAX-WS适用于需要基于SOAP协议的传统服务,而JAX-RS则更适合现代的、RESTful风格的服务。选择合适的规范和技术栈对于构建高效稳定的分布式系统至关重要。
基于CXF开发WebService时,开发者可以采用不同的前端API,如JAX-WS或CXF提供的简单前端。Apache CXF支持多种传输协议和服务绑定,包括SOAP/HTTP、RESTful HTTP、JMS和文件传输等。 在开发过程中,可以通过Maven项目...
JAX-WS用于基于SOAP的Web服务,而JAX-RS则面向RESTful风格的服务。这两种技术的结合使CXF成为一个强大的工具,能够满足不同场景下的Web服务需求。 "CXF3.1"代表了CXF的一个特定版本。每个版本都可能包含新特性、...