一个CXF集成SPRING的WEBSERVICE完整实例

1 首先准备以下JAR包

  1. activation.jar
  2. commons-logging-1.1.1.jar
  3. cxf-2.5.6.jar
  4. jaxb-api-2.2.1.jar
  5. jaxb-impl-2.1.3.jar
  6. jaxws-api-2.2.8.jar
  7. neethi-3.0.2.jar
  8. ow2-jws-2.0-spec-1.0.11.jar
  9. spring-aop-3.0.5.RELEASE.jar
  10. spring-asm-3.0.5.RELEASE.jar
  11. spring-beans-3.0.5.RELEASE.jar
  12. spring-context-3.0.5.RELEASE.jar
  13. spring-context-support-3.0.5.RELEASE.jar
  14. spring-core-3.0.5.RELEASE.jar
  15. spring-expression-3.0.5.RELEASE.jar
  16. spring-oxm-3.0.5.RELEASE.jar
  17. spring-web-3.0.5.RELEASE.jar
  18. spring-ws-core-2.0.2.RELEASE.jar
  19. spring-ws-security-2.0.2.RELEASE.jar
  20. spring-xml-1.5.9.jar
  21. stax-api-1.0.jar
  22. stax2-api-3.1.1.jar
  23. webservices-api-2.2.0-1.jar
  24. webservices-extra-2.1-20.jar
  25. woodstox-core-asl-4.1.2.jar
  26. ws-test.jar
  27. wsdl4j-1.6.2.jar
  28. wss4j-1.6.7.jar
  29. xmlschema-core-2.0.3.jar

2 编写服务端 
2.1 新建一个空的WEB工程,我这里命名为ws_test,将其放置于TOMCAT的webapps目录; 
2.2 然后在ws_test下面建立WEB-INF文件夹,并在WEB-INF文件夹中建立目录lib; 
2.3 将上面提到的JAR包都拷贝到lib目录中; 
2.4 在WEB-INF目录中新建web.xml文件,并将如下内容放于其中:

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5. version="2.5">
  6. <description>
  7. Web Service Test.
  8. </description>
  9. <display-name>Web Service Test</display-name>
  10. <listener>
  11. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  12. </listener>
  13. <context-param>
  14. <param-name>contextConfigLocation</param-name>
  15. <param-value>classpath*:applicationContext-server.xml</param-value>
  16. </context-param>
  17. <listener>
  18. <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  19. </listener>
  20. <servlet>
  21. <servlet-name>CXFService</servlet-name>
  22. <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  23. </servlet>
  24. <servlet-mapping>
  25. <servlet-name>CXFService</servlet-name>
  26. <url-pattern>/*</url-pattern>
  27. </servlet-mapping>
  28. </web-app>

这个配置文件是WEB应用的核心配置文件,如Listener的配置,servlet请求的映射等,这里并配置了启动的时候加载SPRING,并初使化我们的WEBSERVICE服务端配置文件。 
2.5 在ECLIPSE中新建JAVA工程,并在工程中新建lib目录,将上面提到的JAR包全部放到lib目录,并将他们全部加入到classpath中; 
2.6 增加服务端的JAVA类

这个配置文件是WEB应用的核心配置文件,如Listener的配置,servlet请求的映射等,这里并配置了启动的时候加载SPRING,并初使化我们的WEBSERVICE服务端配置文件。 
2.5 在ECLIPSE中新建JAVA工程,并在工程中新建lib目录,将上面提到的JAR包全部放到lib目录,并将他们全部加入到classpath中; 
2.6 增加服务端的JAVA类

  1. package com.use.test.ws.server;
  2. import javax.jws.WebParam;
  3. import javax.jws.WebService;
  4. import javax.jws.soap.SOAPBinding;
  5. import javax.jws.soap.SOAPBinding.Style;
  6. import com.use.test.ws.entity.User;
  7. /**
  8. * <b>function:</b>定制客户端请求WebService所需要的接口
  9. */
  10. @WebService
  11. @SOAPBinding(style = Style.RPC)
  12. public interface IService {
  13. public User getUserByName(@WebParam(name = "name") String name);
  14. public void setUser(User user);
  15. }
  1. package com.use.test.ws.server;
  2. import java.util.Date;
  3. import javax.jws.WebParam;
  4. import javax.jws.WebService;
  5. import javax.jws.soap.SOAPBinding;
  6. import javax.jws.soap.SOAPBinding.Style;
  7. import com.use.test.ws.entity.User;
  8. /**
  9. * <b>function:</b> WebService传递复杂对象,如JavaBean、Array、List、Map等
  10. */
  11. @WebService
  12. @SOAPBinding(style = Style.RPC)
  13. @SuppressWarnings("deprecation")
  14. public class TestService implements IService {
  15. public User getUserByName(@WebParam(name = "name") String name) {
  16. User user = new User();
  17. user.setId(new Date().getSeconds());
  18. user.setName(name);
  19. user.setAddress("china");
  20. user.setEmail(name + "@test.com");
  21. return user;
  22. }
  23. public void setUser(User user) {
  24. System.out.println("############Server setUser###########");
  25. System.out.println("setUser:" + user);
  26. }
  27. }

