调用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

-pSpecifying 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可以正常工作,具体原因不明,如果有哪个人清楚这一点,请评论告之,谢谢)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值