WebサービスでSOAPメッセージをやり取りする際、画像やPDFなどの大きなバイナリデータを効率的に送信することは重要な課題です。そこで活用されるのがMTOM(Message Transmission Optimization Mechanism)です。多くの開発者はMTOMを単一の機能として捉えていますが、実際には3つの異なる仕様が組み合わさることで実現しています。
Key Facts
- MTOMは、バイナリデータをXMLから切り離して送信する3つの機能で構成されている。
- XOP(XML-binary Optimized Packaging)がXML内のバイナリデータの参照先として機能する。
- MIMEコンテナを使用して、XML部分とバイナリデータをまとめて管理する。
- 一般的にMTOMはHTTPプロトコル経由で利用される。
MTOMを構成する3つの階層的機能
MTOMの仕様は、抽象的な概念から具体的な実装まで、以下の3つのステップで定義されています。
1. 抽象的な送信最適化機能
まず基礎となるのが「抽象的なSOAP送信最適化機能」です。これは、バイナリデータを含むSOAPメッセージを扱う際の基本コンセプトを定義したものです。本来、バイナリデータはXML Infoset(XMLの論理的なデータモデル)の一部ですが、この機能によって「バイナリデータをシリアライズされたXMLとは別に送信する」という考え方が導入されました。ただし、この段階では具体的なデータ形式や送信方法は定義されていません。
2. MIMEとXOPによるシリアライズ
次に、具体的なデータ表現を定義するのが「最適化されたMIME Multipart/Relatedシリアライズ」です。ここでは、XML内のバイナリデータがあった場所にXOP(XML-binary Optimized Packaging)という参照用プレースホルダーを配置します。そして、このXOPを含むXMLと、実際のバイナリデータをMIME(Multipurpose Internet Mail Extensions:多目的インターネットメール拡張)というコンテナにまとめて格納します。これにより、データの構造化が可能になります。
3. HTTPによる転送実装
最後に、構築されたMIMEおよびXOP形式のSOAPメッセージを、実際にどのようにネットワーク経由で送るかを定義するのが「HTTP SOAP送信最適化機能」です。これにより、標準的なHTTPプロトコルを用いて効率的にデータを転送することが可能になります。
MTOMとXOPの密接な関係
実務上の運用では、「MTOM」という言葉が「MTOM with XOP」を指す略称として使われることがほとんどです。理論上、MTOMの抽象モデルはXOP以外の参照メカニズムや、MIME以外のコンテナ形式、あるいはHTTP以外の転送プロトコルと組み合わせることも可能です。しかし、現実的な実装の多くは、XOP、MIME、そしてHTTPの組み合わせで構成されています。
| 構成要素 | 役割 | 性質 |
|---|---|---|
| 抽象的MTOM機能 | バイナリデータの分離送信という概念の定義 | 論理的定義 |
| XOP | XML内でのバイナリデータへの参照(プレースホルダー) | 参照メカニズム |
| MIME | XMLとバイナリデータをひとまとめにする容器 | コンテナ形式 |
| HTTP | 最適化されたメッセージを転送する手段 | 転送プロトコル |
Frequently Asked Questions
MTOMとは具体的に何を最適化するものですか?
SOAPメッセージに含まれるバイナリデータをXMLの中に直接埋め込むのではなく、外部に切り出して送信することで、データのエンコード負荷を軽減し、通信効率を向上させます。
XOPとMTOMの違いは何ですか?
MTOMは送信最適化の全体的な仕組み(フレームワーク)であり、XOPはその中でXMLからバイナリデータへアクセスするための「参照方式」を指します。
MTOMは必ずHTTPでなければならないのでしょうか?
仕様上の抽象モデルとしては、HTTP以外の転送プロトコルを利用することも可能です。しかし、実際の実装ではほとんどの場合、HTTPが利用されています。
MIMEコンテナが使われる理由は何ですか?
異なる形式のデータ(テキストベースのXMLとバイナリデータ)を、一つのメッセージとして構造的にまとめて送信するために、MIMEのMultipart/Related形式が適しているためです。