apachecxf研究.docx

上传人:b****1 文档编号:19075886 上传时间:2023-04-24 格式:DOCX 页数:42 大小:450.52KB
下载 相关 举报
apachecxf研究.docx_第1页
第1页 / 共42页
apachecxf研究.docx_第2页
第2页 / 共42页
apachecxf研究.docx_第3页
第3页 / 共42页
apachecxf研究.docx_第4页
第4页 / 共42页
apachecxf研究.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

apachecxf研究.docx

《apachecxf研究.docx》由会员分享,可在线阅读,更多相关《apachecxf研究.docx(42页珍藏版)》请在冰豆网上搜索。

apachecxf研究.docx

apachecxf研究

ApacheCXF研究3

一、文档简介3

1.内容:

3

2.目标:

3

二、ApacheCXF服务框架的基本知识3

1.关于ApacheCXF3

2.功能特性3

3.下载及目录结构4

4.CXF框架支撑环境8

5.JDK版本选择、下载和安装8

6.Servlet容器下载和安装8

三、CXF服务的发布与消费8

1.配置环境变量(windows):

8

2.通过Ant来构建和运行示例9

3.体验改变10

4.构建和运行在Servlet容器里的示例11

四、ApacheCXF应用开发13

1.开发环境准备13

2.创建项目骨架13

3.接口类创建13

4.具体实现类14

5.Spring配置14

6.Web应用配置16

7.应用部署17

8.启动服务17

9.消费服务17

五、CXF解析19

1、体系结构20

2.Howservicecallsareprocessed21

3、对象组织关系及运作流程26

六、拦截器与Feature38

本地服务(私有服务)40

七、知识点:

41

八、参考资料41

ApacheCXF研究

一、文档简介

cxf版本:

2.x

1.内容:

1、ApacheCXF服务框架的基本知识

2、用自带的例子来初步体验通过CXF进行服务的发布与消费

3、搭建基于Eclipse的ApacheCXF开发环境

4、示例CXF整合Spring2.0的基本开发过程

5、CXF源码研究

2.目标:

掌握ApacheCXF的基本知识,可以用CXF编写基本的WebServices,并且能够增加自己的业务逻辑,从而开发满足自己需求的WebServices应用,最重要的是学会与Spring2.0框架的无缝整合,快速轻松地实现服务的发布与消费。

二、ApacheCXF服务框架的基本知识

1.关于ApacheCXF

ApacheCXF=Celtix+XFire,ApacheCXF的前身叫ApacheCeltiXfire,现在已经正式更名为ApacheCXF了,以下简称为CXF。

2.功能特性

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。

3.下载及目录结构

http:

//cxf.apache.org/download.html可下载二进制及源码发布包,使用只需二进制包:

1.bin(目录)

bin目录中是CXF框架中所提供的代码生成、校验、管理控制台工具:

JavatoWSDL:

java2wsdl

CXFManagementConsoleTool:

mc

WSDLtoJava:

wsdl2java

WSDLtoService:

wsdl2service

WSDLtoSOAP:

wsdl2soap

WSDLtoXML:

wsdl2xml

WSDLValidation:

wsdlvalidator

XSDtoWSDL:

xsd2wsdl

2.docs(目录)

CXF所有类(class)对应的API文档,为开发者使用CXF完成应用开发提供应有的帮助。

3.etc(目录)

包含一个基本的Service暴露所需要的web.xml文件,及其它的配置文件。

4.lib(目录)

lib目录中包含CXF及其运行时所需要的和可选的第三方支持类包(.jar文件),可以根据不同项目所需的CXF特性选择所需要的支持类包。

如果不想一一去区分的话,可以直接在Web项目中包含所有的CXF及其运行时所需要的第三方支持类包(.jar文件)即可。

其中cxf-2.0.2-incubator.jar是CXF框架的二进制包文件,包含了全部的模块(modules),cxf-manifest-incubator.jar是列表清单文件manifestjar。

以下的jar包是所有CXF项目所必需的:

cxf.jar

commons-logging.jar

geronimo-activation.jar(OrtheSunequivalent)

geronimo-annotation.jar(OrtheSunequivalent)

geronimo-javamail.jar(OrtheSunequivalent)

neethi.jar

jaxb-api.jar

jaxb-impl.jar

stax-api.jar

XmlSchema.jar

wstx-asl.jar

xml-resolver.jar

对于Java2WSDL和WSDL2Java,除了必需的之外,还需要再增加如下jar包:

jaxb-xjc.jar

veliocity.jar

velocity-dep.jar

为了支持JAX-WS,除了必需的之外,还需要再增加如下jar包:

