Apache CXF 入门示例
Apache CXF = Celtix + XFire,提供了对 JAX-WS全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。
CXF 框架是一种基于 Servlet 技术的 SOA 应用开发框架,要正常运行基于 CXF 应用框架开发的企业应用,除了 CXF 框架本身之外,还需要 JDK 和 Servlet 容器的支持。
下载CXF:http://cxf.apache.org/download.html
简单的App项目入手
建立CXF服务端:
接口HelloWorld.java
@WebService public interface HelloWorld { @WebMethod String sayHi(@WebParam(name="name") String name); }
实现类HelloWorldImpl.java
@WebService(endpointInterface="cn.nevo.cxf.ws.HelloWorld", serviceName="HelloWorldImpl") public class HelloWorldImpl implements HelloWorld { public String sayHi(String name) { return name + ", The Apache CXF Application!"; } }
服务端Server.java
public class Server { public static void main(String[] args) { HelloWorld hw = new HelloWorldImpl(); //使用Endpoint.publish发布Web Service Endpoint.publish("http://192.168.1.14/hello", hw); System.out.println("Web Service发布成功!"); } }
启动服务,CXF内置了Jetty服务器,此时可以通过http://192.168.1.14/hello?wsdl访问暴露接口的详细信息
建立CXF客户端:
首先新建一个空的App项目,cmd下进入到此项目的src目录,输入:
F:\eclipse\work\cxf_ws_client\src>wsdl2java http://192.168.1.14/hello?wsdl
会自动生成如下红色方框内所示的代码,wsdl2java是CXF自带的命令,其它命令见其bin目录(配置bin的path),修改了服务端的url后要重新通过wsdl2java命令生成客户端代码改变其相应的wsdl信息。
编写客户端代码Client.java
/** * Web Service客户端 * @author yanghong.zhou * */ public class Client { public static void main(String[] args) { HelloWorldImpl factory = new HelloWorldImpl(); //返回远程web service的代理 HelloWorld hw = factory.getHelloWorldImplPort(); System.out.println(hw.sayHi("hunan")); } }
在Jetty服务器启动的情况下,运行Client.java输出:hunan, The Apache CXF Application!
</span></span>