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

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

    直接运行这个类就OK了。

     

     

     

     

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

  • 相关阅读:
    [noip2010]关押罪犯 并查集
    双栈排序 noip2008
    欧拉函数
    中国剩余定理(孙子定理)
    求组合数
    线性素数筛
    洛谷 P2661 信息传递
    图的最短路
    Mzc和男家丁的游戏
    最佳旅游线路
  • 原文地址:https://www.cnblogs.com/zqyanywn/p/6443257.html
Copyright © 2011-2022 走看看