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)、启动服务器端后,执行上述客户端代码即可。