Apache cxf 学习笔记.docx
- 文档编号:6824882
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:13
- 大小:71.96KB
Apache cxf 学习笔记.docx
《Apache cxf 学习笔记.docx》由会员分享,可在线阅读,更多相关《Apache cxf 学习笔记.docx(13页珍藏版)》请在冰豆网上搜索。
Apachecxf学习笔记
学习笔记
(仅供内部使用)
修订记录
日期
修订版本
修改章节
修改描述
作者
2011-06-20
1.00
初稿完成
易华军
目录
1CXF简介4
1.1CXF概述4
1.2CXF支持4
1.2.1协议标准4
1.2.2传输方式4
1.3CXF特点5
1.3.1灵活部署5
1.3.2支持多种编程语言5
1.3.3代码生成6
1.4CXF环境要求6
2实践讲解6
2.1CXF开发例子6
2.1.1步骤图6
2.1.2步骤详解8
2.2CXF与Spring集成例子11
2.2.1步骤图11
2.2.2步骤详解13
3附录16
3.1cxf如何生成客户端16
3.2cxf会用到的注解(还未完善)17
导语:
该文档主要讲解CXF的实践例子,包括纯CXF和Spring集成的两个例子。
理论方面的知识还有待各位的完善。
1CXF简介
本章主要简介CXF的理论知识。
1.1CXF概述
CXF是Celtix+Xfire的结合体,ApacheCXF的前身叫ApacheCeltiXfire,现在已经正式更名为ApacheCXF了。
CXF继承了Celtix和XFire两大开源项目的精华,提供了对JAX-WS全面的支持,并且提供了多种Binding、DataBinding、Transport以及各种Format的支持,并且可以根据实际项目的需要,采用代码优先(CodeFirst)或者WSDL优先(WSDLFirst)来轻松地实现WebServices的发布和使用。
ApacheCXF已经是一个正式的Apache顶级项目。
1.2CXF支持
1.2.1协议标准
CXF支持多种协议标准:
JAX-WS、JAX-WSA、JSR-181和SAAJ;支持SOAP1.1、1.2、WS-IBasicProfile、WS-Security、WS-Addressing、WS-RM和WS-Policy;支持WSDL1.1、2.0;支持MTOM;
1.2.2传输方式
CXF支持多种协议传输方式:
Bindings:
SOAP、REST/HTTP;
DataBndings:
目前支持JAXB2.0、Aegis两种,默认是JAXB2.0。
XMLBeans、Castor和JiBX数据绑定方式将在CXF2.1版本中得到支持;
格式(Format):
XML、JSON;
传输方式:
HTTP、Servlet、JMS和Jabber;
可扩展API:
允许为CXF增加其它的Bindings,以能够支持其它的消息格式,比如:
CSV和固定记录长度。
1.3CXF特点
1.3.1灵活部署
轻量级容器:
可在Tomcat或基于Spring的容器中部署Services;集成JBI:
可以在如ServiceMix,OpenESBorPetals等等的JBI容器中将它部署为一个服务引擎;集成SCA:
可以部署在如Tuscany之类的SCA容器中;集成J2EE:
可以在J2EE应用服务器中部署Services,比如:
Geronimo、JOnAS、JBoss、WebSphereApplicationServer和WebLogicApplicationServer,以及Jetty和Tomcat;独立的Java客户端/服务器。
1.3.2支持多种编程语言
全面支持JAX-WS2.0客户端/服务器编程模型;支持JAX-WS2.0synchronous、asynchronous和one-wayAPI's;支持JAX-WS2.0DynamicInvocationInterface(DII)API;支持wrappedandnon-wrapped风格;支持XMLmessagingAPI;支持JavaScript和ECMAScript4XML(E4X),客户端与服务端均支持;通过Yoko支持CORBA;通过Tuscany支持SCA;通过ServiceMix支持JBI;
1.3.3代码生成
JavatoWSDL;WSDLtoJava;XSDtoWSDL;WSDLtoXML;WSDLtoSOAP;WSDLtoService;
1.4CXF环境要求
CXF框架是一种基于Servlet技术的SOA应用开发框架,要正常运行CXF,除了CXF框架本身之外,还需要JDK和Servlet容器的支持。
2实践讲解
本章讲解使用CXF框架发布WebServices服务的两个例子。
2.1CXF开发例子
讲解使用CXF框架发布WebServices的例子。
2.1.1步骤图
2.1.2步骤详解
下载CXF最新发布包
下载地址
http:
//cxf.apache.org/download.html
创建一个Web工程
引入CXFjar包
把前面下载的CXF包解压,进入lib目录。
把所有jar包拷贝到刚创建的Web工程的lib目录。
配置CXFServlet
打开web.xml配置CXF的接入Servlet。
样例如下:
编写待发布的接口
下面编写一个简单的登录接口。
样例如下:
importjavax.jws.WebService;
@WebService
publicinterfaceLogin{
Stringlogin(Stringname,Stringpassword);
}
编写接口的实现类
样例如下:
importjavax.jws.WebService;
@WebService(endpointInterface="com.test.service.cxf.Login",serviceName="Login")
publicclassLoginImplimplementsLogin{
publicStringlogin(Stringname,Stringpassword){
Stringresult="登录CXF服务端成功!
";
if(!
"cxf".equalsIgnoreCase(name)||!
"cxf".equalsIgnoreCase(password)){
result="用户名或密码不正确,请重新登录!
";
}
returnresult;
}
}
编写发布服务类
样例如下:
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importorg.apache.cxf.jaxws.JaxWsServerFactoryBean;
publicclassInitServletextendsHttpServlet{
@Override
publicvoidinit()throwsServletException{
LoginImplloginImpl=newLoginImpl();
JaxWsServerFactoryBeanjwpFactory=newJaxWsServerFactoryBean();
jwpFactory.setAddress("/Login");
jwpFactory.setServiceClass(LoginImpl.class);
jwpFactory.setServiceBean(loginImpl);
jwpFactory.create();
}
}
配置启动发布服务类
前面我们把发布服务的类实现在一个Servlet里,所以把该类配置到web.xml里这样启动工程时就会发布WebServices。
样例如下:
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importorg.apache.cxf.jaxws.JaxWsServerFactoryBean;
publicclassInitServletextendsHttpServlet{
@Override
publicvoidinit()throwsServletException{
LoginImplloginImpl=newLoginImpl();
JaxWsServerFactoryBeanjwpFactory=newJaxWsServerFactoryBean();
jwpFactory.setAddress("/Login");
jwpFactory.setServiceClass(LoginImpl.class);
jwpFactory.setServiceBean(loginImpl);
jwpFactory.create();
}
}
发布工程并启动
获取发布的WSDL
访问发布的工程再拼加上CXF监听路径。
如:
http:
//localhost:
8080/StudyCXF/cxftest/Login?
wsdl
生成客户端代码
查看附录3.1如何生成客户端代码。
然后把生成的客户端代码放到客户端工程。
提示:
从生成的客户端代码中会有很多实际上我们用不到的源文件,可根据实际情况进行清理,这里只需要Login.java。
编写客户端调用代码
客户端一般是其它的系统,这里只讲解客户端在调用服务端的代码编写。
样例如下:
importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean;
publicclassCXFClient{
publicstaticvoidmain(String[]args){
JaxWsProxyFactoryBeanjwpFactory=newJaxWsProxyFactoryBean();
jwpFactory
.setAddress("http:
//localhost:
8080/StudyCXF/cxftest/Login?
wsdl");
jwpFactory.setServiceClass(Login.class);
Loginlogin=(Login)jwpFactory.create();
Stringresult=login.login("cxf","cxf");
System.out.println("登录结果:
"+result);
}
}
2.2CXF与Spring集成例子
讲解CXF与Spring集成发布WebServices的例子。
2.2.1步骤图
2.2.2步骤详解
下载CXF最新发布包
下载地址
http:
//cxf.apache.org/download.html
创建一个Web工程
引入CXFjar包
把前面下载的CXF包解压,进入lib目录。
把所有jar包拷贝到刚创建的Web工程的lib目录。
配置web.xml
打开web.xml配置CXF的接入Servlet,和Spring的接入Listener。
样例如下:
提示:
beans.xml是Spring的配置文件,请根据实际情况配置所在路径。
后面配置服务端是在该文件里配置。
编写待发布的接口
下面编写一个简单的订单接口。
样例如下:
importjavax.jws.WebParam;
importjavax.jws.WebService;
@WebService
publicinterfaceOrderProcess{
StringprocessOrder(@WebParam(name="Order")Orderorder);
}
提示:
更多的注解描述请查看附录3.2。
编写接口的实现类
样例如下:
importjavax.jws.WebService;
@WebService(endpointInterface="com.test.service.spring",serviceName="OrderProcess")
publicclassOrderProcessImplimplementsOrderProcess{
publicStringprocessOrder(Orderorder){
StringuserName=order.getUserName();
returnuserName+"您好:
订单处理成功,生成的订单号是:
88888888";
}
}
提示:
更多的注解描述请查看附录3.2。
配置服务端
编辑beans.xml文件,配置服务端接口类。
样例如下:
--
endpointid="orderProcess" implementor="com.test.service.spring.OrderProcessImpl" address="/OrderProcess"/> --> serverid="test"address="/OrderProcess"> serviceBean> serviceBean> server> 提示: 这里给出二种发布服务端接口的方式,随便哪一种都可以 发布工程并启动 获取发布的WSDL 访问发布的工程再拼加上CXF监听路径。 如: http: //localhost: 8080/StudyCXFSpring/cxftest/OrderProcess? wsdl 生成客户端代码 查看附录3.1如何生成客户端代码。 然后把生成的客户端代码放到客户端工程。 客户端工程应该也是一个引入了CXF集成Spring包的工程,创建步骤同服务端工程。 提示: 从生成的客户端代码中会有很多实际上我们用不到的源文件,可根据实际情况进行清理,这里只需要Order.java,OrderProcess.java 配置客户端 在客户端工程中找到Spring的配置文件并配置如下内容。 样例如下: factory-bean="clientFactory"factory-method="create"/> value="http: //localhost: 8080/StudyCXFSpring/cxftest/OrderProcess"> 编写客户端调用代码 客户端一般是其它的系统,这里只讲解客户端在调用服务端的代码编写。 样例如下: importorg.springframework.context.support.FileSystemXmlApplicationContext; publicclassCXFClient{ publicstaticvoidmain(String[]args){ FileSystemXmlApplicationContextcontext=newFileSystemXmlApplicationContext( "WebRoot/WEB-INF/conf/client-bean.xml"); OrderProcessorderProcess=(OrderProcess)context.getBean("client"); Orderorder=newOrder(); order.setUserName("yihuajun"); Stringresult=orderProcess.processOrder(order); System.out.println(result); } } 3附录 3.1cxf如何生成客户端 dos命令下进入cxf解压目录的bin路径,输入如下命令: wsdl2java-dsrc-client http: //localhost: 8060/soa/services/otherTrackedVehicleSoapService? wsdl wsdl2java在cxf包中的bin路径下 另外里面的src为生成代码存放路径,src必须手动创建。 使用cxfwsdl2java或javaxwsimport工具的时候,可能会遇到关于生成的Response类文件名冲突的问题 WSDLToJava Error: Thrown by JAXB : A class/interface with the same name "XXX**" is already in use. Use a class customization to resolve this conflict. 目前可选择的方案: 1.使用-autoNameResolution自动处理 wsdl2java-autoNameResolutionhttp: //localhost: 8060/soa/services/otherTrackedVehicleSoapService? wsdl or wsimport-pcom.test.client-keep http: //localhost: 8060/soa/services/otherTrackedVehicleSoapService? wsdl-B-XautoNameResolution 3.2cxf会用到的注解(还未完善)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Apache cxf 学习笔记 学习 笔记