Apache CXF 之HelloWorld
Apache CXF 介绍
Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。目前它仍只是 Apache 的一个孵化项目。
Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。
CXF 包含了大量的功能特性,但是主要集中在以下几个方面:
支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。
Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL 优先开发,也支持从 Java 的代码优先开发模式。
支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA。
CXF 之HelloWorld
本次使用的使用的CXF版本是3.0.4,可以访问Apache站点下载Apache CXF安装包。
CXF 服务端程序:
1) 在Eclipse IDE中创建一个新的Java项目,本次命名为hello_cxf_server。
2) 在项目中添加CXF安装包中lib下的依赖包。
3) 编写服务接口
package com.cxf.services;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface SayHello {
public String sayHello(@WebParam(name="name") String name);
}
@WebService和@WebParam 注释是必须的。@WebService注释说明这是一个Web Services。@WebParam注释说明这个参数的名称。因为Java接口不存储类文件的参数名称。如果省略掉参数名称,系统将被命名为arg0。
4) 编写服务实现类
package com.cxf.services.impl;
import javax.jws.WebParam;
import javax.jws.WebService;
import com.cxf.services.SayHello;
@WebService(endpointInterface="com.cxf.services.SayHello",
serviceName="SayHelloImpl")
public class SayHelloImpl implements SayHello{
@Override
public String sayHello(@WebParam(name="name") String name) {
return "Hello " + name;
}
}
5) 发布服务
package com.cxf.server;
import javax.xml.ws.Endpoint;
import com.cxf.services.SayHello;
import com.cxf.services.impl.SayHelloImpl;
public class ServerMain {
public ServerMain(){
System.out.println("Starting Server");
SayHello sayHello = new SayHelloImpl();
String address = "http://localhost:9000/RickyService";
Endpoint.publish(address, sayHello);
}
public static void main(String[] args) throws InterruptedException {
new ServerMain();
System.out.println("Server ready......");
}
}
6) 查看WSDL文档
在浏览器中输入http://localhost:9000/RickyService?wsdl
CXF 客户端程序:
1) 在Eclipse IDE中创建一个新的Java项目,本次命名为hello_cxf_client。
2) 在项目目录下使用CXF提供的wsdl2java.bat,实现WSDL文档生成Java代码
启动CXF 服务,在客户端程序目录下使用wsdl2java http://localhost:9000/RickyService?wsdl命令
生成对应得Java代码
必须在CXF服务启动后才能执行wsdl2java命令成功
3) 访问和调用服务
package com.cxf.client;
import com.cxf.services.SayHello;
import com.cxf.services.impl.SayHelloImpl;
public class ClientMain {
public ClientMain(){}
public static void main(String[] args) {
SayHelloImpl factory = new SayHelloImpl();
SayHello sayHello = factory.getSayHelloImplPort();
System.out.println(sayHello.sayHello("Rickesy"));
}
}
4) 查看WSDL文档
在浏览器中输入http://localhost:9000/RickyService?wsdl=SayHello.wsdl
分别启动服务端和客户端,可在客户端控制台看到 Hello Rickesy 结果输出
CXF 服务单和客户端目录结构: