28.5.2 添付ファイルデータを取得する方法(wsi:swaRef形式)
添付ファイルのデータを取得する方法について説明します。各例に示す"dhandler"は,受信したjavax.activation.DataHandlerオブジェクトを表します。
- 〈この項の構成〉
(1) 添付ファイルをjava.io.InputStreamオブジェクトとして取得する方法
受信した添付ファイルをjava.io.InputStreamオブジェクトとして取得する場合,受信したjavax.activation.DataHandlerオブジェクトからgetInputStreamメソッドでjava.io.InputStreamオブジェクトを取得します。
java.io.InputStream stream = dhandler.getInputStream();
(2) 添付ファイルをjavax.activation.DataSourceオブジェクトとして取得する方法
受信した添付ファイルをjavax.activation.DataSourceオブジェクトとして取得する場合,受信したjavax.activation.DataHandlerオブジェクトからgetDataSourceメソッドで関連づけられたjavax.activation.DataSourceオブジェクトを取得します。
javax.activation.DataSource datasource = dhandler.getDataSource();
(3) 添付ファイルをJavaオブジェクトとして取得する方法
受信した添付ファイルをJavaオブジェクトとして取得する場合の手順を示します。ここでは,java.awt.Imageオブジェクトを取得する場合の例を示します。
-
添付ファイルのデータをオブジェクトとして取得します。
受信したjavax.activation.DataHandlerオブジェクトからgetContentメソッドでオブジェクトを取得します。
java.lang.Object content = dhandler.getContent();
-
添付ファイルのMIMEタイプを取得します。
受信したjavax.activation.DataHandlerオブジェクトに対して,getContentTypeメソッドを実行します。getContentTypeメソッドを実行することで,添付ファイルのMIMEタイプを取得できます。
java.lang.String mimetype = dhandler.getContentType(); (取得したmimetypeの内容)image/jpeg
-
オブジェクトを適切な型にキャストします。
添付ファイルのMIMEタイプに応じて,オブジェクトを適切な型にキャストします。
java.awt.Image attachment = (java.awt.Image) content;
(4) 添付ファイルをjava.lang.Stringオブジェクトとして取得する方法
受信した添付ファイルをJavaオブジェクトとして取得する場合の手順を示します。
-
添付ファイルのデータをオブジェクトとして取得します。
受信したjavax.activation.DataHandlerオブジェクトからgetContentメソッドでオブジェクトを取得します。
java.lang.Object content = dhandler.getContent();
-
添付ファイルのMIMEタイプを取得します。
受信したjavax.activation.DataHandlerオブジェクトに対し,getContentTypeメソッドを実行します。getContentTypeメソッドを実行することで添付ファイルのMIMEタイプおよび文字コードを取得できます。
java.lang.String mimetype = dhandler.getContentType(); (取得したmimetypeの内容)text/plain; charset=UTF-8
-
オブジェクトを適切な型にキャストします。
添付ファイルのMIMEタイプに応じて,オブジェクトを適切な型にキャストします。
java.lang.String attachment = (java.lang.String) content;
(5) javax.activation.DataHandlerオブジェクト取得時の注意事項
wsi:swaRef形式の添付ファイルを含むMIME Multipart/Related構造のSOAPメッセージを受信すると,ストリーミングされたwsi:swaRef形式の添付ファイルとして操作できます。wsi:swaRef形式の添付ファイルの受信側では,javax.activation.DataHandlerオブジェクトが持つ入力ストリームからすべてのデータを読み込まないと受信処理が完了しないため,送信側の送信処理は受信側の受信処理が完了するまで待ち状態が続きます。
この状態を解消するためには,javax.activation.DataHandlerオブジェクトが持つjava.io.InputStreamオブジェクトからすべてのデータを読み込むか,javax.activation.DataHandlerクラスのwriteTo(java.io.OutputStream)メソッドを使用して入力ストリームのデータを出力ストリームに書き込む必要があります。