构建基于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.webservice.test.impl.HelloWorldServiceImpl;

/**
 * <p>类描述: WebService服务 </p>
 * <p>修改人:Jaune </p>
 * <p>修改时间:2014-5-8 上午11:59:02  </p>
 * @version
 */
public class HelloWorldServer {

	public static void main(String[] args) {
		HelloWorldService service = new HelloWorldServiceImpl();
		String address = "http://localhost:8080/hello";
		Endpoint.publish(address, service);
	}
}

只需要在路径中指定端口和路径就可以用Endpoint的publish方法来发布一个WebService服务

4.2、方法二

package com.tiamaes.webservice.server;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.tiamaes.webservice.test.HelloWorldService;
import com.tiamaes.webservice.test.impl.HelloWorldServiceImpl;

/**
 * <p>类描述: 利用JaxWsServerFactoryBean 创建服务 </p>
 * <p>修改人:Jaune </p>
 * <p>修改时间:2014-5-10 上午08:55:05  </p>
 * @version
 */
public class HelloWorldJAXServer {

	public static void main(String[] args) {
		HelloWorldServiceImpl impl = new HelloWorldServiceImpl();
		JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
		factory.setAddress("http://localhost:8080/hello");
		factory.setServiceClass(HelloWorldService.class);
		factory.setServiceBean(impl);
		factory.create();
	}
}

Endpint与JaxWsServerFactoryBean的方式二选一,两种方法都可以创建简单的WebService服务

5、创建客户端

5.1、方法一

package com.tiamaes.webservice.test.test;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.tiamaes.webservice.test.HelloWorldService;

/**
 * <p>类描述:  </p>
 * <p>修改人:Jaune </p>
 * <p>修改时间:2014-5-8 下午02:22:48  </p>
 * @version
 */
public class HelloWorldTest {

	public static void main(String[] args) {
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(HelloWorldService.class);
        factory.setAddress("http://127.0.0.1:8080/hello?wsdl");
        HelloWorldService service = (HelloWorldService) factory.create();
        System.out.println(">>>>>>>>Client: " + service.syaHello("Tom"));

	}
}

这种方式调用需要客户端的接口类与服务端的接口类的报名及接口名称完全一致。

5.1、方法二

package com.tiamaes.webservice.test.test;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
/**
 * <p>类描述: JaxWsDynamicClientFactory动态调用,可以不关心接口,只关心方法 </p>
 * <p>修改人:Jaune </p>
 * <p>修改时间:2014-5-10 上午09:09:46  </p>
 * @version
 */
public class HelloWorldDynamicTest {

	public static void main(String[] args) {
		JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
		Client client = dcf.createClient("http://127.0.0.1:8080/hello?wsdl");
		try {
			Object[] objs = client.invoke("syaHello", "Tom");
			System.out.println(objs[0].toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

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

时间: 2024-10-13 11:56:40

构建基于CXF的WebService服务(1)--创建HelloWorld服务的相关文章

构建基于CXF的WebService服务(2)-- 利用CXF提供的wsdl2java工具创建客户端

1.环境配置 将CXF_HOME/bin加入到环境变量path中,如我的是D:\Java\Jar\apache-cxf-2.7.7\bin 打开cmd输入 wsdl2java -v 出现如下信息表示配置成功 2.wsdl2java的使用 (1)创建一个"Java Project"项目,暂且命名为client,将CXF用到的jar包引入进来,去掉jetty相关包,加入geronimo-jaxws_2.2_spec-1.1.jar包 (2)打开命令行工具,将目录切换到client项目中的s

构建基于CXF的WebService服务(3)-- 利用拦截器实现权限验证

CXF中的拦截器分为in拦截器和out拦截器,又有客户端拦截器和服务端拦截器. 拦截器使用流程:客户端(out)-> 服务端(in)->处理业务->服务端(out)->客户端(in),并不是每一步都需要拦截器.在这里我们用到的是客户端Out拦截器和服务端in拦截器.服务端in拦截器检查用户级权限,客户端out浏览器发送用户信息给服务端. 1.创建服务端验证 JaxWsServerFactoryBean或Endpoint都可以通过getInInterceptors方法,向WebSer

【转】构建基于CXF的WebService服务

构建基于CXF的WebService服务 Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和XFire 两大开源项目的精华,提供了对 JAX-WS全面的支持,并且提供了多种Binding .DataBinding.Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL

maven构建spring+cxf的webservice工程

一.环境准备 安装eclipse 安装jdk1.8 3.配置maven 4.安装tomcat 二.构建webservice工程 1.创建maven webapp工程 2.build path 为jdk1.8 3.配置maven 工程依赖pom.xml文件 <dependencies>         <dependency>       <groupId>junit</groupId>       <artifactId>junit</ar

基于cxf的webservice 基础

- 借用上一个例子的代码: SOAP Request Envelope: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://wa.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001

webservice原理及基于cxf开发的基本流程

一.SOA和webservice SOA(service-Oriented Architecture)是面向服务的架构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言.这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互.web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语

使用CXF做webservice整合现有项目的例子

从网上看了很多CXF的资料,大部分都是单独的作为一个webservice项目,对于在现有的spring项目上提供webservice服务的例子基本没有找到. 我做的这个例子是介绍怎么把cxf整合到现有的spring项目中,现在只做到可以传简单的字符串和JAVABEAN,复杂的以后研究.       这是例子的下载地址:一个简单的CXF例子      一,应用cxf应该先把该服务所需要的架包加载进项目中. 对于一个已经搭建好的spring项目,我做的项目中所缺少的架包是 cxf-2.4.3.jar

玩转Windows服务系列&mdash;&mdash;给Windows服务添加COM接口

当我们运行一个Windows服务的时候,一般情况下,我们会选择以非窗口或者非控制台的方式运行,这样,它就只是一个后台程序,没有界面供我们进行交互. 那么当我们想与Windows服务进行实时交互的时候,我们应该怎么做呢? 快速给Windows服务添加实时交互功能的方案 Windows服务是一个进程,而我们用于交互的程序,又是另外一个进程.我们与Windows服务实时交互,其实就是一个进程间通信的问题.所有的进程间通信的方案基本上都适用于实时交互的方案,比如Socket.共享内存.管道.COM等.

基于Spring和CXF的webservice开发环境搭建

使用CXF发布webservice服务时,规范的做法是先书写一个接口,用以声明服务类型. 基于Spring和CXF开发web service的框架搭建 一.创建web项目 Eclipse中新建一个dynamic webproject,命名为:CXFTest 二.导入需要的jar包 把下载的CXF项目的解压缩文件中lib文件夹下的所有jar包拷贝到WebContent->WEB-INF->lib文件夹下 三.创建服务接口 在Java resource->src目录下新建package包:c