モジュール java.xml.ws

パッケージ javax.xml.soap

SOAPメッセージを作成および構築するためのAPIを提供します。 このパッケージはSOAP for Attachments API for Java™ (SAAJ) 1.4仕様で定義されています。

javax.xml.soapパッケージのAPIを使用すると、次の内容を実行できます。

  • 指定の端点へのポイントツーポイント接続の作成
  • SOAPメッセージの作成
  • XMLフラグメントの作成
  • SOAPメッセージのヘッダーにコンテンツを追加
  • SOAPメッセージの本文にコンテンツを追加
  • 添付部分の作成とその添付へのコンテンツの追加
  • SOAPメッセージ部分のアクセス、追加、修正
  • SOAPエラー情報の作成、追加、修正
  • SOAPメッセージからのコンテンツ抽出
  • SOAP要求応答メッセージの送信

さらに、javax.xml.soapパッケージのAPIにより、org.w3c.domパッケージのそれらに対応する部分も拡張されます。 これは、SOAPMessageSOAPPartも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への将来の呼出しによって、置き換えられたオブジェクトを通知なく置き換えることはできません。

つまり、実質的に、DOM APIからの操作のあとツリー上のSAAJ APIを使用して開始するアプリケーションは、ツリーがすでにSAAJツリーに変換されており、DOM APIを使用して取得したツリー内のオブジェクトへの参照は無効であると見なします。 参照が無効になるだけでなく、どちらもSAAJ APIを排他的に使用できないため、SAAJ APIからDOM APIへの切替えは実行できません。 特定のSAAJツリーでDOM APIからSAAJ APIの使用に切り替えるだけで、参照が無効になる危険が伴います。

SAAJ実装の発見

SAAJ APIには、特定の実装を検出してロードするためのいくつかのファクトリが定義されています:

最初の3つは、共通のルックアップ手順を使用して実装クラスを決定するnewInstance()メソッドを定義しています:
  • ファクトリ・クラスと同じ名前のシステム・プロパティが(e.g. javax.xml.soap.SOAPFactory)に設定されているかどうかをチェックします。 このようなプロパティが存在する場合、その値は実装クラスの完全修飾名とみなされます。 ルックアップのこのフェーズでは、SAAJ実装のJVM単位のオーバーライドが可能になります。
  • 構成ファイル"jaxm.properties"を使用します。 このファイルは標準のProperties形式であり、通常Javaインストールのconfディレクトリにあります。 これには、実装クラスの完全修飾名が格納されています。
  • ServiceLoaderクラスで定義されているサービス・プロバイダのロード機能を使用して、「デフォルトのロード・メカニズム」を使用してサービスの実装を見つけてロードしようとします。
  • 最後に、上記のすべてのステップが失敗した場合は、SAAJMetaFactoryインスタンスを使用して特定の実装を特定します。(MessageFactorySOAPFactoryの場合)またはプラットフォームのデフォルト実装は(SOAPConnectionFactory)です。 SAAJMetaFactoryが使用されるたびに、実際のインスタンスを取得するためのルックアップ手順が実行されます。