`
Gavin.Chen
  • 浏览: 325797 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

调用WebService实例二,javaEE6 新Feature之wsimport工具

阅读更多

      在javaEE6的bin文件夹时,有一个wsimport.exe,这个工具在5.0之前的版本里是没有的,这个工具依据wsdl文件生成相应的类文件,然后用这些类文件,就可以像调用本地的类一样调用WebService提供的方法了

 

  • wsimport工具详细参数

The wsimport tool generates JAX-WS portable artifacts, such as:

  • Service Endpoint Interface (SEI)
  • Service
  • Exception class mapped from wsdl:fault (if any)
  • Async Reponse Bean derived from response wsdl:message (if any)
  • JAXB generated value types (mapped java classes from schema types)

These artifacts can be packaged in a WAR file with the WSDL and schema documents along with the endpoint implementation to be deployed. The generated Service class can be used to invoke the Web Service endpoint.

 

wsimport [options] <wsdl>

 

Option

Description

-d <directory>

Specify where to place generated output files

-b <path>

Specify external JAX-WS or JAXB binding files (Each <file> must have its own -b)

-catalog
Specify catalog file to resolve external entity references, it supports TR9401, XCatalog, and OASIS XML Catalog format. Please read the XML Entity and URI Resolvers document or see wsimport_catalog sample.

-extension

allow vendor extensions (functionality not specified by the specification). Use of extensions may result in applications that are not portable or may not interoperate with other implementations

-help

Display help

-httpproxy:<host>:<port>

Specify an HTTP proxy server (port defaults to 8080)

-keep

Keep generated files

-p Specifying a target package via this command-line option, overrides any wsdl and schema binding customization for package name and the default package name algorithm defined in the specification

-s <directory>

Specify where to place generated source files

-verbose

Output messages about what the compiler is doing

-version

Print version information

-wsdllocation <location>
@WebService.wsdlLocation and @WebServiceClient.wsdlLocation value

 

  • wsimport工具用法实例

 

首先,须保证你的jdk为6.0以上版本,可以在command line下试运行这个命令

c:\test> wsimport

 

假设我们有下面的wsdl文件

http://localhost:9080/WebService/TestService/TestService.wsdl

 

我们要把生成的代码放到c:/test/generate目录下,那么我们运行以下命令即可

 

c:\test> wsimport -s generate http://localhost:9080/WebService/TestService/TestService.wsdl

 

然后,你就会看到在c:\test\generate目录下生成了一些java代码文件,wsimport就是如此简单

 

 

  • 编写调用WebService的客户端

假如我们要调用的WebService就是之前举例提到的TestService,它只有下面这样一个方法

 

public String test(String name) throws SOAPException
{
     if (name == null)
    {
        throw new SOAPException("name can't be null!");
    }
		
    return "hello " + name; 
}

 

用wsimport工具,我们可以得到如下代码文件

 

generate

    |--com

        |--company

            |--ObjectFactory.java

            |--SOAPException.java

            |--SOAPException_Exception.java

            |--Test.java

            |--TestResponse.java

            |--TestService.java

            |--TestService_Service.java

            |--package-info.java

 

把它们编译,然后写下面这样一个application去测试

 

 

    public static void main(String[] args)
    {
        TestService_Service serviceFactory = new TestService_Service();
        TestService service = serviceFactory.getTestServicePort();
        try
        {
            System.out.println(service.test(null));
        }
        catch (SOAPException_Exception ex)
        {
            System.out.println(ex.getMessage());
        }
    }

 

运行它,屏幕就会输出

name can't be null

 

因为我们之前传了一个null值进去嘛,其实这也是为了测试SOAPException是否正常运行,如果你传个正确的字符串进去,webservice就可以正常运行,如System.out.println(service.test("javaeye"));,屏幕上就会显示,

Hello javaeye!

 

顺便提一下WebService的异常处理,所有WebService的异常都必须用SOAPException抛出,它是java.xml.soap包中的一个类 (本人试过其它一些Exception,都不能被正常捕捉,只有SOAPException可以正常工作,具体原因不明,如果有哪个人清楚这一点,请评论告之,谢谢)

分享到:
评论
2 楼 Gavin.Chen 2009-05-14  
steeven 写道

搞定了吗? 估计自定义异常的schema没有, 你看看xsd文件. 用XmlSeeAlso, jaxb2.1里面的新功能应该能搞定.


谢谢,早就搞掂了,现在不是抛出SOAPException,现在的web service exception都是自定义的,继承Exception,参照JSR-224 webFault相关章节,添加@WebFault的anotation,写两个构造方法,还要写一个getFaultInfo方法。

2.5 Fault
A wsdl:fault element is mapped to a Java exception.

Conformance (javax.xml.ws.WebFault required): A mapped exception MUST be annotated with a
javax.xml.ws.WebFault annotation.

Conformance (Exception naming): In the absence of customizations, the name of a mapped exception
MUST be the value of the name attribute of the wsdl:message referred to by the wsdl:fault element
mapped according to the rules in sections 2.8 and 2.8.1.
An application MAY customize thismapping using the jaxws:class binding declaration defined in section
8.7.4.

Multiple operations within the same service can define equivalent faults. Faults defined within the same
service are equivalent if the values of their message attributes are equal.

Conformance (Fault equivalence): An implementation MUST map equivalent faults within a service to a
single Java exception class.

A wsdl:fault element refers to a wsdl:message that contains a single part. The global element declaration3
referred to by that part is mapped to a Java bean, henceforth called a fault bean, using the mapping
described in section 2.4. An implementation generates a wrapper exception class that extends java.lang-
.Exception and contains the following methods:

WrapperException(String message, FaultBean faultInfo) A constructor where WrapperException
is replaced with the name of the generated wrapper exception and FaultBean is replaced by the
name of the generated fault bean.

3WS-I Basic Profile[18] R2205 requires parts to refer to elements rather than types.
22 JAX-WS 2.1 May 7, 2007

WrapperException(String message, FaultBean faultInfo, Throwable cause) A constructor
whereWrapperException is replaced with the name of the generated wrapper exception and FaultBean
is replaced by the name of the generated fault bean. The last argument, cause, may be used to convey
protocol specific fault information, see section 6.4.1.

FaultBean getFaultInfo() Getter to obtain the fault information, where FaultBean is replaced by the
name of the generated fault bean.

The WrapperException class is annotated using the WebFault annotation (see section 7.2) to capture the
local and namespace name of the global element mapped to the fault bean.

Two wsdl:fault child elements of the same wsdl:operation that indirectly refer to the same global
element declaration are considered to be equivalent since there is no interoperable way of differentiating
between their serialized forms.

Conformance (Fault equivalence): At runtime an implementation MAY map a serialized fault into any
equivalent Java exception.
1 楼 steeven 2009-05-14  
搞定了吗? 估计自定义异常的schema没有, 你看看xsd文件.

用XmlSeeAlso, jaxb2.1里面的新功能应该能搞定.

相关推荐

    C#调用WebService实例和开发(wsdl).rar

    本教程将重点讲解如何使用C#来调用WebService以及如何进行WebService的开发,通过理解并实践其中的实例,开发者可以掌握这项关键技能。 首先,WebService是一种基于XML的开放标准,它允许不同系统之间的数据交换。...

    动态调用webService实例

    通过映射实现动态调用webService,写个url,方法名就直接调用,不需要在添加引用了,好处大家都明白 不过映射的方法(类里面)虽然能用 但是是过时的。 在vs2008下打开此工程可以看到提示的 大家有兴趣自己改吧 反正也...

    详解axis调用webservice实例

    标题中的“详解axis调用webservice实例”表明我们将探讨如何使用Apache Axis库来调用Web服务。Apache Axis是一个开源工具,它允许Java开发者创建、部署和使用Web服务。在这个实例中,我们会有机会看到实际的Java代码...

    C#调用WebService实例开发

    简单的理解就是:webservice 就是放在服务器上的函数,所有人都可以调用,然后返回信息。 比如google就有一个web service ,你调用它就可以很容易的做一个搜索网站。 就像调用函数一样,传入若干参数(比如关键字、...

    JS调用webService实例

    JS调用webService实例,其中有详细使用文档! myEclipse部署上客户端和服务器端即可直接测试! 使用技术: JS,webService,JS调用webService,xfire,数字证书

    ajax和JavaScript分别调用Webservice实例

    本压缩包包含的三个文档详细讲解了如何利用Ajax和JavaScript来调用WebService,这对于理解这两种技术的集成至关重要。 首先,让我们了解一下Ajax。Ajax是一种在不刷新整个网页的情况下,能够更新部分网页内容的技术...

    ajax异步调用webservice实例

    本实例将重点讲解如何利用AJAX进行异步调用WebService,为用户提供无缝的交互体验。 一、AJAX基础 1. AJAX的核心是XMLHttpRequest对象,它提供了与服务器通信的能力,可以在后台与服务器进行数据交换。 2. AJAX通过...

    Delphi调用WebService的实例(非常经典)[参考].pdf

    "Delphi调用WebService的实例(非常经典)" 在 Delphi 中调用 WebService 是一种非常经典的实例。下面我们将详细介绍 Delphi 调用 WebService 的相关知识点。 首先, Delphi 调用 WebService 需要了解基本概念。...

    C#调用WebService实例和开发(wsdl)

    C#调用WebService实例和开发,对于初学者来说,在vs2012环境中,大家有可能不知道Web References文件夹是如何来的,它是通过右击项目,选择其中的”添加服务引用“。

    php调用webservice及myeclipse创建webservice实例

    2. **编写服务实现**:在新项目中创建一个Java类,实现你想要暴露的服务逻辑。 3. **生成WSDL**:使用JAX-WS(Java API for XML Web Services)工具,如CXF或Metro,通过Java类自动生成WSDL文件。这将描述你的Web...

    ios调用webservice实例代码

    要调用webservice需完成如下两步: (1)写一个调用webservice的类webservice(代码中有两个,一个是使用NSURLConnection写的类,还有一个是ASIHttpRequest写的webservice调用类) a.同步调用 b.异步调用 c.返回数据...

    delphi调用Java webservice实例

    综上所述,"Delphi调用Java WebService实例"主要是关于在Delphi环境中如何利用各种工具和组件,通过SOAP协议调用并处理Java WebService的响应。具体实现需要理解WSDL,生成Delphi客户端代理,以及正确地发送请求和...

    java调用WebService实例

    Java调用WebService是一种常见的在分布式系统中实现服务交互的方式,主要应用于不同系统间的数据共享和功能集成。在Java中,有多种库可以帮助我们完成这项任务,其中之一就是Apache Axis2。本篇文章将详细介绍如何...

    webservice接口调用实例

    Web服务(Web Service)是一种基于互联网的、使用标准XML(Extensible Markup Language)进行通信的软件服务,允许...通过实践"webservice_client"这个实例,你可以深入理解这些概念并掌握Web Service调用的具体步骤。

    JavaScript调用WebService实例总结

    JavaScript调用WebService是一种常见的在客户端与服务器之间进行数据交互的方式,尤其在Web应用程序中,它允许JavaScript代码直接访问Web服务提供的功能。以下是对这个实例的详细解析和相关知识点的总结: 1. ...

    axis调用webservice实例,包含jar包

    标题中的“axis调用webservice实例”涉及到的是在Java开发中使用Apache Axis库来调用Web服务的过程。Apache Axis是一个开放源代码的SOAP栈,它允许开发者创建和部署Web服务,同时也提供了客户端工具来调用这些服务。...

    java调用webservice实例

    ### Java调用WebService实例解析与知识点详解 #### 核心概念与原理 在现代软件开发中,服务端之间以及客户端和服务端之间的通信是至关重要的。Web Service作为一种标准的、跨平台的服务实现方式,允许不同语言编写...

    java 调用 webService工具类

    本工具类主要用于简化这个过程,确保开发者能够高效、可靠地调用WebService。下面我们将详细探讨Java调用WebService的相关知识点。 1. **WebService概念**: WebService是一种基于互联网的、平台无关的应用程序...

    VC6调用WebService

    在IT领域,Visual C++ 6.0(简称VC6)是一款经典的编程工具,用于开发Windows平台的应用程序。尽管现在有更新的版本如VS2019等,但VC6仍然在某些场合被广泛使用。本篇文章将深入探讨如何在VC6环境中调用Web Service...

    oracle 调用webservice

    本文将详细介绍 Oracle 调用 Webservice 的实现过程,包括 Webservice 的基本概念、 Java 编写简单的 WebService 实例、Oracle 服务器端配置、加载 JAR 包、测试调用 PHP Webservice 和 Java Webservice 等内容。...

Global site tag (gtag.js) - Google Analytics