wsdl2java 作用_2.1 WSDL在Web服务中的作用

第2章全面了解WSDL

All About WSDLs

2.1  WSDL在Web服务中的作用

What Good Is a WSDL?

在基于SOAP协议的Web服务中,WSDL的主要作用就是对服务契约定义的描述,通过前面的例子已经很好地说明了这点。TimeServer服务的Java客户端在调用Service.create方法时传递了两个参数:一个URL,用来定位服务的访问入口;一个是XML限定名(XML-qualified,在Java中通常是一个Java Qname对象),由服务的本地名称(在上面的例子中是TimeServerImplService)和命名空间标示符(本例中是URL:http://ts.ch01/)组合而成。下面是去掉注释后的代码:URL url =newURL("http://localhost:9876/ts?wsdl");

QName qname =newQName("http://ts.ch01/","TimeServerImplService");

Service service = Service.create(url, qname);

要注意自动产生的命名空间地址(URI)通常是将服务实现Bean(SIB)所在包的名称颠倒过来表示。在本例中包名称"ch01.ts"颠倒过来后在服务的URI中变成了"ts.ch01"。还有一点需要特别留意,如果***个参数被写成了"http://ch01.ts/",TimeClient将会抛出一个Java异常,指出由服务自动产生的WSDL文档中没有定义该(端点)地址所请求的服务。这样开发人员不得不通过检查WSDL文档来确定不是很明确的命名空间地址!同时,在URI中,结尾处的"/"也要特别留意。比如像URL地址"http://ts.ch01",如果不是以"/"结尾,客户端程序TimeClient也会抛出和URL写为"http://ch01.ts/"时同样的异常。

当然还可以通过修改前一章由Perl语言实现的客户端来演示这个问题,修改后的Perl客户端不再请求WSDL文档,而是直接访问Web服务。如示例2-1所示。

示例2-1:针对TimeServer改进后的Perl语言客户端#!/usr/bin/perl -w

use SOAP::Lite;

my $endpoint     ='http://127.0.0.1:9876/ts';  # endpoint

my $uri          ='http://ts.ch01/';          # namespace

示例2-1:针对TimeServer改进后的Perl语言客户端(续例)

my $client = SOAP::Lite->uri($uri)->proxy($endpoint);

my $response = $client->getTimeAsString()->result();

print $response,"\n";

$response = $client->getTimeAsElapsed()->result();

print $response,"\n";

示例2-1中的Perl语言客户端功能上同修改前是一致的。然而,其中的Perl客户端必须指定服务的命名空间地址http://ts.ch01/。而如果指定为其他任何地址则将无法执行,因为这同 Java产生的WSDL文档中指定的URI不一致。实际上,要使一个Web服务可以正确地被访问,需要提供一个服务端点(URL)和一个命名空间(URI)。示例2-1中的Perl客户端相对前面最初的那个Perl客户端而言,编写起来相对不是那么容易。其中的Perl客户端要求程序员不仅仅要知道服务端点的URL,还需要了解服务的命名空间URI,而修改前的Perl客户端通过直接请求包括服务命名空间的WSDL文档避开了这个问题。也就是说,修改前的那个Perl客户端通过WSDL文档获得服务的URI,这样做更简单些。

点赞 0

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值