带附件的 SOAP Java API 接口

带附件的 SOAP Java™ API (SAAJ) 接口用于 SOAP 消息传递,它提供标准方法以从 Java 编程模型通过因特网发送 XML 文档。SAAJ 用于在 SOAP 消息流经运行时环境时将它处理到适当的上下文上。

最佳实践 最佳实践: IBM® WebSphere® Application Server 支持 Java API for XML-Based Web Services (JAX-WS) 编程模型以及 Java API for XML-based RPC (JAX-RPC) 编程模型。JAX-WS 是下一代 Web Service 编程模型,用于扩展 JAX-RPC 编程模型所提供的基础。使用策略 JAX-WS 编程模型,借助基于标准的注释模型的支持,简化了 Web Service 和客户机的开发。虽然仍支持 JAX-RPC 编程模型和应用程序,但应该利用易于实现的 JAX-WS 编程模型来开发新的 Web Service 应用程序和客户机。best-practices

Java API for XML-Based RPC (JAX-RPC) 编程模型支持 SAAJ 1.2 并且可以处理 XML。

JAX-WS 编程模型支持 SAAJ 1.2 和 1.3。SAAJ 1.3 包含 SOAP 1.2 消息的支持。

可以在主题“SAAJ 版本之间的差别”中查看 SAAJ 1.2 与 SAAJ 1.3 规范之间的差别。

如何在 Web Service 中使用消息?

Web Service 使用 XML 技术来交换消息。这些消息符合 XML 模式。开发 Web Service 应用程序时,只有有限的 XML API 可供使用,例如文档对象模型 (DOM)。在运行时期间处理 Java 对象并完成序列化和反序列化将更有效。

Web Service 使用 SOAP 消息表示客户机和服务器之间的远程过程调用。SOAP 消息通常被反序列化成一系列 Java 值/类型业务对象,这些业务对象表示参数和返回值。另外,Java 编程模型提供支持应用程序和处理程序的 API 以直接处理 SOAP 消息。因为该编程模型仅支持有限数目的 XML 模式类型,所以,该规范提供 SAAJ 数据模型作为扩展用来处理消息。

要处理 XML 模式类型,需要使用定制数据绑定程序将 XML 模式类型映射至 Java 类型。

SAAJ 接口

与 SAAJ 相关的类位于 javax.xml.soap 包中。SAAJ 在接口和抽象类的基础上构建,并且许多类从调用工厂方法来创建工厂(如 SOAPConnectionFactory 和 SOAPFactory)开始。

避免故障 避免故障: 如果启用了 Java 安全性,并且未授予读取 jaxm.properties 文件的权限,那么在通过调用 javax.xml.soap.SOAPFactory.newInstance() 来创建 SOAPFactory 实例时,或者通过调用 MessageFactory.newInstance() 来创建 MessageFactory 实例时,会发生 SecurityException 异常,并且会将以下异常写入系统日志中:
Permission:

      /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties : access denied 
(java.io.FilePermission /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties
read)

Code:

     com.ibm.ws.wsfvt.test.binding.addr1.binder.AddressBinder  
in  {file:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/
ahp6405Node01Cell/DataBinding.ear/address1.war/WEB-INF/lib
/addressbinder1.jar}

Stack Trace:

java.security.AccessControlException: access denied (java.io.FilePermission
/opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties read)
.

SOAPFactory 会忽略异常,并继续确定要装入的实现的下一种方法。因此,可以忽略此安全性异常的日志条目。

因为本产品使用 SOAPFactory 来支持其他 Web Service 技术(例如 WS-Addressing (WS-A)、WS-Atomic Transaction (WS-AT) 和 WS-Notification),所以在启用了 Java 安全性的任何应用程序中,您可以忽略此 SecurityException。

gotcha
最常用的类有:
  • SOAPMessage:包含消息,包括 XML 和非 XML 部分
  • SOAPHeader:表示 SOAP 头 XML 元素
  • SOAPBody:表示 SOAP 主体 XML 元素
  • SOAPElement:表示 SOAP 消息中的其他元素
