Module  java.xml.ws

Package javax.xml.soap

提供用于创建和构建SOAP消息的API。 该软件包在SOAP与JavaAss(SAAJ)1.4规范的附件API中定义。

javax.xml.soap包中的API可以让您执行以下操作:

  • 创建到指定端点的点对点连接
  • 创建SOAP消息
  • 创建一个XML片段
  • 将内容添加到SOAP消息的头部
  • 将内容添加到SOAP消息的正文中
  • 创建附件,并向其添加内容
  • 访问/添加/修改SOAP消息的部分
  • 创建/添加/修改SOAP故障信息
  • 从SOAP消息中提取内容
  • 发送SOAP请求响应消息

另外, javax.xml.soap包中的API扩展了其对应的org.w3c.dom包。 这意味着SOAPPartSOAPMessage也是DOM Level 2 Document ,并且可以通过使用DOM的应用程序,工具和库来操作(有关更多信息,请参见http://www.w3.org/DOM/)。 重要的是要注意,虽然可以使用DOM API将普通的DOM节点添加到SAAJ树中,但SAAJ API在检查或操作树时仍然需要返回SAAJ类型。 为了实现这一点,允许SAAJ API(特别是SOAPElement.getChildElements() )以相应的所需类型的对象静默地替换相对于SAAJ要求错误类型的对象。 这些替换不能导致树的逻辑结构发生变化,所以从DOM API的角度来看,树将保持不变。 然而,树的物理组成将会发生变化,因此对被替换的节点的引用将引用不再是树的一部分的节点。 如果SAAJ API不需要,那么SAAJ API不允许进行这些替换,因此替换对象永远不会被以后的SAAJ API调用替代。

实际上这意味着在使用DOM API处理树之后,开始使用SAAJ API的应用程序必须假定该树已被转换为所有SAAJ树,并且对已获得的树中的对象的任何引用使用DOM API不再有效。 从SAAJ API切换到DOM API不允许导致无效引用,也不会专门使用SAAJ API。 它只是在特定的SAAJ树上使用DOM API切换到使用导致无效引用风险的SAAJ API。

发现SAAJ实施

在SAAJ API中定义了几个工厂来发现和加载特定的实现:

前三个定义newInstance()方法,它使用通用的查找过程来确定实现类:
  • 检查是否设置了与工厂类名称相同的系统属性(例如javax.xml.soap.SOAPFactory )。 如果这样的属性存在,那么它的值被假定为实现类的完全限定名。 这个查询阶段使得每个JVM覆盖SAAJ实现。
  • 使用配置文件“jaxm.properties”。 该文件采用标准Properties格式,通常位于Java安装的conf目录中。 它包含实现类的完全限定名称,其中键是上面定义的系统属性。
  • 使用由ServiceLoader类定义的服务提供商加载工具尝试使用default loading mechanism查找和加载服务的实现
  • 最后,如果上述所有步骤失败,则使用SAAJMetaFactory实例来定位特定实现(对于MessageFactorySOAPFactory )或使用平台默认实现( SOAPConnectionFactory )。 每当使用SAAJMetaFactory ,执行其获取实际实例的查找过程。