增强你的SOAP::Lite Web服务

ZDNet软件频道 时间:2002-10-17 作者:BUILDER.COM |  我要评论()
本文关键词:
本文我们介绍如何用SOAP::Lite开发web服务,如访问请求中的SOAP Header(报头)元素等。
作为一个有丰富Perl和Web服务经验的技术人员,我吃惊于SOAP::Lite会如此容易上手,容易运行。我还没有想到有哪个主要的SOAP工具包能有它容易使用,能像它一样可以快速部署,或者说能像它一样富于灵活性。使用SOAP::Lite安装Web服务的基础构件不用花很长时间,安装完毕后,你就可以使用这个工具包的其它特性。在下面的例子中,我会给你演示如何:
  • 通过名字访问参数元素。
  • 访问请求中的SOAP Header(报头)元素。
  • 将SOAP Header加到回应中。
  • 生成SOAP Fault。
  • 使用Document Style Encoding生成回应。
通过名字访问SOAP Body(主体)元素

缺省地,SOAP::Lite对SOAP请求方法的数据元素进行串并转换,并将它们放到一个通用数组里。这个数组被按照原样传递给请求句柄的子程序。这个子程序就能够访问这些参数,就像它能够访问其他任何带参数的输入一样。这样做就能很容易地为各种服务建立原型,但是其代价是灵活性的降低。如果你的方法有任何可选参数,如果你的方法有任何你需要访问的属性,或者如果传递给方法的参数并不依赖于顺序,那么这种额外的简单性所带来的麻烦要比其带来的好处更多。

SOAP::Lite为你通过名字访问请求中的元素提供了一个更加方便的方法。这增加了可以定义的服务接口类型的灵活性。下面这个例子会告诉你如何实现:

1 #!/usr/bin/perl
2 # Filename: Echo.pm
3 package Echo;
4 use strict;
5 use vars qw(@ISA);
6 @ISA = qw(SOAP::Server::Parameters);
7 sub echo {
8 my $self = shift;
9 my $envelope = pop;
10 my $str = $envelope->dataof("//echo/whatToEcho")->value;
11 return $str;
12 }
13 1;

通过第5和第6行里对SOAP::Server::Parameters包的扩展,你可以通过名字找出SOAP数据元素的分封线。要访问SOAP Body,首先将隐秘地传递给方法的SOAP分封线的对象弹出,然后调用一个dataof()子程序,用以返回对应于指定元素name/XPath的SOAP::Data对象,见第10行。由于dataof()返回的是一个SOAP::Data对象,你就能够访问SOAP::Data的所有子程序,包括value()name()type()uri()attr()等用于直接访问元素的值、元素的名字、元素的数据类型、元素的uri,以及所有元素各自的属性。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134