webservice入门之CXF教程

1.CXF简介

Apache CXF是一个开源的Service框架,可以用于简化用户的service开发,基于CXF开发的应用可提供SOAP、XML/HTTP、RESTFUL HTTP或CORBA等服务。CXF底层页可以使用不同的传输协议,包括HTTP、JMS或JBI等。

根据CXF官方的说明,CXF包含以下特性:

  • 支持大量的Web Service标准,包括SOAP、WS-I Basic Profile、WSDL、WS-Addressing、WS-Policy、WS-ReliableMessaging和WS-Security。
  • CXF支持大量的前端(frontend)编程模型。CXF实现了标准的JAX-WS API,它也包括一种被称为简单前端(simple frontend)的模型,这种模型无需annotation支持。CXF支持web service的两种开发模式:①规则(contract)优先的开发模式,即通过编写WSDL来开发web service;②代码优先的开发模式,即通过编写java代码来开发webservice.

说了这么多,下面来看看如何使用CXF。

2.CXF下载和安装

下载并安装CXF步骤如下:

(1)登陆CXF官方站点:http://cxf.apache.org/,下载CXF最新版。笔者下载的为3.0.1版。

(2)将下载得到的压缩包解压得到apache-cxf-3.0.1文件夹,进入该文件夹可以看到文件夹中包含如下所示的目录结构。

bin:该目录下保存了CXF提供的一些小工具,这些工具的主要作用是完成根据WSDL代码生成java代码,以及根据WSDL代码生成javascript代码等代码生成任务。

docs:该目录下有一个api子目录,其中保存了CXF的API文档。

etc:该目录主要存放了CXF框架的一些杂项。

lib:该目录存放了CXF的核心类库以及编译和运行所依赖的第三方类库。

licenses:该目录下存放CXF以及第三方框架的授权文件。

modules:该目录下存放CXF按模块打包的jar包。

samples:该目录下存放了CXF的大量示例应用。这些应用是学习CXF极好的资料。

license和readme等文档

(3)将解压路径下的bin目录添加到系统的path环境变量,以便操作系统能找到bin目录下的命令,方便以后使用CXF提供的小工具。

(4)为了在项目中使用CXF框架,需要将lib文件夹下的jar包添加到项目中。

3.使用CXF开发web service

由于是初学,这里先写一个最简单的hello world。

(1)eclipse下创建一个新的java项目CXFTest

(2)把CXF解压缩目录下bin文件夹中的jar包添加到项目中

(3)在src目录下新建一个package包,命名为test,然后新建一个接口HelloWorld.java,源码为:

package test;

import javax.jws.WebService;

@WebService
public interface HelloWorld
{
	public String sayHello(String name);
}

(4)在test包中创建HelloWorld接口的实现类HelloWorldImpl,代码为:

package test;

import javax.jws.WebService;

@WebService
public class HelloWorldImpl implements HelloWorld
{

	@Override
	public String sayHello(String name)
	{

		System.out.println("sayHello方法被调用");
		return ("Hello"+name);

	}

}

(5)创建主类MainServer,用来发布webservice

package test;

import javax.xml.ws.Endpoint;

import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class MainServer
{

<span style="white-space:pre">	</span>public static void main(String[] args)
<span style="white-space:pre">	</span>{
//<span style="white-space:pre">		</span>//第一种发布方式:通过CXF提供的JaxWsServerFactoryBean来发布webservice
//<span style="white-space:pre">		</span>JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
//<span style="white-space:pre">		</span>factory.setServiceClass(HelloWorldImpl.class);
//<span style="white-space:pre">		</span>factory.setAddress("http://localhost:8080/HelloWorld");
//<span style="white-space:pre">		</span>
//<span style="white-space:pre">		</span>Server server = factory.create();
//<span style="white-space:pre">		</span>server.start();
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>//第二种方式,通过JAX-WS提供的Endpoint来发布webservice
<span style="white-space:pre">		</span>//首先创建webservice服务提供类的实例
<span style="white-space:pre">		</span>HelloWorldImpl implementor = new HelloWorldImpl();
<span style="white-space:pre">		</span>String address = "http://localhost:8080/HelloWorld";
<span style="white-space:pre">		</span>Endpoint.publish(address, implementor);

<span style="white-space:pre">	</span>}

}

执行服务端代码,可以看到eclipse输出如下,说明webservice成功发布

在浏览器输入如下地址http://localhost:8080/HelloWorld?wsdl,可以访问该webservice服务的WSDL

(6)创建调用webservice的客户端代码

package test;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class HelloWorldClient
{

	public static void main(String[] args)
	{
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setAddress("http://localhost:8080/HelloWorld");
		factory.setServiceClass(HelloWorld.class);
		HelloWorld helloWorld = (HelloWorld) factory.create();
		System.out.println(helloWorld.sayHello("zhuwei"));

	}

}

