SOAPアダプタでのMTOMサポートの構成
このユースケースでは、SOAPアダプタでMTOM (Message Transmission Optimization Mechanism)サポートを構成する方法について説明します。
SOAPメッセージの例と構造
MIME-Version: 1.0
Content-Type: Multipart/Related; boundary=MIME_boundary;
type="application/soap+xml"; start="<claim@insurance.com>"
--MIME_boundary
Content-Type: application/soap+xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <claim@insurance.com>
<Envelope>
<Body>
<ReceiveImage>
<filename>abc.jpg</filename>
<image>.... JPEG image base64 .....</image>
</ReceiveImage>
</Body>
</Envelope>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xop='http://www.w3.org/2004/08/xop/include'
xmlns:xop-mime='http://www.w3.org/2005/05/xmlmime'>
<soap:Body>
<Order>
<orderNumber>ABC</orderNumber>
<orderType>backorder</orderType>
<image xop-mime:content-type='image/jpeg'>
<image xop-mime:content-type='image/jpeg'>
</image>
</Order>
</soap:Body>
</soap:Envelope>
--MIME_boundary
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
Content-ID: <image@insurance.com> 4
...binary JPG image...
--MIME_boundary--
MTOMのメッセージ構造は次のとおりです:
-
startパラメータは、MIMEメッセージのどの部分がルートXOPドキュメントであるかを示します。 -
Content-ID値は、MIMEメッセージの一部を識別します。 この場合、ルートXOPドキュメントです。 -
<xop:Include>要素は、JPEGバイナリ・アタッチメントを参照します。 -
Content-IDは、バイナリ添付ファイル内のJPEGを識別します。
application/octet-stream MIME添付
コンテンツ・タイプがapplication/octet-streamのMIME添付ファイルはバイナリ・ファイルです。 通常、スプレッドシートやワープロなどのアプリケーションで開く必要のあるアプリケーションまたはドキュメントです。 添付ファイルにファイル名拡張子が関連付けられている場合は、ファイルのタイプを識別できる場合があります。 たとえば、.exe拡張子は、それがWindowsまたはDOSプログラム(実行可能ファイル)であることを示します。 .docで終わるファイルはおそらくMicrosoft Wordで開くことができます。 ジェネリックなapplication/octet-streamコンテンツ・タイプに加えて、異なるサブタイプを持つ添付ファイル(たとえば、application/postscript、application/x-macbinary、およびapplication-msword)が発生することもあります。 それらはapplication/octet-streamに似ていますが、特定のタイプのファイルに適用されます。
xs:base64Binary型のXMLデータの送信を最適化する方法が説明されています。 トランスポート・プロトコルがHTTPの場合、MIME添付ファイルはそのデータを保持し、同時に、送信者とレシーバの両方がSOAPメッセージのXMLデータに直接アクセスできるようにし、xs:base64BinaryデータのマーシャリングにMIMEアーティファクトが使用されたことを認識する必要はありません。 バイナリ・データの最適化プロセスには、以下が含まれます:
-
バイナリ・データのエンコード
-
SOAPエンベロープからのバイナリ・データの削除
-
バイナリ・データを圧縮してMIMEパッケージに添付
-
SOAPエンベロープ内のそのパッケージへの参照の追加
MTOMが有効な場合、MTOM仕様では、Webサービス・ランタイムがbase64バイナリ・データを送信するときにXOPバイナリ最適化を使用する必要はありません。 代わりに、この仕様により、ランタイムはそのように選択することができます。 これは、実行時に、SOAPメッセージで直接base64バイナリ・データを送信する方が効率的であると判断する場合があるためです(たとえば、変換およびトランスポートのオーバーヘッドがデータをインライン展開するよりも多くのリソースを消費する少量のデータを転送する場合など)そのまま)。 ただし、JAX-RPCサービス用のMTOM用のOracle WebLogic Server Webサービス実装では、MTOMが有効な場合に常にMTOM/XOPが使用されます。
設計時
-
SOAPアダプタの構成時に、接続ページでbase64Binary要素ベースのWSDLを指定します。
-
適切な「リクエストに応じて添付ファイルを送信」 (アウトバウンド・リクエストの場合)と「レスポンスで添付ファイルを受け入れる」 (アウトバウンド・レスポンスの場合)オプションを有効にして、そのエンドポイントのMTOM処理を有効にします。

「図soap_mime_headers.pngの説明」
トリガー接続でMTOMサポートを構成することはできません。
リクエスト・メッセージに対してMTOMを有効にすることを選択すると、そのバイナリ・ノードのXPathが計算され、JCAファイルに対話仕様プロパティとして格納されます。
<property name="attachmentXpathInfo" value="/*[namespace-uri()='http://www.oracle.com/UCM' and
local-name()='GenericRequest']/*[namespace-uri()='http://www.oracle.com/UCM' and local-name()=
'Service']/*[namespace-uri()='http://www.oracle.com/UCM' and local-name()='Document']/*[namespace-uri()
='http://www.oracle.com/UCM' and local-name()='File']/*[namespace-uri()='http://www.oracle.com/UCM'
and local-name()='Contents']"/>レスポンス・メッセージの場合、プロパティattachmentXpathInfoForResponseがXPathを表すためにJCAファイルで使用されます。
マッピング
-
アウトバウンド・リクエストの場合、仮想ファイルシステム(VFS)からの添付ファイル参照は、アウトバウンド・メッセージのbase64Binary要素にマップできます。 以下に示すように、RESTソースからのattachmentReferenceは、メッセージのbase64Binary要素にマップされます。

「図soap_mime_mapper1.pngの説明」 -
アウトバウンド・レスポンスの場合、添付ファイルはVFSに保存され、ペイロードのbase64Binary要素はVFSリファレンスを保持します。 VFSリファレンスをさらに使用して、RESTリソースまたはFTPアダプタにマップすることができます:

図soap_mime_mapper2.pngの説明
ランタイム
実行時に、JCAファイル内のattachmentXpathInfoおよびattachmentXpathInfoForResponseプロパティの可用性に基づいて、MTOM処理がトリガーされます。 この情報は設計時に保持されます。
アウトバウンド・リクエストでは、JCAファイル内のattachmentXpathInfoによって指定されたXPath情報がクラウド・メッセージに添付ファイルを作成し、SOAPメッセージをMTOM固有の形式で構造化します。
アウトバウンド・レスポンスでは、クラウド・メッセージのレスポンスで受信された添付ファイルがあるかどうかを確認し、さらにVFSに保存されます。 プロパティattachmentXpathInfoForResponseによって表されるノードは、それをクラウド・メッセージ内の添付ファイルのVFS参照で置き換えます。