`
东天里的冬天
  • 浏览: 33708 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

CXF使用教程(一)——简介以及入门案例

 
阅读更多

一.简介

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

特性:

  • 支持大量的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.

二.下载与安装(非maven)

(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包添加到项目中。

三.Web Service注释介绍
webservice注释主要有:
@WebService:定义服务,用在类上
@WebMethod:定义方法,用于方法上
@WebResult:定义返回值,用在方法上
@WebParam:定义参数,用在方法上

四.入门案例(maven方法)

1.新建一个maven项目,在pom中添加依赖和jetty作为测试的web service的web容器

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.outofmemory</groupId>
  <artifactId>hello-apache-cxf</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>hello-apache-cxf</name>
  <url>http://maven.apache.org</url>

    <properties>  
        <cxf.version>2.2.7</cxf.version>  
    </properties>  

    <dependencies>  
        <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-rt-frontend-jaxws</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-rt-transports-http</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-rt-transports-http-jetty</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-rt-ws-security</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-rt-ws-policy</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-bundle-jaxrs</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>javax.ws.rs</groupId>  
            <artifactId>jsr311-api</artifactId>  
            <version>1.1.1</version>  
        </dependency>  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-api</artifactId>  
            <version>1.5.8</version>  
        </dependency>  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-jdk14</artifactId>  
            <version>1.5.8</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-httpclient</groupId>  
            <artifactId>commons-httpclient</artifactId>  
            <version>3.0</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-io</groupId>  
            <artifactId>commons-io</artifactId>  
            <version>2.3</version>  
        </dependency>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.8.1</version>  
            <scope>test</scope>  
        </dependency>  
  </dependencies>

 <build>  
        <finalName>hello-apache-cxf</finalName>  
        <resources>  
            <resource>  
                <directory>src/main/resources</directory>  
            </resource>  
            <resource>  
                <directory>src/main/java</directory>  
                <includes>  
                    <include>**</include>  
                </includes>  
                <excludes>  
                    <exclude>**/*.java</exclude>  
                </excludes>  
            </resource>  
        </resources>  
        <plugins>  
            <plugin>  
                <groupId>org.mortbay.jetty</groupId>  
                <artifactId>maven-jetty-plugin</artifactId>  
                <configuration>  
                    <contextPath>/</contextPath>  
                    <connectors>  
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">  
                            <port>9000</port>  
                        </connector>  
                    </connectors>  
                </configuration>  
            </plugin>  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-compiler-plugin</artifactId>  
                <configuration>  
                    <source>1.5</source>  
                    <target>1.5</target>  
                </configuration>  
            </plugin>  
        </plugins>  
    </build>  
</project>

2.定义web service接口,在接口定义中要添加必要的annotation注解来标注出来webservice接口和提供的方法,以及参数等,如下接口文件:

package cn.outofmemory.hello.apache.cxf;

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

@WebService
public interface HelloService {

    @WebMethod//方法

	//@WebResult 返回类型

    public @WebResult String hello(@WebParam(name="who") String who);//如果不修改参数名称,那wsdl中默认是arg0

}

3.实现接口:
package cn.outofmemory.hello.apache.cxf;

public class SimpleHelloService implements HelloService {

    public String hello(String who) {
        return "hello " + who;
    }

}


4.在web容器中运行web Service:

package cn.outofmemory.hello.apache.cxf;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class Server {

    public static void main(String[] args) throws Exception {
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();  
        factory.setServiceClass(SimpleHelloService.class);  

        factory.setAddress("http://localhost:9000/ws/HelloService");  
        factory.create();  

        System.out.println("Server start...");  
    }
}


可以运行这个类,然后再浏览器中访问:http://localhost:9000/ws/HelloService?wsdl

可以让Server端保持启动状态,下面我们写Client端来调用server端的webservice,如下client端代码:

5.客户端代码如下:

package cn.outofmemory.hello.apache.cxf;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class ServiceClient {
    public static void main(String[] args) {  
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();  
        factory.setServiceClass(HelloService.class);  
        factory.setAddress("http://localhost:9000/ws/HelloService");  
        HelloService helloworld = (HelloService) factory.create();  
        System.out.println(helloworld.hello("outofmemory.cn"));  
        System.exit(0);  
    }  
}
运行client,可以得到hello outofmemory.cn的输出。

分享到:
评论

相关推荐

    CXF入门教程及源码

    在这个“CXF入门教程及源码”中,我们将深入探讨CXF的基本概念、其与Spring框架的集成以及如何在实际项目中应用CXF。 1. **CXF简介** CXF是基于Apache基金会的项目,它提供了SOAP、RESTful、JAX-RS、JAX-WS等接口...

    实战Web Service —— 使用Apache CXF开发Web服务的教程

    **实战Web Service —— 使用Apache CXF开发Web服务的教程** Apache CXF是一个开源的Java框架,用于构建和部署Web服务。本教程将带你深入理解如何利用CXF来开发高效、灵活的Web服务。我们将从基础概念开始,逐步...

    CXF的入门实例

    在这个"CXF HelloWorld"入门实例中,我们将探讨如何使用CXF生成和使用WSDL(Web服务描述语言)文件,这是理解Web服务基础的关键步骤。 **1. 安装与配置CXF** 首先,你需要在项目中引入Apache CXF的依赖。如果你...

    CXF入门 -- 第一个简单webService

    【CXF入门 -- 第一个简单...通过本篇文章,你将了解到如何使用CXF创建第一个简单的Web服务,以及如何从客户端调用这个服务。实践过程中,你将对CXF的生命周期、服务暴露、客户端生成和通信机制有更深入的理解。

    WebService CXF 详细教程

    **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问协议)进行通信,并通过UDDI...

    WebSevice(CXF)入门案例java工程代码

    本入门案例是关于如何使用CXF框架创建一个完整的Web服务项目,包括服务端(Server)和客户端(Client)两个部分。首先,我们来详细了解服务端的构建过程。 1. **服务端工程**: - **定义服务接口**:在服务端,...

    cxf开发教程

    本教程将深入探讨如何使用CXF进行Web服务开发,包括创建CXF项目、配置服务接口、实现服务端点以及调用客户端。通过CXF的Demo实例,我们将详细讲解每个步骤,帮助初学者快速上手。 【知识点详解】 1. **Apache CXF...

    非常详细的cxf开发学习教程集合

    1. **CXF简介**:首先,你需要理解CXF的基本概念,它是如何作为服务提供者和服务消费者的,以及它在Java世界中的地位。 CXF支持多种Web服务标准,如SOAP、RESTful、WS-*等。 2. **安装与配置**:学习如何在你的开发...

    cxf教程(word)

    【标题】"CXF教程(Word)"是一个针对Java开发者的学习资料,主要讲解如何使用Apache CXF框架进行Web Service接口的开发。Apache CXF是一个开源的服务框架,它允许开发者创建和消费各种不同类型的Web服务,包括SOAP和...

    CXF 使用实例集成

    这个集成实例主要展示了如何使用CXF来创建和消费Web服务,包括设置输入和输出拦截器、用户验证以及文件上传等功能。让我们深入探讨一下这些知识点。 1. **CXF 创建 Web Service** - **服务接口定义**:首先,我们...

    cxf入门使用代码展示

    这个项目“cxf入门使用代码展示”旨在提供一个详尽的教程,帮助初学者快速理解和应用CXF。 首先,让我们了解CXF的基本概念。CXF允许开发者使用Java注解或者XML配置来定义服务接口和服务实现。对于JAX-WS,你可以...

    CXF开发教程03

    在本教程中,CXF Demo可能是通过一个简单的案例来展示CXF的使用,比如一个“Hello, World!”的服务。这个Demo将涵盖从创建服务接口到实现、配置、启动服务,再到客户端的调用过程,为初学者提供了一个清晰的学习路径...

    cxf开发教程2

    "CXF教程2"标签表明了这是一个关于CXF的进阶学习材料,旨在帮助已经熟悉基础概念的开发者更深入地了解CXF的高级特性和实践技巧。 【压缩包子文件的文件名称列表】: Cxf_Client、Cxf_Server 这两个文件名分别代表...

    WebService的实现——CXF学习笔记

    总结,本篇学习笔记通过一个简单的CXF服务端和客户端示例,介绍了CXF框架的使用,包括接口定义、实现、实体类以及相关配置。通过对这些概念和步骤的理解,读者可以快速入门CXF并开始创建自己的Web服务。

    CXF 入门视频教程及例子程序的使用方法

    **CXF入门视频教程及例子程序的使用方法** ...通过这个入门教程,你将能够掌握CXF的基础知识,并能够动手实践创建和使用Web服务。继续深入研究,你将能够利用CXF构建复杂的分布式系统,实现高效的Web服务交互。

    cxf 入门(hello world)

    【描述】:这篇文章主要介绍如何使用Apache CXF框架进行Web服务开发,通过一个简单的“Hello World”示例来帮助初学者理解CXF的基本用法。 Apache CXF是一个开源的Java框架,主要用于构建和部署SOAP和RESTful Web...

    CXF入门教程(4) -- webService异步调用模式

    CXF入门教程(4) -- webService异步调用模式文章配套代码,文中涉及的异步调用客户端的代码放在com.neareast.test.cxf.asyClient包下。原文地址:http://blog.csdn.net/neareast/article/details/7726503

    cxf入门文档

    【标题】:“CXF入门文档”是一份专为初学者设计的教程,旨在引导读者从零开始掌握Apache CXF框架的使用。Apache CXF是一个开源的Java服务框架,它允许开发者构建和部署SOAP和RESTful Web服务。此文档将帮助新手快速...

Global site tag (gtag.js) - Google Analytics