ここでは、受信した添付ファイルを操作するユーザアプリケーション(メディエータファンクション)の作成方法について説明します。
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メッセージに添付して送信を行います。