Interstage Application Server SOAPサービス ユーザーズガイド
目次 索引 前ページ次ページ

第4章 Messaging方式のアプリケーションの実装> 4.3 SAAJ-APIによるSOAPメッセージの処理

4.3.4 添付ファイルの処理

 SOAPMessageオブジェクトには1つのSOAPPartオブジェクトと、0個以上のAttachmentPartオブジェクトを含むことができます。javax.xml.soap.AttachmentPartはそれぞれの添付ファイルを表すオブジェクトです。AttachmentPartオブジェクトを生成するにはSOAPMessage.createAttachmentPartメソッドを使用し、SOAPMessageオブジェクトにAttachmentPartを設定するにはSOAPMessage.addAttachmentPartメソッドを使用します。

 SOAPMessageオブジェクトから添付ファイルを取り出すにはSOAPMessage.getAttachmentsメソッドを使用します。またSOAPMessage.countAttachmentsメソッドで添付ファイルの個数を取得できます。

 import javax.xml.soap.*;
 import java.net.URL;
 import java.io.FileInputStream;
 import java.util.Iterator;
 import javax.activation.DataHandler;
     .....
   MessageFactory mf = MessageFactory.newInstance();
   SOAPMessage msg = mf.createMessage();
   SOAPPart part = msg.getSOAPPart();
     .....
 // AttachmentPartの設定1
// Windowsの場合
   URL url = new URL("file:///C:/temp/sample.txt");
// Solaris OE, Linuxの場合
   URL url = new URL("file:///temp/sample.txt");
   AttachmentPart ap1 = msg.createAttachmentPart( new DataHandler(url));
   ap1.setContentType("text/plain");
   msg.addAttachmentPart(ap1);

 // AttachmentPartの設定2
   AttachmentPart ap2 = msg.createAttachmentPart();
// Windowsの場合
   FileInputStream fis = new FileInputStream("C:\\temp\\sample.xml");
// Solaris OE, Linuxの場合
   FileInputStream fis = new FileInputStream("/tmp/sample.xml");
   ap2.setContent( fis, "text/xml");
   msg.addAttachmentPart(ap2);
      .....
 // 添付ファイルの個数を取得
 int count = msg.countAttachments();

 // AttachmentPartの取得
   Iterator it = msg.getAttachments();
   while(it.hasNext()){
     AttachmentPart ap = (AttachmentPart)it.next();
     String contentType = ap.getContentType();
     String contentId = ap.getContentId();
     Object content = ap.getContent();
       .....
   }
       .....

 AttachmentPartオブジェクトは1つのSOAPMessageオブジェクトに対して複数設定できます。上記の例では、2つのAttachmentPartオブジェクトを設定しています。

■添付ファイルのデータと情報

 AttachmentPartオブジェクトのgetContent / setContentメソッドを使用した場合、使用したクラスに応じてデータ変換が行われるため、受信した添付ファイルのデータが送信元の添付ファイルのデータと異なる場合があります。
 送信元と同じデータを受信する必要がある(データ変換を回避したい)場合は、getDataHandler / setDataHandler メソッドを使用してください。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005