就可以通过客户端访问webservice服务了。

时间: 2024-10-13 02:33:02

webservice入门之CXF教程的相关文章

WebService概述和CXF入门小程序

一. 什么是WedService? WebService不是框架, 甚至不是一种技术, 而是一种跨平台,跨语言的规范, WebService的出现是为了解决这样的需求场景: 不同平台, 不同语言所编写的应用之间相互调用. 二. WedService有什么用? WebService可以集中解决以下问题: 1. 远程调用 2. 跨平台调用 3. 跨系统调用 那么WebService在企业中有什么用呢? 1. 同一个公司新旧系统的整合. 2. 不同公司的业务整合: 业务的整合就要带来不同公司的系统整合

WebService入门实例教程

什么是WebService 通过使用WebService,您的应用程序可以向全世界发布信息,或提供某项功能,它是基于Web的服务,通过Web进行发布.查找和使用. WebService脚本平台需支持XML+HTTP. HTTP协议是最常用的因特网协议. XML提供了一种可用于不同的平台和编程语言之间的语言. 为什么要使用WebService 最重要的事情是协同工作. 1.跨平台调用(WebService不局限于操作系统,你可以在Windows上调用linux上的WebService服务,反之亦然

RESTful WebService入门

RESTful WebService入门 RESTful WebService是比基于SOAP消息的WebService简单的多的一种轻量级Web服务,RESTful WebService是没有状态的,发布和调用都非常的轻松容易. 下面写一个最简单的Hello World例子,以便对RESTful WebService有个感性认识.因为非常专业理论化的描述RESTful WebService是一件理解起来很痛苦的事情.看看例子就知道个大概了,再看理论就容易理解多了. /** * RESTful

RESTful WebService入门(转)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/229206 RESTful WebService是比基于SOAP消息的WebService简单的一种轻量级Web服务,RESTful WebService是没有状态的,发布和调用都是非常的轻松容易. 以下是一个最简单的Hello World例子,以便对RESTful WebService有个感性认识.因为非常专业理论化

【0002(基础)】Skyline二次开发入门经典系列教程&mdash;&mdash;目录

这段时间由于个人事务太多,以至于没有按照时间更新系列教程,本人将尽快补上所欠章节,在此说声抱歉!   这一章在我心目中占有很重要的地位,因为我想通过这一章的内容来确定整个系列的大致走向.然而在整理的过程中,发现现实远比想象要复杂得多:首先想尽可能介绍较多的知识点,其次又要考虑学习的简易程度,再次又要确定顺当的知识体系流程-- 由于暂时的考虑无论如何也是不可能完备的,因此为了不影响后面教程的编写,暂定把这一章作为一个[流动性质]的可变章节,在编写每一章时,动态根据实际情况修改(添加.移动.修改)系

【0001(基础)】Skyline二次开发入门经典系列教程总览

本人是从2012年开始接触Skyline二次开发的,经历过 v6.0~v6.5(最新的6.6版本还未使用)的所有版本.作为一名非GIS专业毕业的大学本科生,鬼使神差般地进入了这个瑰丽的GIS领域.因此,在从事了4年多的Skyline二次开发工作后,我不能说我是"授业有专攻",更不能说我是"闻道有先后".在这个领域内,大牛之人比比皆是,正是因为他们的存在与指引,才使得我现在有点东西可以写出来供大家交流沟通.   整理这个系列教程的原因主要出于如下几点的考虑: 1.Sk

java的WebService实践(cxf)

Java发布WebService,结合Spring,通过cxf的方式 难点:1.引用什么jar包: 1.创建接口 源码如下: package com.nankang; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface HelloWorld { String sayHi(@WebParam(name="text") String text); } 2.实现接口 源码如下

java Webservice傻瓜式基础教程

网上找了很多webservice相关的技术,感觉太杂乱无章了,对于一个新手,筛选资料的什么太麻烦了,周末闲来无聊就写一篇使用java部署webservice傻瓜版的教程,不到之处欢迎拍砖.进阶版的留到下周在写. 好吧现在开始进入正题.个人比较懒,直接贴图片了...相关说明已经写了备注,相比较网上的还是比较详细了. 1.本教程使用java-api自带jar包,建立一个java project即可,目录结构如下: 2.文件源码及注释说明 PS:有的注释被水印挡住,不过你看一眼就知道那是说什么的了..

RESTful WebService入门【转】

ESTful WebService是比基于SOAP消息的WebService简单的多的一种轻量级Web服务,RESTful WebService是没有状态的,发布和调用都非常的轻松容易. 下面写一个最简单的Hello World例子,以便对RESTful WebService有个感性认识.因为非常专业理论化的描述RESTful WebService是一件理解起来很痛苦的事情.看看例子就知道个大概了,再看理论就容易理解多了. /** * RESTful WebService入门 * @author