Java WebService开源框架CXF详解
Java WebService开源框架CXF详解
Java WebService开源框架CXF是Apache Software Foundation的一个二级项目,它提供了一种简单、易用的方式来实现JAX-WS、JAXB、JAX-RS和其他Web Services相关的标准。CXF项目是基于XFire项目和FUSE组件的的开源项目,并在这两个项目的基础上进行升级、改进和完善。
简介
CXF支持SOAP和RESTful Web Service,可以使用JAX-WS或者JAX-RS规范的API来调用Web Service服务,还可以通过自定义的API来访问Web Service服务。除此之外,CXF还支持Java EE容器集成,包括Tomcat、Jetty、WebSphere、WebLogic等等。 CXF支持各种开源应用程序集成,例如Spring和OSGI。
在CXF的众多特点之中,最为突出的就是对Web Service的支持,CXF提供了多种方式来发布和使用Web Service服务,具有灵活性,并且可与目前大多数Web Service规范和模式兼容。
安装CXF框架
CXF可以从官方网站[http://cxf.apache.org/]下载最新的发行版,也可以通过Maven依赖来获取CXF。在使用CXF之前,需要先安装Java和Maven,然后按照以下步骤进行操作:
- 下载CXF压缩包,并解压到指定目录下
- 在Maven项目中,引入CXF相关的依赖(具体依赖库请参考CXF的官方文档)
创建一个简单的Web Service服务
CXF提供了多种方式来发布Web Service服务,下面介绍最简单的方式——基于代码的方式。代码如下:
package com.example;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public class HelloService {
@WebMethod
public String sayHello(@WebParam(name="name") String name) {
return "Hello " + name;
}
}
首先需要在HelloService上添加@WebService注解,表明这个类是一个Web Service服务。接着在sayHello方法前添加@WebMethod注解,并使用@WebParam注解表明参数的名称和类型。
下一步,需要将HelloService发布为Web Service服务。代码如下:
package com.example;
import javax.xml.ws.Endpoint;
public class Server {
public static void main(String[] args) {
String address = "http://localhost:8080/hello";
Endpoint.publish(address, new HelloService());
}
}
首先需要指定Web Service的发布地址,然后调用Endpoint.publish方法发布服务。注意,这里的HelloService是我们上面写的一个简单的Web Service服务。
当Server运行时,它将启动一个轻量级HTTP服务器,监听来自客户端的请求。终端输出以下内容:
INFO: Started
创建一个Web Service客户端
使用CXF创建Web Service客户端也很简单,可以直接使用代码生成工具,或者手动编写Java代码(这里以手动编写代码为例)。代码如下:
package com.example;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebMethod;
import javax.xml.ws.WebParam;
@WebServiceClient(name = "HelloService", targetNamespace = "http://example.com/", wsdlLocation = "http://localhost:8080/hello?wsdl")
public class HelloServiceClient extends Service {
public HelloServiceClient() {
super(HelloServiceClient.class.getClassLoader(), null);
}
@WebEndpoint(name = "HelloServicePort")
public HelloServicePortType getHelloServicePort() {
return super.getPort(new QName("http://example.com/", "HelloServicePort"), HelloServicePortType.class);
}
@WebService(name = "HelloServicePortType", targetNamespace = "http://example.com/")
public interface HelloServicePortType {
@WebMethod(operationName = "sayHello", action = "urn:SayHello")
public String sayHello(@WebParam(name="name") String name);
}
}
在HelloServiceClient中,我们使用@WebServiceClient注解来指定Web Service服务的名称、命名空间和wsdl文件的位置。接着,我们使用@WebEndpoint注解来指定服务的端口类型。需要注意的是,在实现类中,需要实现HelloServicePortType接口,该接口中包括Web Service提供的方法。
现在,我们可以通过以下方法调用Web Service服务:
HelloServiceClient helloServiceClient = new HelloServiceClient();
HelloServicePortType portType = helloServiceClient.getHelloServicePort();
String response = portType.sayHello("Jack");
System.out.println("Response:" + response);
输出结果为:
Response:Hello Jack
结语
CXF是一个非常强大的开源Web Service框架,它提供了丰富的功能,支持SOAP和RESTful Web Service,并且兼容标准的Web Service规范和实现方式。通过本文的介绍,你可以初步了解CXF的用法和特点,希望能对你在Web Service方面的开发工作有所帮助。