jaxws-api.jar

saaj-api.jar

saaj-impl.jar

asm.jar(可选的,但是可以提升包装类型的性能)

为了支持XML配置,除了必需的之外,还需要再增加如下jar包:

aopalliance.jar

spring-beans.jar

spring-context.jar

spring-core.jar

spring.web.jar

为了独立的HTTP服务支持,除了必需的之外,还需要再增加如下jar包:

geronimo-servlet.jar

jetty.jar

jetty-sslengine.jar

jetty-util.jar

sl4j.jar&sl4j-jdk14.jar(可选的,但是可以提升日志logging)

为了支持Aegis,除了必需的之外,还需要再增加如下jar包:

jaxen.jar

jdom.jar

stax-utils.jar

为了支持WS-Security,除了必需的之外,还需要再增加如下jar包:

bcprov-jdk14.jar

wss4j.jar

xalan.jar

xmlsec.jar

为了支持HTTPBinding,除了必需的之外,还需要再增加如下jar包:

jra.jar

jettison.jar(仅为JSON服务所需的)

5.licenses(目录)

列表了引用第三方jar包的相关许可协议。

6.modules(目录)

modules目录中包含了CXF框架根据不同特性分开进行编译的二进制包文件。

发布基于CXF框架的Web项目时,可以选择使用该目录下的所有.jar文件,也可以选择lib目录中的cxf-2.0.2-incubator.jar文件。

7.samples(目录)

samples目录中包含了所有随CXF二进制包发布的示例,包含这些示例的源代码和相关Web应用配置文件,可以方便地用Ant来编译运行测试这些示例,来了解CXF的开发和使用的方法。

可以通过samples目录和它各个子目录下的README.txt的文件来详细了解示例的编译与运行的步骤。

8.LICENSE文件

包含了CXF框架的授权协议ApacheLicenseVersion2.0。

9.NOTICE文件

罗列了CXF框架用到的相关第三方组件的授权协议以其它的相关信息。

10.README文件

中包含了CXF框架本身的一些简要说明。

11.release_notes.txt文件

包含了CXF发布时的一些信息,包括运行时所需要的环境,修复BUG的列表等。

4.CXF框架支撑环境

CXF框架是一种基于Servlet技术的SOA应用开发框架,要正常运行基于CXF应用框架开发的企业应用,除了CXF框架本身之外,还需要JDK和Servlet容器的支持。

5.JDK版本选择、下载和安装

JDK最低的版本是需要选择JDK5或者以上版本,为了运行CXF携带的samples目录下的所有示例,还需要ApacheAnt1.6.5或以上的版本。

为了使用CXF的WS-Security特性,还需要BouncyCastle,并增加到CLASSPATH中。

6.Servlet容器下载和安装

CXF是一种基于Servlet技术的SOA应用开发框架,需要Servlet容器的支持。

CXF支持在多种Servlet容器中运行,包括WebSphere、WebLogic、Tomcat、Jetty等。

三、CXF服务的发布与消费

1.配置环境变量(windows):

将以下内容保存为env.bat

2.通过Ant来构建和运行示例

a)构建与启动Server

首先,进入到%CXF_HOME%/java_first_pojo/目录下。

在UNIX或Windows下的命令都是一样的,如下:

antserver

最后可以看到如下信息:

build:

server:

[java]Serverready...

如果看不到这些信息,请检查环境变量设置是否正确。

b)运行Client

再打开一个命令窗口,运行:

antclient

最后可以看到如下信息:

client:

[java]InvokesayHi()....

[java]Hellouser

BUILDSUCCESSFUL

如果看不到这些信息,问题应当是出现在环境变量的设置上,需要再次检查一下您的环境变量设置是否正确。

3.体验改变

a)修改Client端

打开%CXF_HOME%/samples/java_first_pojo/src/demo/hw/client目录下的Client.java文件,在最后面修改为:

System.out.println(client.sayHi("World,利用ApacheCXF实现WebServices"));可以改为其他你喜欢的字符串参数

b)修改Server端代码

Ctrl+C直接停止刚才启动的antserver启动端,然后打开%CXF_HOME%/samples/java_first_pojo/src/demo/hw/server目录下的HelloWorldImpl.java文件,修改

return"Hello"+text;

return"Hello"+text+newjava.util.Date();

我们在返回信息时增加了一个时间戳上去,然后再次分别运行antserver与antclient,看看有什么变化。

c)代码简单分析

实际上,我们会发现java_first_pojo的源代码非常简单,Server端主要利用org.apache.cxf.frontend.ServerFactoryBean来发布服务,实例化一个实现类HelloWorldImpl,设置将要进行发布的地址address,最后通过ServerFactoryBean的create()方法就成功地发布了WebServices,如此简单而已;

