ページの先頭行へ戻る
Interstage Service Integrator V9.5.0 アプリケーション開発ガイド
FUJITSU Software

6.1.5 添付ファイルを操作する

ここでは、受信した添付ファイルを操作するユーザアプリケーション(メディエータファンクション)の作成方法について説明します。

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) {
                         // 例外処理
                    }
               }
          }
     }
}
  1. 添付ファイルが格納されているファイルパスを取得します

    添付ファイルのデータが格納されているMIMEデータファイルのパスを、共通メッセージの以下のヘッダから取得します。

    ヘッダキー:com.fujitsu.esi.filepayload.currentfile


  2. 添付ファイルの変更結果出力先ファイルパスを取得します

    添付ファイルを操作した結果を共通メッセージに反映させたい場合、MIMEデータファイルの出力先パスを、共通メッセージの以下のヘッダから取得しておきます。

    ヘッダキー:com.fujitsu.esi.filepayload.nextfile


    変更結果を共通メッセージに反映する必要がない(後続の処理で利用しない)のであれば、省略できます。


  3. ファイルパスをもとに FileDataSource オブジェクトを作成します

    MIMEデータファイルから、MimeMultipart オブジェクトを作成用の FileDataSource オブジェクトを作成します。


  4. FileDataSource オブジェクトをもとに MimeMultipart オブジェクトを作成します

    FileDataSource オブジェクトをもとに MimeMultipart オブジェクトを作成します。


  5. MimeMultipart オブジェクトを利用し、添付データを操作します

    作成した MimeMultipart オブジェクトを利用し、添付データを操作します。MimeMultipart オブジェクトのルートパート(0番目の要素)は、SOAPメッセージが格納されています。添付ファイルを操作する場合、ルートパート以外のデータを操作します。

    SOAPメッセージを操作したい場合は、共通メッセージのペイロードに格納されたSOAPメッセージを操作してください。MIMEデータファイルのルートパートを操作しても、共通メッセージに反映されません。ただし、ルートパートのMIMEヘッダは共通メッセージに反映されるので、注意してください。


  6. 添付データを操作した変更結果を、ファイルに書き出します

    操作した添付データを共通メッセージに反映させたい場合、操作結果をMIMEデータファイルに書き出します。書き出し先のファイルパスは、手順2で取得したファイルパスを利用してください。


添付ファイルの保持形式

ここでは、添付ファイルと共通メッセージの対応関係について説明します。

添付ファイル付きのSOAPメッセージを受信した場合も同様に、SOAPメッセージ(ルート要素 soap:Envelope)全体が共通メッセージのペイロードに格納されます。

添付ファイル部分は、添付ファイルが格納されているMIMEマルチパート全体(SOAPメッセージであるルートパート含む)をMIMEデータファイルとしてファイルに保存します。このMIMEデータファイルは、共通メッセージと関連付けられており、共通メッセージがメモリからなくなった時点でMIMEデータファイルも自動的に削除されます。

また、添付ファイル付きのSOAPメッセージを送信する場合は、共通メッセージのペイロード内容をSOAPメッセージ全体とし、保存された添付ファイルをSOAPメッセージに添付して送信を行います。