日期:2014-05-16  浏览次数:20563 次

构建基于CXF的WebService服务(1)--创建HelloWorld服务

1、Apache CXF简介

        Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和XFire 两大开源项目的精华,提供了对 JAX-WS全面的支持,并且提供了多种Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。

        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 设计得更加直观与容易使用。有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA。

-----------------------摘自《百度百科》-----------------------

2、CXF依赖包

由于我们创建的是一个简单的WebService服务,并不运行在Tomcat的中,而是要借助jetty容器,所以这里要引入jetty的支持。

asm-3.3.1.jar
commons-codec-1.7.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
cxf-2.7.7.jar
geronimo-servlet_3.0_spec-1.0.jar
jetty-continuation-8.1.12.v20130726.jar
jetty-http-8.1.12.v20130726.jar
jetty-io-8.1.12.v20130726.jar
jetty-security-8.1.12.v20130726.jar
jetty-server-8.1.12.v20130726.jar
jetty-util-8.1.12.v20130726.jar
neethi-3.0.2.jar
stax2-api-3.1.1.jar
woodstox-core-asl-4.2.0.jar
wsdl4j-1.6.3.jar
xmlschema-core-2.0.3.jar

3、创建HelloWorld服务

3.1创建HelloWorld接口

package com.tiamaes.webservice.test;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

/**  
 * <p>类描述:  WebService服务端接口</p>
 * <p>修改人:Jaune </p>
 * <p>修改时间:2014-5-8 上午11:54:38  </p>
 * <p>修改备注:  </p>
 * @version  
 */

@WebService
public interface HelloWorldService {
	
	@WebMethod
	public String syaHello(@WebParam(name="userName")String userName);
}

        @WebMethod 标注要暴露的方法 @WebParam要暴露的参数

3.2创建HelloWorld实现类

package com.tiamaes.webservice.test.impl;
import javax.jws.WebService;
import com.tiamaes.webservice.test.HelloWorldService;

/**  
 * <p>类描述: WebService的具体实现 </p>
 * <p>修改人:Jaune </p>
 * <p>修改时间:2014-5-8 上午11:56:09  </p>
 * @version  
 */
@WebService(endpointInterface="com.tiamaes.webservice.test.HelloWorldService",serviceName="helloWorldService")
public class HelloWorldServiceImpl implements HelloWorldService {

	/* (non-Javadoc)
	 * @see com.tiamaes.webservice.test.HelloWorldService#syaHello(java.lang.String)
	 */
	public String syaHello(String userName) {
		System.out.println("HelloWorldServiceImpl.sayHello("+userName+")");
		return "Hello "+userName;
	}
}
        实现也需要加上@WebService注解,并且在endpointInterface中指定接口类。

4、创建服务端

4.1、方法一

package com.tiamaes.webservice.server;

import javax.xml.ws.Endpoint;

import com.tiamaes.webservice.test.HelloWorldService;
import com.tiamaes.webserv