SAAJ (SOAP with Attachments API for Java) インターフェース

SOAP with Attachments API for Java™ (SAAJ) インターフェースは、インターネットを介して XML 文書を Java プログラミング・モデルから送信する標準的な方法を提供している SOAP メッセージングに使用します。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 は、JAX-RPC プログラミング・モデルが提供する基盤を拡張する、次世代の Web サービス・プログラミング・モデルです。戦略的 JAX-WS プログラミング・モデルを使用すると、標準ベースの注釈モデルのサポートによって、Web サービスおよび Web クライアントの開発が容易になります。JAX-RPC プログラミング・モデルとアプリケーションは引き続きサポートされますが、Web サービス・アプリケーションおよびクライアントを新規に開発する場合は、実装が容易な JAX-WS プログラミング・モデルをご利用ください。best-practices

Java API for XML-Based RPC (JAX-RPC) プログラミング・モデルは XML を操作するための SAAJ 1.2 をサポートしています。

JAX-WS プログラミング・モデルは SAAJ 1.2 および 1.3 をサポートしています。SAAJ 1.3 には、SOAP 1.2 メッセージのサポートが含まれています。

SAAJ 1.2 と SAAJ 1.3 仕様との違いは、トピック「SAAJ バージョンの違い」で確認できます。

Web サービスでのメッセージの使用方法

Web サービスは XML テクノロジーを使用してメッセージを交換します。これらのメッセージは XML スキーマに準拠しています。Web サービス・アプリケーションを開発する場合は、操作できる XML API が限定されます (例えば、Document Object Model (DOM))。Java オブジェクトを操作して実行時にシリアライゼーションおよびデシリアライゼーションを完了させる方がより効率的です。

Web サービスは SOAP メッセージを使用して、 クライアントとサーバー間のリモート・プロシージャー・コールを表します。 一般に、SOAP メッセージは、パラメーターおよび戻り値を表す一連の Java 値タイプのビジネス・オブジェクトにデシリアライズされます。さらに、Java プログラミング・モデルは、アプリケーションとハンドラーをサポートして SOAP メッセージを直接操作する API を提供します。 プログラミング・モデルによりサポートされる XML スキーマ・タイプの数には制限があるため、仕様ではメッセージを操作するための拡張機能として SAAJ データ・モデルを提供しています。

XML スキーマ・タイプを操作するには、カスタム・データ・バインダーを使用して、 XML スキーマ・タイプを Java タイプにマップする必要があります。

SAAJ インターフェース

SAAJ 関連のクラスは javax.xml.soap パッケージにあります。SAAJ は各種インターフェースおよび抽象クラスでビルドされ、クラスの多くはファクトリー・メソッドを呼び出すことによって開始され、SOAPConnectionFactory や SOAPFactory などのファクトリーを作成します。

トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): Java セキュリティーが 使用可能になっていて、jaxm.properties ファイルの読み取り許可が付与されていない場合、SOAPFactory インスタンス が javax.xml.soap.SOAPFactory.newInstance() の呼び出しを通じて作成されるか、MessageFactory インスタンスが MessageFactory.newInstance() の 呼び出しを通じて作成されると、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 サービス・テクノロジー (WS-Addressing (WS-A)、WS-Atomic Transaction (WS-AT)、WS-Notification など) を サポートするため、Java セキュリティーが使用可能になっている場合、 いずれの Web サービス・アプリケーションでもこの SecurityException は無視してかまいません。

gotcha
最もよく使用されるクラスを以下に示します。
  • SOAPMessage: XML 部分および XML 以外の部分の両方のメッセージが含まれています
  • SOAPHeader: SOAP ヘッダーの XML エレメントを表します
  • SOAPBody: SOAP 本体の XML エレメントを表します
  • SOAPElement: SOAP メッセージの他のエレメントを表します
SAAJ インターフェースの他の部分には以下があります。
  • MessageContext: SOAP メッセージと関連プロパティーが含まれています
  • AttachmentPart: バイナリー添付ファイルを表します
  • SOAPPart: メッセージの XML 部分を表します
  • SOAPEnvelope: SOAP エンベロープの XML エレメントを表します
  • SOAPFault: SOAP fault 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 エンベロープが 1 つあります。 このエンベロープは、 SAAJ javax.xml.SOAPEnvelope オブジェクトによって表されます。 SOAP 仕様は SOAP エンベロープ内にある各種のエレメントを定義し、 SAAJ は SOAP エンベロープ内の各種のエレメント用のオブジェクトを定義します。

SOAP メッセージはまた、添付ファイルと呼ばれる非 XML データを含むこともできます。 これらの添付ファイルは、 SOAPMessage オブジェクトからアクセスできる SAAJ AttachmentPart オブジェクトによって表されます。

ハンドラーおよびアプリケーションが、 しっかりとバインドされたマッピングの代わりに、 汎用 SOAPElement API を使用する理由は次のようにいくつかあります。
  • Web サービスは、他の Web サービスに対するコンジットである可能性があります。この場合、SOAP メッセージは転送されるだけです。
  • Web サービスは、異なるデータ・モデル、 例えばサービス・データ・オブジェクト (SDO) を使用してメッセージを取り扱うことがあります。メッセージを SAAJ DOM から異なるデータ・モデルに変換するほうが簡単です。
  • ハンドラー、例えば、デジタル署名検査ハンドラーは、 メッセージを一般的に取り扱うことがあります。

SOAPElement インターフェースが常にレガシー・システムの最良の代替インターフェースであるとは限らないため、 XML スキーマ・タイプをマップするために、その他のステップが必要になる場合があります。 そのような際には、データ中心のアプリケーションに、より適している、SDO などの汎用プログラミング・モデルを使用することもあります。

XML スキーマは、SDO またはデータ・オブジェクトを Java オブジェクトと対にする、カスタム・データ・バインディングを含むように構成できます。例えば、ランタイムは着信 SOAP メッセージを SOAPElement インターフェースにレンダリングし、それをカスタム・データ・バインダーに渡してさらに処理します。 着信メッセージに SDO が含まれる場合、ランタイムはデータ・オブジェクト・コードを認識し、 そのタイプのマッピングを照会してカスタム・バインダーを探し、SDO コードを表す SOAPElement インターフェースをビルドします。 SOAPElement は SDOCustomBinder に渡されます。

SOAPElement、SDO、およびカスタム・バインダーを使用したアプリケーションの開発のプロセスについて詳しくは、『カスタム・データ・バインダー』を参照してください。

移行ユーザーの方へ 移行ユーザーの方へ: WebSphere Application Server バージョン 8 より、SOAPMessage.getSOAPHeader メソッドと getSOAPBody メソッドは、メッセージ内に対応するエレメントがない場合に、SOAPException をスローするようになりました。例外をスローするのではなくヌルを返すという振る舞いに戻すために、システム・プロパティー com.ibm.websphere.webservices.soap.IBMSOAPMessage.ENABLE_LEGACY_GETSOAP_BEHAVIOR が用意されています。このシステム・プロパティーは、JVM カスタム・プロパティー com.ibm.websphere.webservices.soap.enable.legacy.get.behavior を使用して設定します。 この JVM カスタム・プロパティーのデフォルト値は、false です。この JVM プロパティーを true に設定すると、対応するメッセージがない場合に SOAPMessage.getSOAPHeader メソッドと getSOAPBody メソッドに対してヌルを戻すという、従来の振る舞いに戻ります。

従来のヌルを返す振る舞いは、仕様には準拠していません。

trns

サポートされる標準および仕様の完全なリストについては、Web サービス仕様書および API 文書を参照してください。


トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_saaj
ファイル名:cwbs_saaj.html