而客户端主要利用org.apache.cxf.frontend.ClientProxyFactoryBean来访问服务,,绑定到endPointAddress地址,就可以create并得到服务,并进行服务消费了。

ServerFactoryBeanClientProxyFactoryBean都属于下文提到的SimpleFrontend范畴

4.构建和运行在Servlet容器里的示例

a)构建Web应用程序包

停止掉前面运行的Server,然后在命令行运行:

antwar

将在%CXF_HOME%/samples/java_first_pojo/build/war/目录下生成helloworld.war文件。

b)部署应用

先运行如下命令,将运行部署到Tomcat容器中:

antdeploy-Dtomcat=true

c)启动Tomcat

然后在Windows下通过startup.bat或在Unix下通过startup.sh来启动Tomcat,CXF的应用也就随之启动。

通过Tomcat管理控制台http:

//localhost:

8080/manager/html/可以看到已经成功部署了helloworld.war的应用程序,如下图所示:

d)校验服务

假设您的Tomcat服务端口是8080,那运行以下命令就可以调用部署到JavaEE容器里的CXF所提供的WebServices的服务了。

http:

//localhost:

8080/helloworld/services/hello_world?

wsdl

查看wsdl文件的信息内容如下:

e)运行Client

接下来我们来运行Client来使用它,运行:

antclient-servlet

如果您的端口不是8080,可以使用:

antclient-servlet-Dbase.url=http:

//localhost:

端口号

或者

antclient-servlet-Dhost=localhost-Dport=端口号

来调用WebServices,返回结果如下:

client-servlet:

[java]InvokesayHi()....

[java]HelloWorld,利用ApacheCXF实现WebServicesThuSep2721:

56:

32CST2007

BUILDSUCCESSFUL

f)卸载应用

从Tomcat中卸载应用,运行:

antundeploy-Dtomcat=true

最后,停止Tomcat,然后清除构建过程中产生的一些文件,直接运行antclean即可。

四、ApacheCXF应用开发

1.开发环境准备

下载并安装Eclipse3.2(或更高版本)

2.创建项目骨架

a)创建web工程

取名CXF_Spring_Survey

b)导入支持包

直接拷贝%CXF_HOME%/lib目录下的所有.jar文件到CXF_Spring_Survey项目的WEB-INF/lib目录下,也可以根据前面“CXF安装包”章节所述的各个jar包的作用范围选择仅需要的.jar文件。

或者拷贝“构建和运行在Servlet容器里的示例”中生成的web应用程序的lib目录下的jar。

把这些jar添加到buildpath下。

3.接口类创建

在项目的src目录中新建一个ws.cxf包,并在里面创建接口类ISurveyService.java,为了简单示示例起见,我们仅创建一个方法publicStringvote(Stringusername,intpoint);这里要注意的是我们在接口上用@WebService注解标明这是一个即将暴露为WebService的接口,并将里面的方法都暴露出去。

完整的接口代码清单如下:

packagews.cxf;

importjavax.jws.WebService;

@WebService

publicinterfaceISurveyService{

/**

*@paramusername

*名字

*@parampoint

*分数

*@return

*/

publicStringvote(Stringusername,intpoint);

}

4.具体实现类

创建一个相应的实现类,并将其定义在sw.cxf.impl包中,完整的代码清单如下:

5.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>

还有一种配置方式:

1

@WebService(endpointInterface="demo.spring.HelloWorld")

publicclassHelloWorldImplimplementsHelloWorld{

用标记指定接口

2、使用jaxws:

endpoint标签

endpoint

id="helloWorld"

implementor="demo.spring.HelloWorldImpl"

address="/HelloWorld"/>

或者

endpoint

id="helloWorld"

implementor="#helloWorldImpl"此处用#号引用一个bean

address="/HelloWorld"/>

在配置中,serviceClass的值是我们的接口类的名称,address为将要暴露出去的WebService访问地址。

比如:

/SurveyWebService,那么客户端消费WebService的地址就会成为http:

//host:

port/WebAPPName/SurveyWebService,与之相应的WSDL地址则为:

http:

//host:

port/WebAPPName/SurveyWebService?

wsdl。

6.Web应用配置

由于我们的示例是需要通过Servlet容器进行服务暴露,因此需要配置相对应的web.xml文件,首先是增加Spring的配置文件加载Listener,如下:

--SpringConfigLocation-->

contextConfigLocation

/WEB-INF/classes/beanRefServer.xml

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1