分享

CXF 2.0 webservice 学习笔记

 奶奶熊 2007-11-12

对比了一下CXF2 和 AXIS 2 还是选择在框架中集成CXF2。不过CXF2的文档更新的真是慢啊,试了一下,目前CXF2支持的两种绑定方式jaxb2和aegis,看了半天源码总算调通了。又忍不住批一下他的文档,给的都是半调子的例子,希望开发小组能尽快完善啊!

先放一个HelloWold的aegis的配置:
一、server 端:
1. HelloWorld.java

代码
  1. package demo.spring;   
  2.   
  3. import javax.jws.WebService;   
  4.   
  5. @WebService  
  6. public interface HelloWorld {   
  7.     String sayHi(String text);   
  8. }   

 

2.HelloWorldImpl.java

代码
  1. package demo.spring;   
  2.   
  3. import javax.jws.WebService;   
  4.   
  5. @WebService(endpointInterface = "demo.spring.HelloWorld")   
  6. public class HelloWorldImpl implements HelloWorld {   
  7.   
  8.     public String sayHi(String text) {   
  9.         return "Hello " + text;   
  10.     }   
  11. }   

 

3.beans.xml

代码
  1. <beans xmlns="http://www./schema/beans"  
  2.     xmlns:xsi="http://www./2001/XMLSchema-instance"  
  3.     xmlns:jaxws="http://cxf./jaxws"  
  4.     xsi:schemaLocation="   
  5. http://www./schema/beans http://www./schema/beans/spring-beans.xsd   
  6. http://cxf./jaxws http://cxf./schemas/jaxws.xsd">  
  7.   
  8.     <import resource="classpath:META-INF/cxf/cxf.xml" />  
  9.     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
  10.     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
  11.   
  12.     <bean id="jaxWsServiceFactoryBean"  
  13.         class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">  
  14.         <property name="wrapped" value="true" />  
  15.         <property name="dataBinding" ref="aegisBean" />  
  16.     </bean>  
  17.   
  18.     <bean id="aegisBean"  
  19.         class="org.apache.cxf.aegis.databinding.AegisDatabinding" />  
  20.   
  21.     <jaxws:endpoint id="CollectiveServices"  
  22.         implementor="demo.spring.HelloWorldImpl" address="/HelloWorld">  
  23.         <jaxws:serviceFactory>  
  24.             <ref bean="jaxWsServiceFactoryBean"/>  
  25.         </jaxws:serviceFactory>  
  26.     </jaxws:endpoint>  
  27. </beans>  

 

4.web.xml

代码
  1. <web-app version="2.4" xmlns="http://java./xml/ns/j2ee"  
  2.     xmlns:xsi="http://www./2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://java./xml/ns/j2ee http://java./xml/ns/j2ee/web-app_2_4.xsd">  
  4.   
  5.     <context-param>  
  6.         <param-name>contextConfigLocation</param-name>  
  7.         <param-value>WEB-INF/beans.xml</param-value>  
  8.     </context-param>  
  9.   
  10.     <listener>  
  11.         <listener-class>  
  12.             org.springframework.web.context.ContextLoaderListener   
  13.         </listener-class>  
  14.     </listener>  
  15.   
  16.     <servlet>  
  17.         <servlet-name>CXFServlet</servlet-name>  
  18.         <servlet-class>  
  19.             org.apache.cxf.transport.servlet.CXFServlet   
  20.         </servlet-class>  
  21.         <load-on-startup>1</load-on-startup>  
  22.     </servlet>  
  23.   
  24.     <servlet-mapping>  
  25.         <servlet-name>CXFServlet</servlet-name>  
  26.         <url-pattern>/ws/*</url-pattern>  
  27.     </servlet-mapping>  
  28.   
  29. </web-app>  

 

二、客户端

1.ClientTest.java

代码
  1. package demo.spring.client;   
  2.   
  3. import static org.junit.Assert.assertEquals;   
  4.   
  5. import org.apache.cxf.aegis.databinding.AegisDatabinding;   
  6. import org.apache.cxf.frontend.ClientProxyFactoryBean;   
  7. import org.junit.AfterClass;   
  8. import org.junit.BeforeClass;   
  9. import org.junit.Test;   
  10. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  11.   
  12. import demo.spring.HelloWorld;   
  13.   
  14. public final class ClientTest {   
  15.   
  16.     private static ClassPathXmlApplicationContext context;   
  17.   
  18.     @BeforeClass  
  19.     public static void beforeClass() {   
  20.         context = new ClassPathXmlApplicationContext(   
  21.                 new String[] { "demo/spring/client/client-beans.xml" });   
  22.     }   
  23.   
  24.     @AfterClass  
  25.     public static void afterClass() {   
  26.         context = null;   
  27.     }   
  28.   
  29.     @Test  
  30.     public void testSayHiWithSpringConfig() throws Exception {   
  31.   
  32.         HelloWorld client = (HelloWorld) context.getBean("client");   
  33.   
  34.         String response = client.sayHi("Joe");   
  35.         assertEquals("Hello Joe", response);   
  36.     }   
  37.        
  38.     /**  
  39.      * 这个官方有例子(http://cwiki./CXF20DOC/aegis-databinding.html)  
  40.      *   
  41.      * @throws Exception  
  42.      */  
  43.     @Test  
  44.     public void testSayHiByCode() throws Exception {   
  45.   
  46.          ClientProxyFactoryBean factory = new ClientProxyFactoryBean();   
  47.          factory.setServiceClass(HelloWorld.class);   
  48.          factory.setAddress("http://localhost:8080/testCxf/ws/HelloWorld");   
  49.          factory.getServiceFactory().setDataBinding(new AegisDatabinding());   
  50.          HelloWorld client = (HelloWorld) factory.create();   
  51.   
  52.          assertEquals("Hello Joe", client.sayHi("Joe"));   
  53.     }      
  54. }   
  55.   

 

2.client_beans.xml(testSayHiWithSpringConfig()中需要使用的配置文件)

代码
  1. <beans xmlns="http://www./schema/beans"  
  2.     xmlns:xsi="http://www./2001/XMLSchema-instance"  
  3.     xmlns:jaxws="http://cxf./jaxws"  
  4.     xsi:schemaLocation="   
  5. http://www./schema/beans http://www./schema/beans/spring-beans-2.0.xsd   
  6. http://cxf./jaxws http://cxf./schema/jaxws.xsd">  
  7.   
  8.        
  9.     <bean id="aegisBean"  
  10.         class="org.apache.cxf.aegis.databinding.AegisDatabinding" />  
  11.            
  12.     <bean id="serviceFactoryBean" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">  
  13.         <property name="dataBinding" ref="aegisBean" />  
  14.     </bean>  
  15.   
  16.     <bean id="client" class="demo.spring.HelloWorld"  
  17.         factory-bean="clientFactory" factory-method="create" />  
  18.   
  19.     <bean id="clientFactory"  
  20.         class="org.apache.cxf.frontend.ClientProxyFactoryBean">  
  21.         <property name="serviceFactory" ref="serviceFactoryBean" />  
  22.         <property name="serviceClass"  
  23.             value="demo.spring.HelloWorld" />  
  24.         <property name="address"  
  25.             value="http://localhost:8080/testCxf/ws/HelloWorld" />  
  26.     </bean>  
  27.   
  28. </beans>  

 

 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多