简单SOAP客户机

2002-8-20 13:12:47【作者】 畅享网 【进入论坛】
广告

简单SOAP客户机 
 
--通用 Java SOAP 客户机


Bob DuCharme (
bob@snee.com)

负责企业文档的副总裁,UDICo

2001 年 5 月

已更新:2001 年 6 月

本文章描述了一个用 Java 编写的不使用专门 SOAP 库的简单通用 SOAP 客户机。 该客户机可以让您用任何 XML 编辑器(或文本编辑器)创建自己的请求, 而不是在暗中为您创建 SOAP 请求 XML 文档。 该客户机向您显示实际的 SOAP 响应 XML 文档,而不是仅仅提供远程方法的返回值。 这个简短的 Java 程序精确显示了什么是 SOAP:打开 HTTP 连接、发送适当 XML 以调用远程方法、接着读取服务器返回的 XML 响应。

SOAP(简单对象访问协议)是 IBM、Microsoft、DevelopMentor 和 UserLand Software 为在网络上交换信息而开发的一种已在发展的 W3C 标准。 随着 Web 上可以公开使用的 SOAP 服务器的不断增加,SOAP 几乎对用任何语言编写的程序—— 即使是用流行的简单语言(如 Visual Basic、JavaScript 和 perl)编写的非常短小的程序——执行着 HTML 对 Web 浏览器所做的事:它为这些程序提供一个简单的方法来利用万维网上不断增加的可用信息源。

与 HTML 类似,SOAP 提供一套标记来表示在 Web 上使用 HTTP 传输协议(从 SOAP 1.1 以来,SMTP 也可以) 发送的不同信息块的作用。但是,SOAP 向您提供的能力远远强于 HTML。 使用 SOAP,您的程序向 SOAP 服务器发送“SOAP 请求”(一个简短的 XML 文档,描述在远程机器上要调用的方法和所有要传递给它的参数)。SOAP 服务器将尝试用那些参数执行该方法,并将 SOAP 响应发回程序。响应可以是执行的结果,也可以是相应的错误消息。 可以使用公共 SOAP 服务器为提出请求的客户机提供股票价格、最新的货币兑换率、FedEx 包裹跟踪信息、 代数表达式的解决方案以及其它各类信息。

在 SOAP 存在之前,尝试使用这种信息的程序必须先捕获 Web 页面,然后“刮下”HTML,以查找适当的文本。 对这些 Web 页面进行可视的重新设计(例如,将当前股票价格放到表中第三列而不是第二列中)就可以使这些程序无用。SOAP 规范以及它所携带的简要的 SOAP 请求和响应模式为客户机和服务器之间的联络提供了一个框架,该框架是那些强健得多的信息收集工具的基础。

有许多 SOAP 客户机可用于大多数的流行编程语言;有关详尽列表,请参阅 SOAP::Lite for Perl 主页上的 SOAP Toolkits 部分(请参阅参考资料)。大多数 SOAP 客户机都提供类库、COM 对象或从您自己程序调用的等同对象。通常,使用这些客户机库遵循以下模式:

程序传递要调用的远程方法的名称和所有必需参数。

库组装 SOAP 请求的适当 XML 文档以将这一信息打包。

库将这一 XML 文档传递给 SOAP 端点 URL 标识的 SOAP 服务器,这与通过指定服务器的 URL 将浏览器指向 Web 服务器地址很类似。

SOAP 服务器尝试执行方法后,它组装包含执行结果的 SOAP 响应 XML 文档,并将它发回 SOAP 客户机。

接收 SOAP 响应时,客户机库对 XML 进行语法分析以获得方法调用的结果,并将结果传递给使用库的程序。

SOAPClient4XG

SOAP 的介绍(请参阅 developerWorks 上 Graham Glass 编写得极佳的“ Web 服务革命”专栏)总是讨论用于 SOAP 请求和响应的 XML 的结构,但是我接触到的 SOAP 客户机总是会暗中进行 XML 组装和语法分析,所以我从来不用知道。 作为使用 XML 的人员,我曾想自己执行 XML 部分;我认为如果 SOAP 这样简单,那么我应该能够编写一个简单的 SOAP 客户机来读取 SOAP 请求的 XML 文档、将它发送到命令行上指定的 SOAP 端点 URL、读回响应文档并输出该响应。这将使它成为一个真正的通用 SOAP 客户机,因为它调用任何 SOAP 服务器上的任何方法。

清单 1 中显示的 SoapClient4XG(“SOAP Client for XML Geeks”)Java 类执行该任务, 而不使用早先提到的 SOAP Toolkits 页面上列出的任何专用 Java SOAP 类(请参阅参考资料)。 检查了必需的 SOAP 端点 URL 和 SOAP XML 文档文件名参数及可选的 SOAP 操作参数后,读入文件,将它发送到 SOAP 服务器,读回响应,然后将其输出到标准出口。

因为该 SOAP 客户机使用 HTTP 协议发送 XML SOAP 请求,所以大量必需做的工作就是 HTTP 设置。Java 提供了一个 HttpURLConnection 类,它有许多“设置”方法来正确设置每个 HTTP 参数,并且可以用简单的字符串来设置大多数参数。需要一点额外代码的一个 HTTP 参数是 Content-Length,所以 SoapClient4XG 通过在读取 XML 请求之后将它放到一个字节数组中,然后检查字节数组的长度特性来计算 XML 请求的长度。

