webservice快速入门-整合apache-cxf(四)

关于apache-cxf就不多说了。百度看下吧。

由于我是用maven管理的,需要的几个核jar包是:

[html] view plaincopy

  1. <dependency>  
  2.             <groupId>org.apache.cxf</groupId>  
  3.             <artifactId>cxf-api</artifactId>  
  4.             <version>${apache.cxf}</version>  
  5.         </dependency>  
  6.         <dependency>  
  7.             <groupId>org.apache.cxf</groupId>  
  8.             <artifactId>cxf-rt-frontend-jaxws</artifactId>  
  9.             <version>${apache.cxf}</version>  
  10.         </dependency>  
  11.         <!–启动Server时遇到Could not find destination factory for transport http://schemas.xmlsoap.org/soap/http错误 –>  
  12.         <dependency>  
  13.             <groupId>org.apache.cxf</groupId>  
  14.             <artifactId>cxf-rt-transports-http-jetty</artifactId>  
  15.             <version>${apache.cxf}</version>  
  16.         </dependency>  

写个简单的helloword吧。

整体目录结构如下:

和之前一样,先编写服务端代码:

[java] view plaincopy

  1. package com.whaty.test.ws.cxf.service;  
  2.   
  3. import javax.jws.WebParam;  
  4. import javax.jws.WebService;  
  5.   
  6. /**  
  7.  * @name:HelloWorldService.java  
  8.  * @desc:  
  9.  * @author:lizhuang 
  10.  * @createTime:2012-12-28 下午04:37:28 
  11.  */  
  12. @WebService  
  13. public class HelloWorldService {  
  14.     //@WebParam(name = “name”)意思是指定参数的名称为name,否则默认为arg0,arg1…..  
  15.     public String sayHello(@WebParam(name = “name”) String name) {  
  16.         System.out.println(“~~~~~~~~~~~~~~~~”);  
  17.         return name + ” say: Hello World “;  
  18.     }  
  19. }  

服务端接写好之后,我们先发布看一下有没有问题:

[java] view plaincopy

  1. package com.whaty.test.ws.cxf.service.deploy;  
  2.   
  3. import javax.xml.ws.Endpoint;  
  4.   
  5. import com.whaty.test.ws.cxf.service.HelloWorldService;  
  6.   
  7. /** 
  8.  * @name:DeployHelloWorldService.java 
  9.  * @desc: 
  10.  * @author:lizhuang 
  11.  * @createTime:2012-12-28 下午04:39:45 
  12.  */  
  13. public class DeployHelloWorldService {  
  14.     public static void deployService() {  
  15.         System.out.println(“Server start ……”);  
  16.         HelloWorldService service = new HelloWorldService();  
  17.         String address = “http://localhost:9000/helloWorld”;  
  18.         Endpoint.publish(address, service);  
  19.     }  
  20.   
  21.     public static void main(String[] args) throws InterruptedException {  
  22.         // 发布WebService  
  23.         deployService();  
  24.         System.out.println(“server ready ……”);  
  25.         //Thread.sleep(1000 * 300);  
  26.         //System.out.println(“server exiting”);  
  27.         // 休眠300秒后就退出  
  28.         //System.exit(0);  
  29.     }  
  30. }  

右键运行发布,如果出现server ready应该就没有什么问题了。

注意:和之前的不同,这里的cxf服务端不是写的接口,也没有所谓的实现类和endpoint了。当然你可以写,也没有问题。我们就用默认最简便的方法实现它。

下面编写客户端:

首先写接口,这个接口的方法和服务端里面的方法是一样的,包括目录包的层次结构都是一样的,都放在com.whaty.test.ws.cxf.service包下,不一样会出错,与之前不同的是,客户端这次要写接口:

[java] view plaincopy

  1. package com.whaty.test.ws.cxf.service;  
  2.   
  3. import javax.jws.WebParam;  
  4. import javax.jws.WebService;  
  5.   
  6. /**  
  7.  * @name:IHelloWorldService.java  
  8.  * @desc:  
  9.  * @author:lizhuang 
  10.  * @createTime:2012-12-28 下午05:29:53 
  11.  */  
  12. @WebService  
  13. public interface IHelloWorldService {  
  14.     public String sayHello(@WebParam(name = “name”) String name);  
  15. }  

访问服务端:

[html] view plaincopy

  1. package com.whaty.test.ws.cxf.service.client;  
  2.   
  3. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  
  4.   
  5. import com.whaty.test.ws.cxf.service.IHelloWorldService;  
  6.   
  7.   
  8.   
  9. /**  
  10.  * @name:HelloWorldServiceClient.java  
  11.  * @desc:  
  12.  * @author:lizhuang  
  13.  * @createTime:2012-12-28 下午04:45:49  
  14.  */  
  15. public class HelloWorldServiceClient {  
  16.     public static void main(String[] args) {  
  17.         // 调用WebService  
  18.         JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();  
  19.         factory.setServiceClass(IHelloWorldService.class);  
  20.         factory.setAddress(“http://localhost:9000/helloWorld”);  
  21.   
  22.         IHelloWorldService service = (IHelloWorldService) factory.create();  
  23.         System.out.println(“[result]” + service.sayHello(“tudou”));  
  24.     }  
  25. }  

控制台:

[result]tudou say: Hello World

成功。

 本来打算将源码传上来的,结果csdn太垃圾,2次传到97%2次传到99%就是不给我传上去。实在气得没话说。就这样吧。

放在华为网盘吧。

http://dl.vmall.com/c0cvkpkx7o

标签