spring和CXF集成来实现webservices

转自:http://essay.iteye.com/blog/1775288

一、 准备工作。

        1、下载apache-cxf的应用包,地址:http://cxf.apache.org/download.html,我选择的是2.4.1版本。



二、发布webservices

1新建webproject ,并加入apache-cxf-2.4.1\lib所有包,编写要发布的web service接口和实现.这一步,与前面一样。 

1)创建一个接口类,并加上webservice标记

Java代码   收藏代码
  1. import javax.jws.WebService;  
  2. @WebService   
  3. public interface HelloWorld {    
  4.      public String sayHello(String text);    
  5. }  

 


2)创建上面这个接口的实现类

Java代码   收藏代码
  1. import javax.jws.WebService;    
  2. @WebService(endpointInterface="test.HelloWorld")    
  3. public class HelloWorldImpl implements HelloWorld {    
  4.       public String sayHello(String text) {    
  5.                   return "Hello" + text ;    
  6.     }    
  7.   }   

 

@WebService 注解表示是要发布的web服务,endpointInterface的值是该服务类对应的接口。

2.spring-cxf.xml配置发布的web service 

Xml代码   收藏代码
  1. <?xmlversionxmlversion="1.0"encoding="UTF-8"?>  
  2. <beansxmlnsbeansxmlns="http://www.springframework.org/schema/beans"  
  3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.    xmlns:jaxws="http://cxf.apache.org/jaxws"  
  5.    xsi:schemaLocation="  
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  7. http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd" >  
  8.    <importresourceimportresource="classpath:META-INF/cxf/cxf.xml"/>   
  9.    <importresourceimportresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>   
  10.    <importresourceimportresource="classpath:META-INF/cxf/cxf-servlet.xml"/>   
  11.    
  12.    <beanidbeanid="hello"class="test.HelloWorldImpl"/>   
  13.    <jaxws:endpointidjaxws:endpointid="helloWorld"implementor="#hello"   
  14.        address="/HelloWorld"/>   
  15.   </beans >  

 

注意:<jaxws:endpointid="helloWorld"implementor="#hello"   address="/HelloWorld"/> 

id:指在spring配置的beanID.

Implementor:指明具体的实现类.

Address:指明这个web service的相对地址,

 

3. 配置web.xml文件:

Xml代码   收藏代码
  1. <?xmlversionxmlversion="1.0"encoding="UTF-8"?>   
  2. <web-appversionweb-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"   
  3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee     
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >    
  6.    <context-param >    
  7.        <param-name > contextConfigLocation</param-name >    
  8.   
  9.                    <!--spring配置文件放在WEB-INF目录下-->  
  10.        <param-value > /WEB-INF/spring-cxf.xml</param-value >    
  11.    </context-param >    
  12.    <listener >    
  13.        <listener-class >    
  14.          org.springframework.web.context.ContextLoaderListener   
  15.        </listener-class >    
  16.    </listener >    
  17.   
  18.          <servlet >    
  19.        <servlet-name > CXFServlet</servlet-name >    
  20.        <servlet-class >    
  21.             org.apache.cxf.transport.servlet.CXFServlet    
  22.        </servlet-class >    
  23.        <load-on-startup > 1</load-on-startup >    
  24.    </servlet >    
  25.    <servlet-mapping >    
  26.        <servlet-name > CXFServlet</servlet-name >    
  27.        <url-pattern > /*</url-pattern >    
  28.    </servlet-mapping >    
  29. </web-app >    

 

4.部署到tomcat服务器,输入:http://localhost:8080/<web-app-name>/HelloWorld?wsdl,将显示这个web servicewsdl.

注意:如果web.xml配置<servlet-name > CXFServlet</servlet-name >  

       <url-pattern > /ws/*</url-pattern >  

则访问地址为:http://localhost:8080/<web-app-name>/ws/HelloWorld?wsdl 

到此webservices就发布成功了。

 

 

三、创建一个客户端来调用webservices

 

1、同样新建java project ,并加入apache-cxf-

2.0.7

\lib所有包,添加到Build Path

 

2、将webservice的接口类导出成jar包,也添加到Build Path,主要目的是客户端要用到服务端的HelloWorld这个类。如果不想导入这个jar包也可以,只要在客户端创建一个一摸一样的接口类:HelloWorld,特别要注意以下两点:

 

    1)接口前面要添加@Webservice的标记,不然会抛出一个 javax.xml.ws.WebServiceException: Could not find wsdl:binding operation info for web method sayHelloWorld.

 

    2)包路径也要一样,不然会抛出一个ClassCastException: $Proxy29 cannot be cast to...

 

3、配置spring-client.xml

Xml代码   收藏代码
  1. <beansxmlnsbeansxmlns="http://www.springframework.org/schema/beans"  
  2.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.    xmlns:jaxws="http://cxf.apache.org/jaxws"  
  4.    xsi:schemaLocation="  
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
  6. http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd" >  
  7.       <!-- 这个class的包路径和类名和服务端提供web服务的接口一致-->  
  8.    <beanidbeanid="client"class="test.HelloWorld"  
  9.      factoryfactory-bean="clientFactory"factory-method="create"/>  
  10.      
  11.    <beanidbeanid="clientFactory"class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean" >   
  12.   
  13.      <!-- 这个class的包路径和类名和服务端提供web服务的接口一致-->  
  14.      <propertynamepropertyname="serviceClass"value="test.HelloWorld"/>  
  15.   
  16.      <!-- 这个address一定要注意,正确的-->  
  17.      <propertynamepropertyname="address"value="http://localhost:8080/<web-app-name>/HelloWorld"/>  
  18.     </bean >        
  19. </beans >  

 

4.测试:

Java代码   收藏代码
  1. importorg.springframework.context.ApplicationContext;  
  2. importorg.springframework.context.support.ClassPathXmlApplicationContext;  
  3.    
  4. importtest.HelloWorld;  
  5.    
  6. public class Test {    
  7.        
  8.    public static void main(String[] args) {    
  9.    
  10.         ApplicationContext ctx =newClassPathXmlApplicationContext(    
  11.                "spring-client.xml");    
  12.         HelloWorld client = (HelloWorld) ctx.getBean("client");    
  13.         String result = client.sayHello("Glen!");    
  14.         System.out.println(result);    
  15.     }    
  16. }   

 

结果输出“Hello,Glen!”,测试通过,至此一个webservice的调用也成功了。

你可能感兴趣的:(webservice)