WebService之CXF开发.docx

上传人:b****5 文档编号:14593111 上传时间:2023-06-24 格式:DOCX 页数:20 大小:335.48KB
下载 相关 举报
WebService之CXF开发.docx_第1页
第1页 / 共20页
WebService之CXF开发.docx_第2页
第2页 / 共20页
WebService之CXF开发.docx_第3页
第3页 / 共20页
WebService之CXF开发.docx_第4页
第4页 / 共20页
WebService之CXF开发.docx_第5页
第5页 / 共20页
WebService之CXF开发.docx_第6页
第6页 / 共20页
WebService之CXF开发.docx_第7页
第7页 / 共20页
WebService之CXF开发.docx_第8页
第8页 / 共20页
WebService之CXF开发.docx_第9页
第9页 / 共20页
WebService之CXF开发.docx_第10页
第10页 / 共20页
WebService之CXF开发.docx_第11页
第11页 / 共20页
WebService之CXF开发.docx_第12页
第12页 / 共20页
WebService之CXF开发.docx_第13页
第13页 / 共20页
WebService之CXF开发.docx_第14页
第14页 / 共20页
WebService之CXF开发.docx_第15页
第15页 / 共20页
WebService之CXF开发.docx_第16页
第16页 / 共20页
WebService之CXF开发.docx_第17页
第17页 / 共20页
WebService之CXF开发.docx_第18页
第18页 / 共20页
WebService之CXF开发.docx_第19页
第19页 / 共20页
WebService之CXF开发.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

WebService之CXF开发.docx

《WebService之CXF开发.docx》由会员分享,可在线阅读,更多相关《WebService之CXF开发.docx(20页珍藏版)》请在冰点文库上搜索。

WebService之CXF开发.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2