WebService之CXF开发.docx
- 文档编号:26985428
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:20
- 大小:335.48KB
WebService之CXF开发.docx
《WebService之CXF开发.docx》由会员分享,可在线阅读,更多相关《WebService之CXF开发.docx(20页珍藏版)》请在冰豆网上搜索。
WebService之CXF开发
CXF开发指南
WebServices、SOA简介:
SOA目前已经成为了人人皆知的热点,对分析人员来讲,SOA重点需要加强对业务服务的分析;各种不同的服务是SOA的重要基础;ESB则提供了一个舞台,让各种异构系统的业务服务在这里进行实际业务的展现、集成等。
对开发人员来讲,如何更快速地创建出更稳定的业务服务组件是关键;应该更加深入领会使用面向接口的组件化开发方式;开发人员重点是保障服务的生命周期,其它的事情则让业务开发人员来做。
SOA的重点在于服务的重用,更高一级层次的重用则属于业务层次了。
但是对于开发人员来说,重用的层次需要自己掌握与提升,从代码级到组件级、再到业务层次等。
WebServices是一个软件接口,它描述了一组可以在网络上通过标准化的XML消息传递访问的操作。
它使用基于XML语言的协议来描述要执行的操作或者要与另一个Web服务交换的数据。
WebServices更多是一种标准,而不是一种具体的技术,不同的平台、语言大都提供WebServices的开发实现。
在java领域,WebServices的框架很多,例如:
Axis、xfire、CXF…
CXF简介
关于ApacheCXF
ApacheCXF=Celtix+XFire,ApacheCXF的前身叫ApacheCeltiXfire,现在已经正式更名为ApacheCXF了,以下简称为CXF。
CXF继承了Celtix和XFire两大开源项目的精华,提供了对JAX-WS全面的支持,并且提供了多种Binding、DataBinding、Transport以及各种Format的支持,并且可以根据实际项目的需要,采用代码优先(CodeFirst)或者WSDL优先(WSDLFirst)来轻松地实现WebServices的发布和使用。
ApacheCXF是一个开源的Services框架,CXF帮助您利用Frontend编程API来构建和开发Services,像JAX-WS。
这些Services可以支持多种协议,比如:
SOAP、XML/HTTP、RESTfulHTTP或者CORBA,并且可以在多种传输协议上运行,比如:
HTTP、JMS或者JBI,CXF大大简化了Services的创建,同时它继承了XFire传统,一样可以天然地和Spring进行无缝集成。
功能特性
CXF包含了大量的功能特性,但是主要集中在以下几个方面:
1、支持WebServices标准:
CXF支持多种WebServices标准,包含SOAP、BasicProfile、WS-Addressing、WS-Policy、WS-ReliableMessaging和WS-Security。
2、Frontends:
CXF支持多种“Frontend”编程模型,CXF实现了JAX-WSAPI(遵循JAX-WS2.0TCK版本),它也包含一个“simplefrontend”允许客户端和EndPoint的创建,而不需要Annotation注解。
CXF既支持WSDL优先开发,也支持从Java的代码优先开发模式。
3、容易使用:
CXF设计得更加直观与容易使用。
有大量简单的API用来快速地构建代码优先的Services,各种Maven的插件也使集成更加容易,支持JAX-WSAPI,支持Spring2.0更加简化的XML配置方式,等等。
4、支持二进制和遗留协议:
CXF的设计是一种可插拨的架构,既可以支持XML,也可以支持非XML的类型绑定,比如:
JSON和CORBA。
CXF安装包下载及目录结构
可以访问Apache站点下载CXF框架的安装包,下载时请选择“二进制发布包(Binarydistribution)”,当然如果您有兴趣也可以下载相应版本的“源代码发布包(Sourcedistribution)”。
下载完成后,将下载的文件解压缩到任意的文件夹中,比如:
C:
/Java/CXF,在后面的章节中使用%CXF_HOME%表示CXF框架的存放目录,解压缩后形成的文件目录结构按名称排序如下:
图1、ApacheCXF发行包的目录结构示意图
文件目录结构及相关文件的详细说明:
●bin(目录)
bin目录中是CXF框架中所提供的代码生成、校验、管理控制台工具:
oJavatoWSDL:
java2wsdl
oCXFManagementConsoleTool:
mc
oWSDLtoJava:
wsdl2java
oWSDLtoService:
wsdl2service
oWSDLtoSOAP:
wsdl2soap
oWSDLtoXML:
wsdl2xml
oWSDLValidation:
wsdlvalidator
oXSDtoWSDL:
xsd2wsdl
∙docs(目录)
CXF所有类(class)对应的API文档,为开发者使用CXF完成应用开发提供应有的帮助。
∙etc(目录)
包含一个基本的Service暴露所需要的web.xml文件,及其它的配置文件。
∙lib(目录)
lib目录中包含CXF及其运行时所需要的和可选的第三方支持类包(.jar文件),可以根据不同项目所需的CXF特性选择所需要的支持类包。
如果不想一一去区分的话,可以直接在Web项目中包含所有的CXF及其运行时所需要的第三方支持类包(.jar文件)即可。
其中cxf-2.0.2-incubator.jar是CXF框架的二进制包文件,包含了全部的模块(modules),cxf-manifest-incubator.jar是列表清单文件manifestjar。
以下的jar包是所有CXF项目所必需的:
ocxf.jar
ocommons-logging.jar
ogeronimo-activation.jar(OrtheSunequivalent)
ogeronimo-annotation.jar(OrtheSunequivalent)
ogeronimo-javamail.jar(OrtheSunequivalent)
oneethi.jar
ojaxb-api.jar
ojaxb-impl.jar
ostax-api.jar
oXmlSchema.jar
owstx-asl.jar
oxml-resolver.jar
对于Java2WSDL和WSDL2Java,除了必需的之外,还需要再增加如下jar包:
ojaxb-xjc.jar
oveliocity.jar
ovelocity-dep.jar
为了支持JAX-WS,除了必需的之外,还需要再增加如下jar包:
ojaxws-api.jar
osaaj-api.jar
osaaj-impl.jar
oasm.jar(可选的,但是可以提升包装类型的性能)
为了支持XML配置,除了必需的之外,还需要再增加如下jar包:
oaopalliance.jar
ospring-beans.jar
ospring-context.jar
ospring-core.jar
ospring.web.jar
为了独立的HTTP服务支持,除了必需的之外,还需要再增加如下jar包:
ogeronimo-servlet.jar
ojetty.jar
ojetty-sslengine.jar
ojetty-util.jar
osl4j.jar&sl4j-jdk14.jar(可选的,但是可以提升日志logging)
为了支持Aegis,除了必需的之外,还需要再增加如下jar包:
ojaxen.jar
ojdom.jar
ostax-utils.jar
为了支持WS-Security,除了必需的之外,还需要再增加如下jar包:
obcprov-jdk14.jar
owss4j.jar
oxalan.jar
oxmlsec.jar
为了支持HTTPBinding,除了必需的之外,还需要再增加如下jar包:
ojra.jar
ojettison.jar(仅为JSON服务所需的)
∙licenses(目录)
列表了引用第三方jar包的相关许可协议。
∙modules(目录)
modules目录中包含了CXF框架根据不同特性分开进行编译的二进制包文件。
发布基于CXF框架的Web项目时,可以选择使用该目录下的所有.jar文件,也可以选择lib目录中的cxf-2.0.2-incubator.jar文件。
∙samples(目录)
samples目录中包含了所有随CXF二进制包发布的示例,包含这些示例的源代码和相关Web应用配置文件,可以方便地用Ant来编译运行测试这些示例,来了解CXF的开发和使用的方法。
可以通过samples目录和它各个子目录下的README.txt的文件来详细了解示例的编译与运行的步骤。
∙DISCLAIMER由于仍是处于Apache孵化状态的项目,这里描述了一些说明。
∙LICENSE文件中包含了CXF框架的授权协议ApacheLicenseVersion2.0。
∙NOTICE罗列了CXF框架用到的相关第三方组件的授权协议以其它的相关信息。
∙README文件中包含了CXF框架本身的一些简要说明。
∙release_notes.txt包含了CXF发布时的一些信息,包括运行时所需要的环境,修复BUG的列表等。
CXF框架支撑环境
CXF框架是一种基于Servlet技术的SOA应用开发框架,要正常运行基于CXF应用框架开发的企业应用,除了CXF框架本身之外,还需要JDK和Servlet容器的支持。
JDK版本选择、下载和安装
CXF支持非常多的特性,其中不同的特性对JDK版本的要求有所不同,但是JDK最低的版本是需要选择JDK5或者以上版本。
JDK各版本均可以在Sun公司网站上下载,如何安装JDK请参考SUN公司的相关技术文档和JDK的帮助文档。
为了运行CXF携带的samples目录下的所有示例,还需要ApacheAnt1.6.5或以上的版本。
为了使用CXF的WS-Security特性,还需要BouncyCastle,可以从网站下载,并增加到CLASSPATH中。
Servlet容器下载和安装
CXF是一种基于Servlet技术的SOA应用开发框架,需要Servlet容器的支持。
CXF支持在多种Servlet容器中运行,包括WebSphere、WebLogic、Tomcat、Jetty等。
为了说明的简单,我们选择使用Tomcat5.5.25和Jetty作为CXF的运行容器,所有配置过程和发布步骤的说明也均是针对Tomcat和Jetty,如果读者使用Tomcat之外的其它Servlet容器或者选择了Tomcat的其它版本,下面的配置过程和步骤可能需要做出调整,请读者根据实际Servlet容器的帮助文档进行相应调整。
Tomcat与Jetty的各个版本均可以在网上下载,如何正确安装Tomcat与Jetty服务器请参考相关的帮助文档。
想要对要对CXF有个初步的认识,体验一下利用CXF进行发布与使用WebServices,可以去看一下samples\java_first_pojo的这个例子,很简单的将pojo发布成WebService,并展示了在客户端调用。
CXF运作代码如下:
Server.java中主要的代码片断如下,它利用ServerFactoryBean来进行WebServices的发布,实例化一个实现类HelloWorldImpl,设置将要进行发布的地址address,最后通过ServerFactoryBean的create()方法就成功地发布了WebServices,如此简单而已,只有六行代码:
HelloWorldImplhelloworldImpl=newHelloWorldImpl();
ServerFactoryBeansvrFactory=newServerFactoryBean();
svrFactory.setServiceClass(HelloWorld.class);
svrFactory.setAddress("http:
//localhost:
9000/Hello");
svrFactory.setServiceBean(helloworldImpl);
svrFactory.create();
Client.java中的主要代码片断如下,通过ClientProxyFactoryBean代理工厂类来创建一个服务,绑定到endPointAddress地址,就可以create并得到服务,并进行服务消费了:
ClientProxyFactoryBeanfactory=newClientProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http:
//localhost:
9000/Hello");
HelloWorldclient=(HelloWorld)factory.create();
System.out.println("InvokesayHi()....");
System.out.println(client.sayHi("user"));
在这里不做过多介绍。
CXF应用开发
下面就将开始我们的CXFWebServices的开发之旅!
首先,要有一个基于Eclipse的开发环境;然后,我们将利用这个开发环境开发一个简单的“调查投票”示例,同时我们将解释一些CXF在开发中进行配置的基本方法。
创建项目骨架
启动Eclipse,创建一个JavaProject,或者可以直接创建一个J2EE的Web项目,我们取名为CXF_Spring_Survey,并设置编译的output路径为WEB-INF/classes目录,方便直接部署应用程序。
目录结构如下图所示:
图2.利用CXF开发WebServices的工程骨架示意图
为了方便起见,我们直接拷贝%CXF_HOME%/lib目录下的所有.jar文件到CXF_Spring_Survey项目的WEB-INF/lib目录下,也可以根据前面“CXF安装包”章节所述的各个jar包的作用范围选择仅需要的.jar文件。
并在CXF_Spring_Survey项目属性里将这些.jar加到JavaBuildPath当中去。
图3.Eclipse中引入所有.jar文件后的示意图
这样,项目的基本骨架已经创建完成,接下来开始编写接口与具体实现的代码了。
接口类创建
在项目的src目录中新建一个ws.cxf包,并在里面创建接口类ISurveyService.java,为了简单示示例起见,我们仅创建一个方法publicStringvote(Stringusername,intpoint);这里要注意的是我们在接口上用@WebService注解标明这是一个即将暴露为WebService的接口,并将里面的方法都暴露出去。
完整的接口代码清单如下:
packagews.cxf;
importjavax.jws.WebService;
@WebService
publicinterfaceISurveyService
{
/**
*@paramusername名字
*@parampoint分数
*@return
*/
publicStringvote(Stringusername,intpoint);
}
接下来,我们根据接口的定义,来实现它。
具体类实现
针对接口的定义,我们创建一个相应的实现类,并将其定义在sw.cxf.impl包中,完整的代码清单如下:
packagews.cxf.impl;
importjavax.jws.WebService;
importws.cxf.ISurveyService;
@WebService
publicclassSurveyServiceimplementsISurveyService
{
privateStringexcludeName="Michael";
privateintleastPonit=5;
publicStringvote(Stringusername,intpoint)
{
Stringresult="";
if(excludeName.equals(username))
{
result="您不能重复进行投票!
";
}
else
{
result="谢谢您的投票!
";
if(point { result+="您的投票分数太低! "; } else { result+="您的投票分数通过审核! "; } } returnresult; } //ForIoC publicStringgetExcludeName() { returnexcludeName; } publicvoidsetExcludeName(StringexcludeName) { this.excludeName=excludeName; } publicintgetLeastPonit() { returnleastPonit; } publicvoidsetLeastPonit(intleastPonit) { this.leastPonit=leastPonit; } } 接口定义与具体的实现就这样简单完成了,接下来就是相关的配置工作了,首先进行Spring的Bean配置。 Spring配置 在src目录中创建beanRefServer.xml文件,用来定义Spring的Bean的配置,CXF支持Spring2.0Schema标签配置方式,并且提供快捷暴露WebServices的标签。 首先,我们需要引入Spring与CXF的命名空间(namespace),如下: //www.springframework.org/schema/beans" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xmlns: jaxws="http: //cxf.apache.org/jaxws" xsi: schemaLocation=" http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-2.0.xsd http: //cxf.apache.org/jaxws http: //cxf.apache.org/schemas/jaxws.xsd"> 这样,我们可以使用Spring与CXF的标签配置了。 接着,我们需要引入我们所需要的CXF的Bean定义文件,如下: --ImportApacheCXFBeanDefinition--> META-INF/cxf/cxf.xml"/> META-INF/cxf/cxf-extension-soap.xml"/> META-INF/cxf/cxf-servlet.xml"/> 接着定义我们具体实现的Bean,这个Bean的定义与Spring普通的Bean定义是一样的: --SurveyService--> 最后,将定义的Bean暴露出去成为WebService服务,通过CXF提供的Schema标签配置 server>,这样定义的配置显得更加简洁与方便,定义如下: --ExposeSurveyWebService--> serverid="surveyWebService" serviceClass="ws.cxf.ISurveyService" address="/SurveyWebService"> serviceBean> --要暴露的bean的引用--> serviceBean> server> 在配置中,serviceClass的值是我们的接口类的名称,address为将要暴露出去的WebService访问地址。 比如: /SurveyWebService,那么客户端消费WebService的地址就会成为http: //host: port/WebAPPName/SurveyWebService,与之相应的WSDL地址则为: http: //host: port/WebAPPName/SurveyWebService? wsdl。 Web应用配置 由于我们的示例是需要通过Servlet容器进行服务暴露,因此需要配置相对应的web.xml文件,首先是增加Spring的配置文件加载Listener,如下: --SpringConfigLoca
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WebService CXF 开发