Hitachi

Cosminexus V11 アプリケーションサーバ Webサービス開発ガイド


30.5.2 添付ファイルからSOAPメッセージへのマッピングの注意事項(MTOM/XOP)

添付ファイルからSOAPメッセージをマッピングするときの注意事項について説明します。

〈この項の構成〉

(1) MIMEパートの記述順序

MIMEパートは1個のルートパートと0個以上の添付ファイルパートで構成されます。

ルートパートは,MIMEパートの先頭に記述されます。ルートパートのあとに,添付ファイルパートが記述されます。

添付ファイルパートでは,Javaインタフェースで指定された引数や戻り値がマッピングされます。Javaインタフェースの指定内容と添付ファイルパートでの記述順序の対応を次の表に示します。

表30‒9 Javaインタフェースの指定内容と添付ファイルパートの記述順序

項番

Javaインタフェースでの指定内容

添付ファイルパートの記述順序

1

メソッド引数

メソッド引数に指定された順に記述されます。

2

メソッド戻り値

添付ファイルパートの先頭に記述されます。

3

配列型

配列内の要素順に記述されます。

4

ユーザ定義型

ユーザ定義型内での指定順に記述されます。

ユーザ定義型の中で指定したユーザ定義型で,添付ファイルのJava型を指定するときは,深さ優先順で添付ファイルパートが記述されます。

Javaインタフェースと添付ファイルパートのマッピング例を示します。

図30‒3 Javaインタフェースと添付ファイルパートのマッピング例

[図データ]

(2) ルートパートから添付ファイルへのマッピング

MTOM/XOP仕様形式の添付ファイルの場合,ルートパートから添付ファイルパートへのマッピングにはXOP仕様で定められたXOP情報セットが使用されます。XOP情報セットがルートパートのSOAPボディに記述され,対応する添付ファイルパートのContent-Idが設定されます。Content-Idによって,ルートパートから対応する添付ファイルパートを参照できます。ルートパートから添付ファイルパートの参照例を次に示します。背景色付きの太字部分がCID URLスキームと,対応する添付ファイルパートのContent-Idになります。

-uuid:e63fe7dc-ad8a-4fb1-8f56-ce7b5841a06f
Content-Type: text/xml
 
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <getUserData xmlns="http://localhost">
      <in0>
        <xop:Include xmlns="http://www.w3.org/2004/08/xop/include" href="cid:39820675-44bb-4e28-9926-577bf27fa07c@jaxws.cosminexus.com"/>
      </in0>
    </getUserData>
  </S:Body>
</S:Envelope>
 
--uuid:e63fe7dc-ad8a-4fb1-8f56-ce7b5841a06f
Content-Id:<39820675-44bb-4e28-9926-577bf27fa07c@jaxws.cosminexus.com>
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
 
[添付データ]
--e63fe7dc-ad8a-4fb1-8f56-ce7b5841a06f--

(a) XOP情報セットの形式

ルートパートのSOAPボディに記述されるXOP情報セットの形式を次に示します。

"<xop: Include href=" + <CID URLスキーム> + "/>"

(b) MTOM/XOP仕様形式の添付ファイルのデータサイズによるマッピング方法

MTOM/XOP仕様形式の添付ファイルは,マッピング元であるJava型とJavaインタフェースに指定する添付ファイルのデータサイズによって,添付ファイルパートへのマッピング方法が異なります。マッピング方法を次の表に示します。

表30‒10 MTOM/XOP仕様形式の添付ファイルのデータサイズによる添付ファイルパートへのマッピング

項番

Java型

添付ファイルのデータサイズ

添付ファイルパートへのマッピング

1

byte[]

null

マッピングしない※1

2

0バイトのデータ

マッピングする※2

3

0バイトより多いバイト数のデータ

マッピングする※3

4

java.awt.Image型

null

マッピングしない※1

5

0バイトのデータ

マッピングしない※1

6

0バイトより多いバイト数のデータ

マッピングする※3

7

javax.xml.transform.Source型

null

マッピングしない※1

8

0バイトのデータ

マッピングする※2

9

0バイトより多いバイト数のデータ

マッピングする※3

10

javax.activation.DataHandler型

null

マッピングしない※1

11

0バイトのデータ

マッピングする※2

12

0バイトより多いバイト数のデータ

マッピングする※3

注※1

wsi:swaRef形式の添付ファイルと異なり,ルートパートだけで構成されるマルチパートとなります。ルートパートにあるMIMEボディにはSOAPエンベロープを格納します。SOAPボディに該当する引数の要素は出現しません。添付ファイルデータがnullである場合のXMLへのマッピング例を次に示します。

  • Webサービス呼び出しプログラム

    ...
    UserInfoService service = new UserInfoService();
    UserInfo impl = service.getUserInfo(new MTOMFeature());
     
    result = impl.getUserData(  null  );
    ...
  • SOAPメッセージ

    --uuid:cbc0221b-8ee3-40a3-adc1-d5fa52a8d66e
    Content-Id: <rootpart*cbc0221b-8ee3-40a3-adc1-d5fa52a8d66e@jaxws.cosminexus.com>
    Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
    Content-Transfer-Encoding: binary
     
    <?xml version="1.0" ?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
      <S:Body>
        <ns2:getUserData xmlns:ns2="http://localhost">
        </ns2:getUserData>
      </S:Body>
    </S:Envelope>
    --uuid:cbc0221b-8ee3-40a3-adc1-d5fa52a8d66e--
注※2

ルートパートとデータがない(MIMEボディが空である)添付ファイルパートから構成されるマルチパートとなります。Javaインタフェースで複数の添付ファイルデータを指定している場合は,添付ファイルパートは複数となります。

注※3

ルートパートと添付ファイルパートから構成されるマルチパートとなります。Javaインタフェースで複数の添付ファイルデータを指定している場合は,添付ファイルパートは複数となります。