可使用其它会代您设置这些 HTTP 参数的 HTTP 实现。Sun 开放源码的 Brazil Web 应用程序框架(请参阅参考资料)会自动处理 HTTP 问题, 并使处理适当 SOAP 错误更为容易,因为(不象早期的 HttpURLConnection 类)它是一个没有经过特定编写以用 Java 小应用程序减轻装入图像和其它 Web 资源工作的通用 HTTP 类。

请参考“清单 1”,获取完整的 SOAP 客户机。

运行它

Xmethods.com(请参阅参考资料)提供了一份在不断发展的公共可用 SOAP 服务列表。除了告诉您可选 SOAP 操作参数是否对每个服务是必需的之外,它们的许多描述还包括样本 XML 请求,所以我复制了对气温 SOAP 服务器的样本请求,添加了一些空白空间, 并在 zipcode 元素中替代了自己的邮政编码,如清单 2 所示。

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

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

因为这个 SOAP 客户机从您创建的 XML 文档文件(而不是从暗中为您创建的无访问权的文件)发送 SOAP 请求,所以,可以使用 XML 编辑器或文本编辑器来直接修改发送的 XML。更重要的是,该 SOAP 客户机显示了利用 SOAP 服务正在发展的选项是何等容易。 您只要命名服务的 SOAP 端点 URL,设置 HTTP 参数,发送表示方法的一些 XML 和要传递给它们的参数,然后等待响应。

一定要仔细检查可用于您喜爱的编程语言的 SOAP 库。通常,它们提供的错误处理比我的 SOAP 客户机的更好,提供的其它一些功能是用于强健应用程序开发的较好基础。请记住,所有这一切之下的简单性和这种简单协议所实现的强大功能。

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

 参考资料

SOAP::Lite for Perl 主页上的 SOAP Toolkits 部分提供了各种编程语言的工具箱选项。并且,dW 上 Joe Johnston 所著的一篇新文章说明了 如何使用 SOAP::Lite

Graham Glass 的 developerWorks 系列“ Web Servcies 革命”,特别是 第 2 部分 第 3 部分,主要介绍了 SOAP 开发。

James Snell 的 Web 服务权威人士,第 1 部:SOAP 上的反映提供了目前业界中关于 SOAP 作用的更新,并比较了几个 SOAP 工具箱的功能。

Uche Ogbuji 的 在 SOAP 应用程序中使用 WSDL 介绍了“Web 服务描述语言”和它可以为 SOAP 开发提供的好处。

XMethods.com 有一份可以使用的在不断发展的公共可用 SOAP 服务列表,包括在创建“清单 2”中所用的温度服务器

W3C 站点上的 SOAP 1.1 规范草案展示了当前的技术细节。

“Apache XML 项目”包括 Apache SOAP,实现向 W3C 的 SOAP 提交。

如果要将 SOAP 用于 Web 服务,则可能要查看 “IBM 动态电子商务”页面上的白皮书、案例研究和其它资源的链接。

Sun 关于其 Brazil 开放源码的 Web 应用程序框架的页面描述了它如何支持 SOAP 消息传递。

关于 IBM 的 SOAP 安全性扩展页面描述了把安全性保卫措施添加到 SOAP 实现中的建议(包括至“W3C 注意事项”的链接), 以及一个带扩展的 SOAP 封装 API

IBM 的 “Web 服务”实情表格简要说明了 SOAP 如何符合“Web 服务”第一步,并提供了其它资源的链接。

在伦敦举行的 IBM Solution 2001 开发人员讨论会上,2001 年 5 月 17 日星期四的会议提到了 SOAP、Web 服务和 MQSeries 系列。

关于作者

Bob DuCharme (www.snee.com/bob) 是 Manning Publications 即将出版的 XSLT Quickly、Prentice Hall 的 XML: The Annotated SpecificationSGML CD 及 McGraw Hill 的 Operating Systems Handbook 等书的作者。他为 XML.com 撰写了“Transforming XML”专栏, 并为 XML Magazine、XML Journal、IBM developerWorks 和 Prentice Hall 的 XML Handbook 撰稿。他经常在业界会议和用户组中演讲, 是 UDICo (www.udico.com) 负责企业文档的副总裁,他还制造了一个高性能小型中间件引擎和开发工具箱。他在哥伦比亚大学获得宗教方面的学士学位,在纽约大学获得计算机科学硕士学位,现在和他的妻子 Jennifer 及两个女儿 Madeline、Alice 生活在布鲁克林地区的 Park Slope。

如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐
jill.jiang@amteam.org | 021-51096826-112 | 在线联系
老孙的IT运维管理之道[原创]用户的BSM用户的IT业务管..

从企业实际的IT运营角度来看,BSM是推动IT与业务融合,实现、改善WCNG司IT管理和治理的最佳实践之一。

吕建伟 专栏和CIO问答软件项目实施管理

现实中很少能按照正规流程来的,所以只能把流程中的各个环节拆开,个个击破,以后就可以见招拆招了。

ITIL实施:CIO时刻准备着

千军易得,一将难求,要推进ITIL实施,CIO扮演的角色不容忽视。吹响集结号,CIO出击的时刻已经来到。

节能与优化IT 企业CIO过冬良策

当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良……