SAAJ 接口的其他部分包括:
  • MessageContext:包含 SOAP 消息和相关的属性
  • AttachmentPart:表示二进制附件
  • SOAPPart:表示消息的 XML 部分
  • SOAPEnvelope:表示 SOAP 包络 XML 元素
  • SOAPFault:表示 SOAP 故障 XML 元素

SAAJ 模型中的主要接口是 javax.xml.soap.SOAPElement(也称为 SOAPElement)。通过使用此模型,应用程序可以处理使用预先存在的 DOM 代码的 SAAJ 模型。将预存在的 DOM 对象转换为 SAAJ 对象也很容易。

使用 SAAJ 接口创建的消息遵循 SOAP 标准。SOAP 消息在 SAAJ 模型中表示为 javax.xml.soap.SOAPMessage 对象。消息的 XML 内容由 javax.xml.soap.SOAPPart 对象表示。每个 SOAP 部件有一个 SOAP 包络。此封包由 SAAJ javax.xml.SOAPEnvelope 对象表示。SOAP 规范定义驻留在 SOAP 包络中的各种元素;SAAJ 为 SOAP 包络中的各种元素定义对象。

SOAP 消息还可以包含称为附件的非 XML 数据。这些附件由可从 SOAPMessage 对象访问的 SAAJ AttachmentPart 对象表示。

关于处理程序和应用程序为何使用一般 SOAPElement API 而不是紧绑定的映射,存在许多原因:
  • 一个 Web Service 可能是另一个 Web Service 的同步管道。在这种情况下,仅转发 SOAP 消息。
  • Web Service 可使用不同的数据模型(例如服务数据对象 (SDO))来操控消息。将消息从 SAAJ DOM 转换为另一种数据模型是更容易的。
  • 处理程序(例如,数字签名验证处理程序)可能要对消息进行一般处理。

由于 SOAPElement 接口并非始终都是旧系统的最佳替代者,因此,可能需要进一步映射 XML 模式类型。在这种情况下,您可能需要使用一个通用编程模型(例如,SDO),该模型更适合于以数据为中心的应用程序。

可以将 XML 模式配置为包含定制数据绑定,该数据绑定用来使 SDO 或数据对象与 Java 对象配对。例如,运行时将入局 SOAP 消息呈示到 SOAPElement 接口中,并将它传递给客户数据绑定程序以进行更多处理。如果入局消息包含 SDO,那么运行时识别数据对象代码,查询它的类型映射以查找定制绑定程序,并构建用来表示 SDO 代码的 SOAPElement 接口。SOAPElement 被传递给 SDOCustomBinder。

请参阅有关定制数据绑定程序的信息,以了解有关使用 SOAPElement、SDO 和定制绑定程序来开发应用程序的过程的更多信息。

对于转换用户 对于转换用户:WebSphere Application Server V8 开始,如果消息中没有相应的元素,那么 SOAPMessage.getSOAPHeadergetSOAPBody 方法会抛出 SOAPException。提供了一个系统属性 com.ibm.websphere.webservices.soap.IBMSOAPMessage.ENABLE_LEGACY_GETSOAP_BEHAVIOR,可将行为恢复为返回 NULL 而不抛出异常。此系统属性可以通过 JVM 定制属性 com.ibm.websphere.webservices.soap.enable.legacy.get.behavior 进行设置。此 JVM 定制属性的缺省值为 false。如果将此 JVM 属性设置为 true,那么将还原至先前的行为,即在没有相应消息时对 SOAPMessage.getSOAPHeader 和 getSOAPBody 方法返回空值。

先前返回空值的行为不符合规范。

trns

有关受支持的标准和规范的完整列表,请参阅 Web Service 规范和 API 文档。


指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_saaj
文件名:cwbs_saaj.html