转载请注明出处:http://blog.csdn.net/oathevil/article/details/7520732
J2EE中WebService的建立可以使用Axis2,也可以使用Apache CXF,两者的区别与优缺点具体见附档1。
最近花了点时间大概看了一下WebService相关的资料,现就Apache CXF的使用过程作如下总结:
使用者可以遵循以下步骤进行WebService工程的建立。
1. 下载 Apache CXF ,可以去官方下载 http://cxf.apache.org/ (本文使用的是2.3.9的版本)。
2. 配置Apache CXF相关环境变量:
a. 创建一个CXF_HOEM变量,值为CXF框架所在根目录(如本文为E:\Java\apache-cxf-2.3.9);
b. 向CLASSPATH、PATH加入环境变量。具体:CLASSPATH=%CXF_HOME%\lib; PATH=%CXF_HOME%\bin;
测试环境变量是否设置成功可在CMD中输入java2ws、wsdl2java等测试命令是否有效。
3. 在Eclipse -> Window -> Preferences -> Web Services -> CXF 2.x Preferences -> CXF Runtime 中另入CFX Rutime库(Add -> 选择CXF的根目录即可)。
4. 通过以上配置后,即可在Eclipse中 File -> New -> Other -> Web Services -> Web Service 中创建Web Service 服务。或者也可通过 Right Click 相应的接口文件,Web Services -> Create Web Service来创建,如图:
之后再选择Implementation文件,其余基本使用默认配置即可。
这样以后即可生成相应的ResponseWrapper、RequestWrapper、.wsdl文件和.xsd文件。
注意:
1.只有当配置档Web.xml、beans.xml、applicationContent.xml等正确配置时,才会生成成功。上述文档配置可参见附档2;
2.当包含WebService的项目WAR被部署之后,则相应的WebService也自动发布,无需进行额外发布。
Apache CXF 结合 Spring 使用的例子将后续附上。
附档1
正好现在在学webService.可以共同进步啊
Web Services 框架如 Axis2、CXF 都是由现有的项目中逐渐演化而来的,Axis2 是由 Axis 1.x 系列演化过来,而 Apache CXF 则是由 Celtix 和 XFire 项目整合而生,并且刚刚发布了 2.0.2 的最新版本,不过仍是 Apache 的一个孵化项目。
Axis2 是对 Axis 进行了彻底的重写的一个新项目了,它使用了新的模块化架构,更方便于功能性的扩展等等。
Apache CXF 则是由 XFire 和 Celtix 两个现有的项目进行了重组。
先比较一下它们的不同之处:
1、Apache CXF 支持 WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile
2、Axis2 支持 WS-Addressing、WS-RM、WS-Security和WS-I BasicProfile,WS-Policy将在新版本里得到支持
3、Apache CXF 是根据Spring哲学来进行编写的,即可以无缝地与Spring进行整合
4、Axis2 不是
5、Axis2 支持更多的 data bindings,包括 XMLBeans、JiBX、JaxMe 和 JaxBRI,以及它原生的 data binding(ADB)。
6、Apache CXF 目前仅支持 JAXB 和 Aegis,并且默认是 JAXB 2.0,与 XFire 默认是支持 Aegis 不同,XMLBeans、JiBX 和 Castor 将在 CXF 2.1 版本中得到支持,目前版本是 2.0.2
7、Axis2 支持多种语言,它有 C/C++ 版本。
8、Apache CXF 提供方便的Spring整合方法,可以通过注解、Spring标签式配置来暴露Web Services和消费Web Services
如何抉择:
1、如果应用程序需要多语言的支持,Axis2 应当是首选了;
2、如果应用程序是遵循 Spring 哲学路线的话,Apache CXF 是一种更好的选择,特别对嵌入式的 Web Services 来说;
3、如果应用程序没有新的特性需要的话,就仍是用原来项目所用的框架,比如 Axis1,XFire,Celtrix 或 BEA 等等厂家自己的 Web Services 实现,就别劳民伤财了
因为CXF可以和Spring无缝的进行结合,而我的项目用到了spring ,所以我选的是CXF
附档2
1.CXF本身就使用了Spring的东西,它和Spring集成可谓是无缝集成
主要让发布服务的任务交spring去发布
2.配置web.xml
配置spring
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>WEB-INF/beans.xml</param-value>
- </context-param>
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
配置我们的cxf
- <!-- 配置CXF Servlet -->
- <servlet>
- <servlet-name>CXFServlet</servlet-name>
- <servlet-class>
- org.apache.cxf.transport.servlet.CXFServlet
- </servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>CXFServlet</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
3.beans.xml
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!-- START SNIPPET: beans -->
- <beansxmlns="http://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.xsd
- http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
- <!--会向cxf jar包去找 -->
- <importresource="classpath:META-INF/cxf/cxf.xml"/>
- <importresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
- <importresource="classpath:META-INF/cxf/cxf-servlet.xml"/>
- <!--
- <jaxws:endpoint
- id="helloWorld"
- implementor="com.cxf.server.HelloWorldImpl"
- address="/HelloWorld"/>
- -->
- <!-- 另一种发布方式 -->
- <beanid="hello"class="com.cxf.server.HelloWorldImpl"/>
- <jaxws:endpointid="helloWorld"
- implementor="#hello"
- address="/HelloWorld">
- </jaxws:endpoint>
- <beanid="us"class="com.cxf.users.UserServiceImpl"></bean>
- <jaxws:endpointid="userService"
- implementor="#us"
- address="/userAction"
- >
- <jaxws:inInterceptors>
- <beanclass="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
- </jaxws:inInterceptors>
- <jaxws:outInterceptors>
- <beanclass="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
- </jaxws:outInterceptors>
- </jaxws:endpoint>
- </beans>
- <!-- END SNIPPET: beans -->
<jaxws:endpoint 通过他们进行服务发布,通过其指定的address访问你的wsdl
- <jaxws:inInterceptors>
- <beanclass="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
- </jaxws:inInterceptors>
可以加入相关interceptor
By M
2012-04-28