关于apache-cxf就不多说了。百度看下吧。
由于我是用maven管理的,需要的几个核jar包是:
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-api</artifactId> <version>${apache.cxf}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${apache.cxf}</version> </dependency> <!--启动Server时遇到Could not find destination factory for transport http://schemas.xmlsoap.org/soap/http错误 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>${apache.cxf}</version> </dependency>
写个简单的helloword吧。
整体目录结构如下:
和之前一样,先编写服务端代码:
package com.whaty.test.ws.cxf.service; import javax.jws.WebParam; import javax.jws.WebService; /** * @name:HelloWorldService.java * @desc: * @author:lizhuang * @createTime:2012-12-28 下午04:37:28 */ @WebService public class HelloWorldService { //@WebParam(name = "name")意思是指定参数的名称为name,否则默认为arg0,arg1..... public String sayHello(@WebParam(name = "name") String name) { System.out.println("~~~~~~~~~~~~~~~~"); return name + " say: Hello World "; } }
服务端接写好之后,我们先发布看一下有没有问题:
package com.whaty.test.ws.cxf.service.deploy; import javax.xml.ws.Endpoint; import com.whaty.test.ws.cxf.service.HelloWorldService; /** * @name:DeployHelloWorldService.java * @desc: * @author:lizhuang * @createTime:2012-12-28 下午04:39:45 */ public class DeployHelloWorldService { public static void deployService() { System.out.println("Server start ……"); HelloWorldService service = new HelloWorldService(); String address = "http://localhost:9000/helloWorld"; Endpoint.publish(address, service); } public static void main(String[] args) throws InterruptedException { // 发布WebService deployService(); System.out.println("server ready ……"); //Thread.sleep(1000 * 300); //System.out.println("server exiting"); // 休眠300秒后就退出 //System.exit(0); } }
右键运行发布,如果出现server ready应该就没有什么问题了。
注意:和之前的不同,这里的cxf服务端不是写的接口,也没有所谓的实现类和endpoint了。当然你可以写,也没有问题。我们就用默认最简便的方法实现它。
下面编写客户端:
首先写接口,这个接口的方法和服务端里面的方法是一样的,包括目录包的层次结构都是一样的,都放在com.whaty.test.ws.cxf.service包下,不一样会出错,与之前不同的是,客户端这次要写接口:
package com.whaty.test.ws.cxf.service; import javax.jws.WebParam; import javax.jws.WebService; /** * @name:IHelloWorldService.java * @desc: * @author:lizhuang * @createTime:2012-12-28 下午05:29:53 */ @WebService public interface IHelloWorldService { public String sayHello(@WebParam(name = "name") String name); }
访问服务端:
package com.whaty.test.ws.cxf.service.client; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import com.whaty.test.ws.cxf.service.IHelloWorldService; /** * @name:HelloWorldServiceClient.java * @desc: * @author:lizhuang * @createTime:2012-12-28 下午04:45:49 */ public class HelloWorldServiceClient { public static void main(String[] args) { // 调用WebService JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(IHelloWorldService.class); factory.setAddress("http://localhost:9000/helloWorld"); IHelloWorldService service = (IHelloWorldService) factory.create(); System.out.println("[result]" + service.sayHello("tudou")); } }
控制台:
[result]tudou say: Hello World
成功。
本来打算将源码传上来的,结果csdn太垃圾,2次传到97%2次传到99%就是不给我传上去。实在气得没话说。就这样吧。
放在华为网盘吧。
http://dl.vmall.com/c0cvkpkx7o