Apache的CXF创建Web Services非常简单。
1、下载CXF发布包,http://cxf.apache.org/download.html ,我这里下载的是apache-cxf-2.7.0.zip
2、解压发布包。
3、建立一个Java Project,把\apache-cxf-2.7.0\lib目录中的jar包都引入到项目中。
4、编写服务器端代码
1)服务接口
package cn.luxh.app.ws;
import javax.jws.WebService;
@WebService
public interface Calculator {
/**
* 提供加法服务的接口方法
* @param num1 加数1
* @param num2 加数2
* @return
*/
int add(int num1,int num2);
}
2)服务实现类
package cn.luxh.app.ws;
import javax.jws.WebService;
@WebService(endpointInterface="cn.luxh.app.ws.Calculator",serviceName="Calculator")
public class CalculatorImpl implements Calculator{
@Override
public int add(int num1, int num2) {
return num1 + num2;
}
}
其中@WebService在类上注释,表示这个类的方法就变成WebService方法了。属性endpointInterface指定服务的接口,属性serviceName指定服务名称。
5、发布服务
package cn.luxh.app.ws;
import javax.xml.ws.Endpoint;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
/**
* 发布服务
* @author Luxh
* 2012-11-5
*/
public class CalculatorServer {
/**
* 发布方法一
* 使用Endpoint发布服务
*/
private static void server1() {
System.out.println("Start Server1...");
CalculatorImpl implementor = new CalculatorImpl();
String address = "http://localhost:8080/app/ws/Calculator";
Endpoint.publish(address, implementor);
}
/**
* 发布方法二
* 使用JaxWsServerFactoryBean创建服务
*/
private static void server2() {
System.out.println("Start Server2...");
CalculatorImpl implementor = new CalculatorImpl();
//create Server endpoints
JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
svrFactory.setServiceClass(Calculator.class);//设置提供服务的接口
svrFactory.setAddress("http://localhost:8080/app/ws/Calculator");//设置提供服务的地址
svrFactory.setServiceBean(implementor);//设置服务接口的实现类
svrFactory.create();
}
public static void main(String[] args) throws InterruptedException {
server2();
System.out.println("Server ready...");
Thread.sleep(5*60*1000);
System.out.println("Server exiting...");
System.exit(0);
}
}
6、在浏览器访问:http://localhost:8080/app/ws/Calculator?wsdl 出现下面的内容,说明服务发布成功。

7、编写客户端代码
1)使用wsimport命令。进入命令行,切换到jdk的bin目录,wsimport命令在bin目录中
2)执行:wsimport -p cn.luxh.app.ws -keep http://localhost:8080/app/ws/Calculator?wsdl
-p : 指定包名 -keep :保持生成的文件

3)、命令执行结束后,会在当前目录下生成客户端代码。
4)、新建一个Java Project,做为客户端测试,把刚才生成的客户端代码复制到项目中即可。

5)、测试代码
package cn.luxh.app.client;
import cn.luxh.app.ws.Calculator;
import cn.luxh.app.ws.CalculatorService;
public class CXFClient {
public static void main(String[] args) {
Calculator calculator = new CalculatorService().getCalculatorPort();
int sum = calculator.add(1, 2);
System.out.println("sum is : "+sum);
}
}
6)、启动服务器端后,执行上述客户端代码即可。