使用 Apache CXF 建立 WebService 总结

时间:2024-03-13 14:44:15

转载请注明出处: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来创建,如图:

使用 Apache CXF 建立 WebService 总结

使用 Apache CXF 建立 WebService 总结

之后再选择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

Xml代码
  1. <context-param>
  2. <param-name>contextConfigLocation</param-name>
  3. <param-value>WEB-INF/beans.xml</param-value>
  4. </context-param>
  5. <listener>
  6. <listener-class>
  7. org.springframework.web.context.ContextLoaderListener
  8. </listener-class>
  9. </listener>

配置我们的cxf

Xml代码
  1. <!-- 配置CXF Servlet -->
  2. <servlet>
  3. <servlet-name>CXFServlet</servlet-name>
  4. <servlet-class>
  5. org.apache.cxf.transport.servlet.CXFServlet
  6. </servlet-class>
  7. <load-on-startup>1</load-on-startup>
  8. </servlet>
  9. <servlet-mapping>
  10. <servlet-name>CXFServlet</servlet-name>
  11. <url-pattern>/*</url-pattern>
  12. </servlet-mapping>

3.beans.xml

Xml代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!-- START SNIPPET: beans -->
  3. <beansxmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:jaxws="http://cxf.apache.org/jaxws"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
  9. <!--会向cxf jar包去找 -->
  10. <importresource="classpath:META-INF/cxf/cxf.xml"/>
  11. <importresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
  12. <importresource="classpath:META-INF/cxf/cxf-servlet.xml"/>
  13. <!--
  14. <jaxws:endpoint
  15. id="helloWorld"
  16. implementor="com.cxf.server.HelloWorldImpl"
  17. address="/HelloWorld"/>
  18. -->
  19. <!-- 另一种发布方式 -->
  20. <beanid="hello"class="com.cxf.server.HelloWorldImpl"/>
  21. <jaxws:endpointid="helloWorld"
  22. implementor="#hello"
  23. address="/HelloWorld">
  24. </jaxws:endpoint>
  25. <beanid="us"class="com.cxf.users.UserServiceImpl"></bean>
  26. <jaxws:endpointid="userService"
  27. implementor="#us"
  28. address="/userAction"
  29. >
  30. <jaxws:inInterceptors>
  31. <beanclass="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
  32. </jaxws:inInterceptors>
  33. <jaxws:outInterceptors>
  34. <beanclass="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
  35. </jaxws:outInterceptors>
  36. </jaxws:endpoint>
  37. </beans>
  38. <!-- END SNIPPET: beans -->

<jaxws:endpoint 通过他们进行服务发布,通过其指定的address访问你的wsdl

Xml代码
  1. <jaxws:inInterceptors>
  2. <beanclass="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
  3. </jaxws:inInterceptors>

可以加入相关interceptor


By M

2012-04-28