2.7 在src目录下建立applicationContext-client.xml,并放入以下内容:

  1. <span xmlns="http://www.w3.org/1999/xhtml" style=""><span xmlns="http://www.w3.org/1999/xhtml" style=""><?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:jaxws="http://cxf.apache.org/jaxws"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  10. http://cxf.apache.org/jaxws
  11. http://cxf.apache.org/schemas/jaxws.xsd">
  12. <import resource="classpath:META-INF/cxf/cxf.xml"/>
  13. <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
  14. <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
  15. <bean id="userServiceBean" class="com.use.test.ws.server.TestService"/>
  16. <bean id="inMessageInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
  17. <bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
  18. <jaxws:server id="userService" serviceClass="com.use.test.ws.server.IService" address="/Users">
  19. <jaxws:serviceBean>
  20. <ref bean="userServiceBean"/>
  21. </jaxws:serviceBean>
  22. <jaxws:inInterceptors>
  23. <ref bean="inMessageInterceptor"/>
  24. </jaxws:inInterceptors>
  25. <jaxws:outInterceptors>
  26. <ref bean="outLoggingInterceptor"/>
  27. </jaxws:outInterceptors>
  28. </jaxws:server>
  29. </beans>
  30. </span></span><span style="color:#099000;"><span style="color:#000000;font-weight: bold;"><span style="color:#000000;font-weight: bold;"></span></span></span>

2.8 将建立的Java工程导出jar包,只导出src下面的内容即,并将这个jar包放到上面的TOMCAT工程中的ws_test/WEB-INF/lib目录下,并启动TOMCAT服务器; 
2.9 启动成功后,此时访问URL:http://localhost:8080/ws_test/Users?wsdl,应该会看到WSDL的输出。

3 编写客户端 
3.1 独立的客户端请求类

  1. package com.use.test.ws.client;
  2. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
  3. import com.use.test.ws.entity.User;
  4. import com.use.test.ws.server.IService;
  5. public class TestClient {
  6. public static void main(String[] args) {
  7. JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
  8. factory.setServiceClass(IService.class);
  9. factory.setAddress("http://localhost:8080/ws_test/Users");
  10. IService service = (IService) factory.create();
  11. System.out.println("#############Client getUserByName##############");
  12. User user = service.getUserByName("hoojo");
  13. System.out.println(user);
  14. user.setAddress("China-Guangzhou");
  15. service.setUser(user);
  16. }
  17. }

点击右键就可以运行这个类。 
3.2 与SPRING的集成,首先需要在src下面建立配置文件applicationContext-client.xml,将输入以下内容:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:jaxws="http://cxf.apache.org/jaxws"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  10. http://cxf.apache.org/jaxws
  11. http://cxf.apache.org/schemas/jaxws.xsd">
  12. <import resource="classpath:META-INF/cxf/cxf.xml"/>
  13. <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
  14. <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
  15. <jaxws:client id="userWsClient" serviceClass="com.use.test.ws.server.IService" address="http://localhost:8080/ws_test/Users"/>
  16. </beans>

