Apache CXF 之HelloWorld

Apache CXF 介绍

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

Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。

CXF 包含了大量的功能特性,但是主要集中在以下几个方面:

  1. 支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。

  2. Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL 优先开发,也支持从 Java 的代码优先开发模式。

  3. 支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA。

CXF 之HelloWorld

本次使用的使用的CXF版本是3.0.4,可以访问Apache站点下载Apache CXF安装包。

CXF 服务端程序:

1) 在Eclipse IDE中创建一个新的Java项目,本次命名为hello_cxf_server。
2) 在项目中添加CXF安装包中lib下的依赖包。
3) 编写服务接口

package com.cxf.services;

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

@WebService
public interface SayHello {
    public String sayHello(@WebParam(name="name") String name);
}

@WebService和@WebParam 注释是必须的。@WebService注释说明这是一个Web Services。@WebParam注释说明这个参数的名称。因为Java接口不存储类文件的参数名称。如果省略掉参数名称,系统将被命名为arg0。

4) 编写服务实现类

package com.cxf.services.impl;

import javax.jws.WebParam;
import javax.jws.WebService;
import com.cxf.services.SayHello;

@WebService(endpointInterface="com.cxf.services.SayHello",
    serviceName="SayHelloImpl")
public class SayHelloImpl implements SayHello{

    @Override
    public String sayHello(@WebParam(name="name") String name) {
        return "Hello " + name;
    }

}

5) 发布服务

package com.cxf.server;

import javax.xml.ws.Endpoint;
import com.cxf.services.SayHello;
import com.cxf.services.impl.SayHelloImpl;

public class ServerMain {

    public ServerMain(){
        System.out.println("Starting Server");

        SayHello sayHello = new SayHelloImpl();

        String address = "http://localhost:9000/RickyService";

        Endpoint.publish(address, sayHello);
    }

    public static void main(String[] args) throws InterruptedException {
        new ServerMain();
        System.out.println("Server ready......");
    }
}

6) 查看WSDL文档
在浏览器中输入http://localhost:9000/RickyService?wsdl
这里写图片描述

CXF 客户端程序:

1) 在Eclipse IDE中创建一个新的Java项目,本次命名为hello_cxf_client。
2) 在项目目录下使用CXF提供的wsdl2java.bat,实现WSDL文档生成Java代码
启动CXF 服务,在客户端程序目录下使用wsdl2java http://localhost:9000/RickyService?wsdl命令
生成对应得Java代码

必须在CXF服务启动后才能执行wsdl2java命令成功
3) 访问和调用服务

package com.cxf.client;

import com.cxf.services.SayHello;
import com.cxf.services.impl.SayHelloImpl;

public class ClientMain {
    public ClientMain(){}

    public static void main(String[] args) {
        SayHelloImpl factory = new SayHelloImpl();
        SayHello sayHello = factory.getSayHelloImplPort();

        System.out.println(sayHello.sayHello("Rickesy"));
    }
}

4) 查看WSDL文档
在浏览器中输入http://localhost:9000/RickyService?wsdl=SayHello.wsdl
这里写图片描述

分别启动服务端和客户端,可在客户端控制台看到 Hello Rickesy 结果输出

CXF 服务单和客户端目录结构:
这里写图片描述

posted @ 2015-02-28 15:56  Rickesy  阅读(207)  评论(0编辑  收藏  举报