手动写一个soap客户端_一个简单的SOAP客户端

手动写一个soap客户端

更新日期:2001年6月

SOAP(简单对象访问协议)是由IBM,Microsoft,DevelopMentor和UserLand Software的代表开发的,不断发展的W3C标准,用于通过网络交换信息。 随着越来越多的SOAP服务器在Web上公开可用,SOAP正在使用几乎任何语言编写的程序-甚至是用流行的简单语言(如Visual Basic,JavaScript和perl)编写的简短小程序-HTML对于Web浏览器的作用:它为他们提供了一种简单的方法,可以利用越来越多的信息资源通过Web获得的优势。

像HTML一样,SOAP提供了一组标记来指示使用HTTP传输协议(以及自SOAP 1.1和SMTP之后)在Web上发送的不同信息的角色。 但是,SOAP比HTML提供了更多的功能。 使用SOAP,您的程序会将“ SOAP请求”(简短的XML文档,描述了在远程计算机上调用的方法以及传递给远程计算机的任何参数)发送给SOAP服务器。 SOAP服务器将尝试使用这些参数执行该方法,并将SOAP响应发送回您的程序。 响应是执行结果或适当的错误消息。 公共SOAP服务器可用于向任何SOAP客户提供股票价格,最新的货币兑换率,FedEx软件包跟踪信息,代数表达式的解决方案以及各种信息。

在SOAP出现之前,尝试使用此类信息的程序必须拉下Web页面并“刮” HTML以查找适当的文本。 对这些网页进行直观的重新设计(例如,将当前股价放在表格的第三列而不是表格的第二列中)是使这些程序无用的全部方法。 SOAP规范及其简短的SOAP请求和响应模式为客户端和服务器之间的合同提供了框架,该框架为更健壮的信息收集工具奠定了基础。

有很多SOAP客户端可用于大多数流行的编程语言。 有关广泛的列表,请参见SOAP :: Lite for Perl主页上的SOAP Toolkits部分(请参阅参考资料 )。 大多数工具都为您提供了一个类库,一个COM对象或与其等效的对象,以便从您自己的程序中进行调用。 通常,这些客户端库的使用遵循以下模式:

  1. 您的程序将传递要调用的远程方法的名称以及任何必要的参数。
  2. 该库将组装SOAP请求的适当XML文档以打包此信息。
  3. 该库将此XML文档传递给由SOAP端点URL标识的SOAP服务器,这与您通过指定服务器的URL将浏览器指向Web服务器地址的方式很相似。
  4. SOAP服务器尝试执行该方法后,它将围绕执行结果组装SOAP响应XML文档,并将其传递回SOAP客户端。
  5. 接收到SOAP响应后,客户端库解析XML以获取方法调用的结果,然后使用该库将该结果传递给程序。

SOAPClient4XG

SOAP简介总是谈论用于SOAP请求和响应的XML文档的结构,但是我玩过的SOAP客户端始终负责在后台进行XML组装和解析,因此我不必这样做。 作为XML极客,我想自己做XML部分。 我决定,如果SOAP如此简单,我应该能够编写一个简单的SOAP客户端,该客户端读取SOAP请求的XML文档,将其发送到命令行上指定的SOAP端点URL,读回响应文档,然后输出该回应。 这将使其成为真正的通用SOAP客户端,因为它可以在任何SOAP服务器上调用任何方法。

清单1中所示的SoapClient4XG(“面向XML Geeks的SOAP客户端”)Java类无需使用前面提到的SOAP Toolkits页面上列出的任何专用Java SOAP类即可执行此操作(请参阅参考资料 )。 在检查了所需的SOAP端点URL和SOAP XML文档的文件名参数以及可选的SOAP操作参数之后,它将读入文件,将其发送到SOAP服务器,读回响应,并将其输出为标准输出。

因为此SOAP客户端使用HTTP协议发送XML SOAP请求,所以许多必要的工作是HTTP设置。 Java提供了一个带有大量“设置”方法的HttpURLConnection类,用于适当地设置每个HTTP参数,并且大多数方法都可以使用简单的字符串进行设置。 需要一点额外代码的一个HTTP参数是Content-Length ,因此SoapClient4XG通过将XML请求的读入后放入字节数组中,然后检查字节数组的length属性来计算XML请求的length

还可以使用其他HTTP实现,这些实现可以为您设置这些HTTP参数。 Sun的开源巴西Web应用程序框架(请参阅参考资料 )使HTTP问题的处理自动化,并使正确的SOAP错误处理变得更加容易,因为(与旧的HttpURLConnection类不同)它是通用HTTP类,并非专门为简化此类而编写的。 Java applet加载图像和其他Web资源。

有关完整的SOAP客户端,请参见清单1。

运行它

Xmethods.com提供了越来越多的公开可用的SOAP服务列表。 除了告诉您每个服务是否需要可选的SOAP Action参数之外,其中许多描述还包括示例XML请求,因此我为该示例的温度SOAP服务器复制了示例请求,添加了一些空白,并替换了自己的zip。 zipcode元素中的代码,如清单2所示。

将此文件存储在一个名为weattherreq.xml的文件中之后 , 清单3中的命令行将其内容发送到在我获得示例XML的同一XMethods Web页面上指定的SOAP端点URL。

清单4所示,SOAP服务器将存储在其response元素中的当前温度发送回SOAP响应。

因为此SOAP客户端从您创建的XML文档文件发送SOAP请求-而不是它在您无权访问的情况下为您创建的SOAP请求-您可以使用XML编辑器或文本编辑器进行修改直接发送XML。 更重要的是,此SOAP客户端显示了利用SOAP服务不断增长的选择所需要做的工作。 您只需要命名服务的SOAP端点URL,设置HTTP参数,发送一些XML来指示要调用的方法以及将参数传递给它们,然后等待响应。

一定要检查一下您喜欢的编程语言可用的SOAP库。 与我的SOAP客户端和其他功能相比,它们通常提供更好的错误处理能力,而其他功能则为健壮的应用程序开发奠定了更好的基础。 只需记住最终实现这一切的简单性,以及此简单协议所具有的强大功能即可。

(特别感谢Michael Brennan对HTTP问题的帮助。)


翻译自: https://www.ibm.com/developerworks/xml/library/x-soapcl/index.html

手动写一个soap客户端

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值