SOAP和SAAJ

日期: 2008-03-27 作者:William Brogden 来源:TechTarget中国 英文

Java的SOAP工具包   这些年以来, SOA首次进入Java程序员的视野,大概是1998年左右,一些SOAP服务器和客户端的工具包就已经被创建好了。虽然SOAP规范已经到达了相当程度的稳定性,但是一般XML工具持续平行的发展和各种厂商之间的竞争阻止了任何一个工具包成为Java程序员们的普遍选择。   Java拥有由Sun公司发起的Java社区处理程序,Sun公司试图通过在典型业界代表中通过协议定义标准的APIs(称为Java标准规范需求,JSRs)。其现在已经拥有了两个相关规范版本。

其中一个叫做SAAJ的1.3版本中覆盖了最基本的功能,并且在2006年四月已经得到了更新。   其中另外一……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

Java的SOAP工具包

  这些年以来, SOA首次进入Java程序员的视野,大概是1998年左右,一些SOAP服务器和客户端的工具包就已经被创建好了。虽然SOAP规范已经到达了相当程度的稳定性,但是一般XML工具持续平行的发展和各种厂商之间的竞争阻止了任何一个工具包成为Java程序员们的普遍选择。

  Java拥有由Sun公司发起的Java社区处理程序,Sun公司试图通过在典型业界代表中通过协议定义标准的APIs(称为Java标准规范需求,JSRs)。其现在已经拥有了两个相关规范版本。其中一个叫做SAAJ的1.3版本中覆盖了最基本的功能,并且在2006年四月已经得到了更新。

  其中另外一个产品叫做JAXM,目前处于1.1版。JAXM建立是通过在SAAJ基础上加入消息传输APIs。

  为什么SOAP需要附件

  作为一个基于XML的消息协议,SOAP消息需要相当强大的处理能力和内存。一个SOAP消息的各种部分都必须遵守XML为允许的字符和字符序列定义的规则,从而保证二进制数据不能直接被包括进来。除此之外,SOAP的实现在决定如何处理内容之前已经典型地分析了整个SOAP消息,因此大量的数据领域能够轻易地超过可用内存。因为所有这些原因,SOAP被公认需要某种机制来承载大量载荷和二进制数据作为附件,而不是封装在SOAP消息里面。

  一种显而易见的机制是适用与e-mail消息附件相同的方式,即MIME方式,在此方式中消息集合通过头部和隔板标志。第一部分通常是一个完整的SOAP消息信封,接着是一些与应用程序相关的部分。

  带附件的SOAP的API的1.3版本

  使用SAAJ的主要对象是一个SOAP消息对象,它由MessageFactory中的一个叫做createMessage的方法创建得到。在SOAP1.1版本和SOAP1.2版本中都存在的一个问题已经被MessageFactory的实现解决了。MessageFactory使得程序员可以指定生成的风格。SAAJ标准的范围强调了构造SOAP消息的API,但是它也的确提供了抽象的SOAP连接类,此连接类的实现可以用于简单的消息传输。

  逻辑上说,一个SOAP消息中主要的部分中每一个在SAAJ中都有相应的Java类。这个工具包最明显的特点就是这些代表了SOAP消息各个部分的核心的类实现了相应的org.w3c.dom中的接口。这就意味着SOAP对象在标准的Java库中是同我们熟悉的XML操作工具兼容的。

  在SAAJ的工具箱中,一个SOAP消息对象包含了一个完整的SOAP消息。一个消息要么是一个SOAP格式的XML文档,要么是一个MIME消息,而MIME消息最开始也是一个XML文档。这个XML格式的SOAP被包含在一个SOAPPart对象中,它实现了org.w3c.dom文档接口。所有的SOAP消息都包含一个独立的SOAPPart,它反过来又包含了一个SOAP信封,与文档中的根元素对应。

  在一个信封元素里面,需要一个SOAP消息来得到一个Body元素,并且可能还有一个头部元素。SAAJ提供了SOAP头部和SOAPBody对象,使得程序员可以操纵这些元素里面的内容。SAAJ只是提供了机制,实际上使得程序员可以创建了SOAPBody内容和SOAPHeader内容。

  一个SOAP消息对象可能包含零个,一或者多个AttachmentPart对象,包括任何MIME内容类型例如XML文档,纯文本文档或者一个图片。如果它有零个附件则这个消息将作为一个普通的XML文档传递。添加一个或者多个附件自动地使得传输作为MIME部分的一个集合。附件通过AttachmentPart类被添加,AttachmentPart需要一个数据源,典型地如一个输入流,以及一个MIME内容类型。因为Java标准库为创造一个输入流提供了许多方法,因此这个方法非常灵活。

  SAAJ在Sun的Java Web服务开发包和企业版

  J2EE的1.4版包含了1.2版的SAAJ,此版本只处理了SOAP的1.1版本中的消息。最新的企业版5包含SAAJ的1.3版本。如果你不希望使用完整的企业版本,最新的Java的Web服务包包含了SAAJ的1.3版本的实现,并且有完整的文档和例子。开源的项目Glassfish也包含了SAAJ的1.3版本。

  Apache软件基金会中开放源的实现

  几年前,Apache软件基金会的SOAP工程提供了最广泛使用的开放源的SOAP实现。最近,一个主要的与工程有关的Web服务的改组将起初的Apache的SOAP和目前的Axis工程融合到了Apache的Web服务项目中。目前关于Apache软件工程的SOAP和Web服务工具包有两种非常不同的版本。Axis工程,紧跟着起初的Apache的SOAP项目,正因为实现了SAAJ而成为被广泛使用着的Web服务工具包。这也有一个Axis2的项目,它试图重新设计Axis的架构,从而得到更快的速度和灵活性,并且仍然支持SAAJ接口。

  下一步怎么办?

  SOAP和XML以及Java的世界似乎并不愿意固步自封。W3C正在为“SOAP消息传递的最佳机制”而努力,而这个机制毫无疑问地需要另外一个版本的类似SAAJ的Java工具包。

相关推荐

  • 事件驱动框架和SOA在空军的应用

    空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。

  • 揭秘New Relic APM技术细节

    New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响

  • 仅凭SOA和云无法解决业务数据管理风险问题

    SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。

  • 内存数据网格提供商一头扎进Java

    10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。