`

CXF入门教程(2) -- 第一个客户端

 
阅读更多
参考:http://blog.csdn.net/neareast/article/details/7717568
文中对应的代码已经上传,与教程(1)中的service相对应。为调试方便,将service和client都放在了同一个工程中,不过是在不同的包中;本文对应的两个基本客户端在com.neareast.test.cxf.client.consumer包中,服务端ServiceTest类在com.neareast.test.cxf.server.service包中。代码地址如下:
http://download.csdn.net/detail/neareast/4411870
最常见的情境是,我们有一个服务的WSDL;无论这个服务是不是我们自己维护的,我们都可以从这个WSDL文件来生成客户端,包括一个强类型的接口,并通过接口来与服务进行交互。


使用WSDL2Java工具,可以通过WSDL生成JAX-WS客户端。使用WSDL2java有以下三种方法:
The command line 命令行
The Maven Plugin Maven插件
使用WSDL2Java API

要深入获取更多信息,可以参阅 Developing a JAX-WS consumer 一文或发型包中的示例程序。

Eclipse和Maven的插件最终应该还是调用WSDL2Java命令来实现的。这里我们使用上一篇中发布的服务,直接在控制台使用 wsdl2java http://localhost:9000/helloWorld?wsdl 命令,即可在命令所在目录下( 如笔者在 apache-cxf-2.6.1包的bin目录下调用wsdl2java 命令,生成的类文件就在这个目录下),生成与WSDL中的targetNamespace相对应的包路径,将相应的类放到该目录下,客户端直接调用这些类即可;比较无奈的是,生成的代码居然是ANSI格式的……

然而,生成的HelloWorld类报错,如HelloWorld方法的super(WSDL_LOCATION, SERVICE, features);这行报错,原因是javax.xml.ws.Service中缺少Service(URL, QName, WebServiceFeature[]) 构造方法。我们引入的geronimo-jaxws_2.2_spec-1.1.jar包里,提供了新版本的Service类,但是需要进行endorse才能够替换掉jre自带的Service类。为尽量较少以后移植的麻烦,我们可以根据注释中的提示指定-frontend参数,使用JAX-WS 2.1兼容模式重新生成所有的类,顺便用-p参数指定我们需要的命名空间:
生成客户端文件1:
wsdl2java -p com.neareast.test.cxf.client.WSDL2Java -frontend jaxws21
http://localhost:9000/helloWorld?wsdl

生成客户端文件2:
wsdl2java  -d /mnt/d/vmware_shared_folder/workspace/webserviceclient/src/main/java -p com.websercices.client -frontend jaxws21 http://localhost:8080/webservice/HelloWorld?wsdl
-d参数:指定文件存放位置.
一些参数说明:
wsdl2java -ant -client -d D:/temp -p com.neareast.test.cxf.client.WSDL2Java -frontend jaxws21 hello_world.wsdl
-ant 指定要生成一个ant的构建说明文档build.xml。
-client 指定要生成一个测试客户端的“起点代码”(starting point code),其中包含了端口中所有方法的测试样例代码。
-d 指定我们想要把生成的文件放到哪个目录下,默认是wsdl2Java命令所在的目录。
-p 指定生成文件的包名;默认是根据WSDL文件中的命名空间相对应。
-frontend 指定前端类型及版本;目前仅支持 JAXWS 前端,用 "jaxws21" 表明要生成JAX-WS 2.1 兼容的代码(Jre6自带的就是这个版本),使用该参数的原因请参考教程(2)。

生成的类如下图所示;其中HelloWorld类用来启动对服务的监听,IHelloWorld类就是调用服务的接口。



一旦生成了客户端,典型的用法如下:
public class BasicClient {  
    public static void main(String[] args){  
        HelloWorld server = new HelloWorld();  
        IHelloWorld hello = server.getHelloWorldImplPort();  
  
        String result = hello.sayHi("East");  
        System.out.println(result);  
          
        User user = new User();  
        user.setName("East");  
        System.out.println(hello.sayHiToUser(user));  
          
        System.out.println("All the users are: ");  
        for(IdentifiedUser u:hello.getUsers().getEntry()){  
            System.out.println( u.getUser().getName() );  
        }  
    }  
}  



至此,一个简单的webService客户端已经完成了。

JAX-WS代理
除了使用使用wsdl2java 直接生成客户端,我们也可以使用 Service.create 来生成服务实例,下面的代码展示了这一过程:
URL url = null;  
try {  
    url = new URL("http://localhost:9000/helloWorld?wsdl");  
} catch (MalformedURLException e) {  
    java.util.logging.Logger.getLogger(HelloWorld.class.getName())  
        .log(java.util.logging.Level.INFO,   
             "Can not initialize the default wsdl from {0}", "http://localhost:9000/helloWorld?wsdl");  
}  
WSDL_LOCATION = url;  


Service service = Service.create(WSDL_LOCATION, SERVICE_NAME);    
IHelloWorld hw = service.getPort(IHelloWorld.class);  
System.out.println(hw.sayHi("World"));  
分享到:
评论

相关推荐

    CXF入门 -- 第一个简单webService

    【CXF入门 -- 第一个简单webService】 Apache CXF 是一款强大的开源服务框架,它用于构建和开发服务,包括Web服务。本篇文章将带你入门CXF,通过创建一个简单的Web服务来理解其基本概念和工作流程。 1. **CXF简介*...

    cxf经典学习资料-1

    2. **快速入门**:引导开发者设置开发环境,创建第一个CXF Web服务,展示如何编写服务端和客户端代码。 3. **API参考**:提供CXF的详细API文档,包括类、接口和方法的描述,方便开发者查阅。 4. **示例代码**:...

    cxf入门文档

    5. **WSDL第一公民**:CXF对WSDL(Web Service Description Language)的支持,如何从WSDL生成服务和客户端代码。 6. **数据绑定**:JAXB(Java Architecture for XML Binding)的使用,将XML与Java对象映射,简化...

    CXF入门实例

    【CXF入门实例】是一个基于Java的开源服务框架,它允许开发人员创建和消费Web服务。CXF(CXF: The Apache CXF project is an open source services framework)旨在简化并加速构建SOAP、RESTful Web服务的过程。这个...

    cxf入门文档资料

    【标题】"cxf入门文档资料"所涵盖的知识点主要围绕Apache CXF框架展开,这是一个开源的Java服务框架,主要用于构建和开发Web服务。CXF允许开发者使用多种标准和编程模型来实现服务,如JAX-WS和JAX-RS。以下是关于CXF...

    apache-cxf-3.1.6

    CXF提供了许多工具和插件,如WSDL第一或Java第一的开发方式,使得这个过程更加顺畅。 7. **集成与扩展**: CXF可以轻松地与Spring框架集成,利用Spring的依赖注入和配置管理能力。此外,它还支持JAX-RS(Java API ...

    CXF的第一个例子helloWorld

    这个"helloWorld"示例是学习CXF入门的典型教程,旨在帮助开发者理解如何通过CXF快速地搭建服务并进行交互。 【描述】虽然描述部分为空,但根据通常的教程结构,我们可以推测这个例子会涵盖以下步骤: 1. **环境...

    CXF入门例子

    1. `helloWs`:这个可能是创建的第一个Web服务示例,"Ws"通常代表Web服务。它可能包含了一个简单的"Hello World"服务,展示了如何在CXF中定义和部署一个服务。 2. `helloWs1`和`helloWs2`:这些可能是对基础...

    cxf_webservice入门

    CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它主要用于构建和部署Web服务。作为初学者,了解并掌握CXF Webservice的使用是进入Web服务开发的重要一步。CXF允许开发者使用Java编程语言来实现...

    基于CXF构建SOA例子代码

    总的来说,这个基于CXF的SOA例子代码是一个全面的教程,涵盖了从入门到进阶的各种知识点,适合希望提升CXF技能或对SOA感兴趣的Java开发者进行学习。通过实践这些例子,开发者不仅可以加深对CXF的理解,还能提高在...

    cxf2.1jar包

    6. **测试与调试**:CXF提供了强大的测试工具,如WSDL第一和代码第一的测试支持,以及SOAP消息的跟踪和日志记录,便于开发者进行服务的验证和调试。 7. **插件支持**:CXF与多种构建工具(如Maven和Gradle)集成...

    TipTec.Developing.Web.Services.with.Apache.CXF.and.Axis2.Jan.2010.rar

    2. **CXF入门**:讲解如何使用CXF创建SOAP和RESTful服务,包括服务端和客户端的配置和实现。 3. **CXF与Spring集成**:展示如何在Spring框架中配置和使用CXF服务,以及利用Spring的依赖注入和事务管理功能。 4. **...

    cfx webservice 入门 详细步骤

    **第一步:导入 CXF 相关包** 首先,你需要从官方下载地址(http://cxf.apache.org/download.html)获取 CXF 的 JAR 包,并将其添加到你的项目类路径中。通常,这可以通过将 JAR 文件放入 `WEB-INF/lib` 目录或在...

    WebService视频教程大全

    2. **CXF入门**:学习如何安装和配置CXF环境,创建第一个CXF项目,包括服务端和客户端的搭建。 3. **JAX-WS实战**:通过实际案例,演示如何使用CXF和JAX-WS创建SOAP WebService,包括服务接口定义、服务实现、部署...

    WebService入门精选视频教程day3(极详细)

    视频教程可能包含使用这些工具创建一个简单的WebService示例,包括定义服务接口、实现服务逻辑、发布服务以及编写客户端代码进行调用。 此外,安全性也是WebService开发中不可忽视的一环。因为数据在互联网上传输,...

    web service入门学习笔记

    三、第一个Web Service示例 1. 启动Sun Java System Application Server PE 9,确保服务器运行正常,通过访问`http://localhost:8080`确认。 2. 使用MyEclipse打开Sun SDK中的示例项目`hello-jaxws`,此项目包含了...

    webservice 第一个小项目

    本项目以"webservice 第一个小项目"为主题,将带你入门Java实现的WebService技术。 首先,我们需要了解WebService的基本概念。WebService是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的互联网协议,它能够使应用...

    Web Service开发指南

    CXF具有强大的WSDL第一(WSDL-first)和Java第一(Java-first)开发模式,可以方便地从WSDL生成Java代码或反之亦然。此外,CXF对Web服务标准的支持广泛,包括WS-I基本profile、WS-Security等,使得服务更加健壮和...

    webservice文档教程

    CXF支持SOAP和RESTful两种风格的Web Service,并提供了丰富的功能,包括WSDL第一和代码第一的开发模式、WS-Security安全支持、数据绑定、JAX-RS和JAX-WS标准实现等。 通过CXF,开发者可以方便地将Java类直接映射为...

Global site tag (gtag.js) - Google Analytics