3.3 建立JAVA类

  1. package com.use.test.ws.client;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. import com.use.test.ws.entity.User;
  5. import com.use.test.ws.server.IService;
  6. /**
  7. * <b>function:</b>请求Spring整合CXF的WebService客户端
  8. */
  9. public class SpringUsersWsClient {
  10. public static void main(String[] args) {
  11. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");
  12. IService service = ctx.getBean("userWsClient", IService.class);
  13. System.out.println("#############Client getUserByName##############");
  14. User user = service.getUserByName("hoojo");
  15. System.out.println(user);
  16. user.setAddress("China-Guangzhou");
  17. service.setUser(user);
  18. }
  19. }

直接运行这个类就OK了。

同事可以参考github上的代码:https://github.com/zhangyuchenoo/webservice

时间: 2024-10-04 12:52:44

一个CXF集成SPRING的WEBSERVICE完整实例的相关文章

CXF集成Spring实现webservice的发布与请求

CXF集成Spring实现webservice的发布(服务端) 目录结构: 主要代码: package com.cxf.spring.pojo; public class User { int id ; String name = null; String address = null; String email = null; public int getId() { return id; } public void setId(int id) { this.id = id; } public

CXF整合Spring开发WebService

刚开始学webservice时就听说了cxf,一直没有尝试过,这两天试了一下,还不错,总结如下: 要使用cxf当然是要先去apache下载cxf,下载完成之后,先要配置环境变量,有以下三步: 1.打开环境变量配置窗口,点击新建,新建%CXF_HOME%变量,值为你下载的cxf所在的目录,我的是D:\tools\apache-cxf-3.1.0 2.在Path变量中新加一句%CXF_HOME%\lib,注意要和已有的path变量用;隔开 3.在CLASSPATH中新加一句%CXF_HOME%\li

xfire集成spring构建webservice

前言:xfire.spring都是比较流行的技术,这里就不再赘述他们各自的优点:本文着重介绍xfire和spring的整合,不会做太深入的探究. 服务端 1. web.xml配置 spring配置部分:contextConfigLocation定义配置文件路径,可以指定全局的配置文件路径. <!-- spring配置 --> <context-param> <param-name>contextConfigLocation</param-name> <

Cxf 集成spring完整示例

1 CXF概述 1.1 CXF介绍 Apache CXF =Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding .DataBinding.Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)

cxf整合spring实现webservice

前面一篇文章中,webservice的服务端与客户端都是单独启动,但是在现实项目中,服务端单独启动太没有实际意义了,还是要整合框架启动,所以今天将记录如何整合spring框架. jar包下载地址如下: http://yun.baidu.com/share/link?shareid=547689626&uk=2836507213 (一).web.xml中添加spring与cxf的配置 <?xml version="1.0" encoding="UTF-8"

使用CXF和spring搭建webService服务

虽然下一个项目需要使用xfire,但是在查资料的过程中还是看到有不少地方都说cxf比xfire更好,cxf继承了xfire,但是不仅仅包含xfire,因此便也一起来尝试尝试.大概是有了xfire的经验吧,cxf的搭建比xfire快了许多. cxf的许多参数感觉和xfire差不多,因此便不做太多的解释,如果不明白的可以参考之前的xfire搭建来促进理解. 搭建过程如下: 1.使用eclipse创建一个maven项目,maven导包的pom.xml的整体内容如下: <project xmlns=&quo

jfinal集成spring cxf做webservice服务

链接地址:http://zhengshuo.iteye.com/blog/2154047 废话不说,直接上代码 新增cxf的plugin CXFPlugin Java代码   package com.jfinal.plugin.spring; import org.apache.cxf.Bus; import org.apache.cxf.bus.spring.SpringBusFactory; import org.apache.cxf.transport.servlet.ServletTra

webservice cxf与spring详解

wsdl文档结构图 JDK方式开发 server端代码 package server; import javax.jws.WebMethod; import javax.jws.WebService; /**  *   *   * SEI:Service Endpoint Interface 发布的服务接口  *  */ @WebService public interface HelloWS { @WebMethod     public String sayHello(String name

Spring集成XFire开发WebService

Spring是目前最流行的JavaEE Framework,但是使用Spring的Spring-WS开发WebService却十分繁琐.XFire是一个简化WebService开发的开源项目,通过Spring和XFire的结合可以大大简化基于Spring Framework的应用中的WebService开发. Spring和XFire可以通过多种方式结合,下文介绍的是笔者常用的一种简单而实用的方法.所用的Spring版本为2.0,XFire版本为1.2.6 1.配置XFire Servlet 在