ここでは、受信した添付ファイルを操作するユーザアプリケーション(メディエータファンクション)の作成方法について説明します。
SOAPアダプタで、どのように添付ファイルが保持されるかについては、“添付ファイルの保持形式”を参照してください。
受信した添付ファイルを操作するには、JavaMailのAPIを利用したユーザアプリケーションを開発します。ISIでは、添付ファイルをJavaMailのjavax.mail.internet.MimeMultipartオブジェクトとして操作できます。
以下に、ISIの共通メッセージからJavaMailのjavax.mail.internet.MimeMultipartオブジェクトを取得するユーザアプリケーションのコード例を示します。
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMultipart;
import com.fujitsu.esi.message.ESIMessage;
public class SoapAttachmentSample {
public void attachmentHandle(ESIMessage message) {
// 変更結果出力用の FileOutputStream
FileOutputStream fos = null;
try {
// (1) 添付ファイルデータが格納されているファイルパスの取得
String currentAttachmentFilepath = message.getHeader().getParameter().get(
"com.fujitsu.esi.filepayload.currentfile");
// (2) 変更結果書き出し先ファイルパスの取得
String nextAttachmentFilepath = message.getHeader().getParameter().get(
"com.fujitsu.esi.filepayload.nextfile");
// (3) ファイル情報から FileDataSource オブジェクトを作成
FileDataSource source = new FileDataSource(currentAttachmentFilepath);
// (4) MimeMultipart オブジェクトの作成
MimeMultipart multipart = new MimeMultipart(source);
// (5) MimeMultipart オブジェクトを利用し、添付データを操作
:
// (6) 変更結果をファイルに書き出す
fos = new FileOutputStream(nextAttachmentFilepath);
multipart.writeTo(fos);
} catch (MessagingException e) {
// 例外処理
} catch (FileNotFoundException e) {
// 例外処理
} catch (IOException e) {
// 例外処理
} finally {
try {
fos.flush();
} catch (IOException e) {
// 例外処理
} finally {
try {
fos.close();
} catch (IOException e) {
// 例外処理
}
}
}
}
}添付ファイルが格納されているファイルパスを取得します
添付ファイルのデータが格納されているMIMEデータファイルのパスを、共通メッセージの以下のヘッダから取得します。
ヘッダキー:com.fujitsu.esi.filepayload.currentfile
添付ファイルの変更結果出力先ファイルパスを取得します
添付ファイルを操作した結果を共通メッセージに反映させたい場合、MIMEデータファイルの出力先パスを、共通メッセージの以下のヘッダから取得しておきます。
ヘッダキー:com.fujitsu.esi.filepayload.nextfile
変更結果を共通メッセージに反映する必要がない(後続の処理で利用しない)のであれば、省略できます。
ファイルパスをもとに FileDataSource オブジェクトを作成します
MIMEデータファイルから、MimeMultipart オブジェクトを作成用の FileDataSource オブジェクトを作成します。
FileDataSource オブジェクトをもとに MimeMultipart オブジェクトを作成します
FileDataSource オブジェクトをもとに MimeMultipart オブジェクトを作成します。
MimeMultipart オブジェクトを利用し、添付データを操作します
作成した MimeMultipart オブジェクトを利用し、添付データを操作します。MimeMultipart オブジェクトのルートパート(0番目の要素)は、SOAPメッセージが格納されています。添付ファイルを操作する場合、ルートパート以外のデータを操作します。
SOAPメッセージを操作したい場合は、共通メッセージのペイロードに格納されたSOAPメッセージを操作してください。MIMEデータファイルのルートパートを操作しても、共通メッセージに反映されません。ただし、ルートパートのMIMEヘッダは共通メッセージに反映されるので、注意してください。
添付データを操作した変更結果を、ファイルに書き出します
操作した添付データを共通メッセージに反映させたい場合、操作結果をMIMEデータファイルに書き出します。書き出し先のファイルパスは、手順2で取得したファイルパスを利用してください。
添付ファイルの保持形式
ここでは、添付ファイルと共通メッセージの対応関係について説明します。

添付ファイル付きのSOAPメッセージを受信した場合も同様に、SOAPメッセージ(ルート要素 soap:Envelope)全体が共通メッセージのペイロードに格納されます。
添付ファイル部分は、添付ファイルが格納されているMIMEマルチパート全体(SOAPメッセージであるルートパート含む)をMIMEデータファイルとしてファイルに保存します。このMIMEデータファイルは、共通メッセージと関連付けられており、共通メッセージがメモリからなくなった時点でMIMEデータファイルも自動的に削除されます。
また、添付ファイル付きのSOAPメッセージを送信する場合は、共通メッセージのペイロード内容をSOAPメッセージ全体とし、保存された添付ファイルをSOAPメッセージに添付して送信を行います。