关于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