摘要
开发者们正确地批评了soap(simple object access protocol),因为它过分地复杂。然而,事实上,soap只是一种xml信息格式,并且,它的复杂性更多的与我们如何活用soap有关系。在soap的最简单形式中,它能够在web服务器端和客户端传递结构化的信息。由于soap信息并不限制为xml数据,它还能够包括二进制的内容,所以soap信息代表了一种在web上传递信息的简单方式。在frank sommers的最新的web services专栏中,他演示了如何使用saaj1.2(soap with attachments api for java 1.2)创建,解析和发送带有二进制内容的soap信息。
(2100字;2003年,9月)by frank sommers
原文第一页:http://www.javaworld.com/javaworld/jw-09-2003/jw-0912-webservices.html
在写这篇文章的时候,大多数的web服务由简单的信息交换组成:客户端连接到web服务器端,并发送一条消息给服务端。web服务端处理客户端的请求并发送回应给客户端。这个简单的请求/回应模式,模拟了http协议帮助客户端/服务器端交互的过程。同样由于http,web服务信息的交换经常必须包含二进制的内容。比如图像,文档或者声音片段。这篇文章介绍了使用saaj1.2(soap with attachements api for java 1.2)来发送和接收二进制内容web信息。
在深入到传送二进制web服务内容的复杂机制前,值得指出的是:简单的请求/回应类型的web服务,与客户端/服务器端的远程过程调用(rpc)方式不同。在rpc中,服务器给出一个类似api的接口。而客户端通过使用远程调用服务的api,传递必要的参数和接收调用值来启用一个服务。
基于xml的rpc调用类似在oo系统中调用一个对象一样。事实上,当你用基于xml的java api工作时(java api for xml-based rpc简jax-rpc),你总是觉得在跟java对象工作,而不是跟xml文档工作。jax-rpc能让你把web服务看作远程对象,这很像java rmi(remote method invocation)。jax-rpc运行时把高层次的oo方法调用转化为远程web服务需要xml文档。虽然rpc类型的web服务通常能提供更便捷的编程模型,但是rpc调用也必须依赖更低的消息层来完成组成远程调用xml信息交换。
对于有些web服务来说,直接在低级别的消息层编程通常是很有用的。例如,如果你想调用一个处理订单的文档并返回收据,对这样的web服务,你能够很容易地把文档交换模块化为一个请求/回应的信息交换。替代远程方法调用的是,你将构建xml信息,直接发送这些信息到web服务,如果有的话,还会处理服务的xml回应。由于soap为web信息服务定义了公共的信息格式,你需要构建符合soap格式的信息,并且,一旦服务有回应,就要把这些soap回应信息解析成你的程序所能理解的格式。
saaj提供了一个能方便地构建和读取soap信息的库,这个库还允许你通过网络接收和发送soap信息。saaj定义了javax.xml.soap包。在这个包里面的类组成了最初的jaxm(java api for xml messaging),但是最近他们被分离出来成为单独的api。jaxm依赖于saaj来构建和处理soap信息,并且依赖saaj来增加信息的可靠性和增加其他的xml信息特征。尽管saaj是j2ee的一部分,jaxm却不是。这篇文章聚焦于saaj中最有用的一个方面:就是saaj捆绑二进制内容到soap信息的能力。
使用附件的好处
尽管soap的设计核心集中在信息中封装xml文档,但是,soap的附件特征扩展了soap所能包含的信息,除了普通的soap部分,还可以包括0个到多个附件,如图1所示。每一个附近都由一个mime类型定义,并且能采用任何的二进制流内容。
冬临 ,java 爱好者,matrix xml soap翻译小组成员
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器