22.1.17 添付ファイルを使用する場合のサポート範囲

プロバイダ実装クラスを使用して開発したWebサービス,またはディスパッチベースのWebサービスクライアントでは,SAAJ仕様に従って添付ファイル付きのSOAPメッセージを生成,送受信できます。一度に送受信できる添付ファイルのサイズおよび個数は,実行環境のメモリ量によって変わりますが,制限はありません。メモリ量を増やせば,容量の大きい添付ファイルや多量の添付ファイルを一度に送受信することもできます。

添付ファイルを送受信するときのメモリの使用量については,「付録C.3 添付ファイル使用時の1リクエスト当たりのメモリ使用量」を参照してください。

<この項の構成>
(1) MIMEタイプ
(2) 添付ファイルを読み込む場合の注意事項
(3) DOM APIを使用する場合の注意事項
(4) 複数のファイルを添付する場合の注意事項

(1) MIMEタイプ

添付ファイルに対応するMIMEタイプは,添付ファイルの拡張子によって決まります。添付ファイルのMIMEタイプを明示しない場合,添付ファイルの拡張子によって自動的に適切なMIMEタイプが設定されます。AttachmentPart#setContentType()メソッドなどによってMIMEタイプを明示する場合は,添付ファイルの拡張子に対応した適切なMIMEタイプを指定する必要があります。不正なMIMEタイプを指定した場合の動作は保証されません。

添付ファイルの拡張子とMIMEタイプの適切な組み合わせを次の表に示します。次の表に示した拡張子以外の場合,MIMEタイプはapplication/octet-streamとなります。

表22-3 添付ファイルの拡張子とMIMEタイプ

項番添付ファイルの拡張子対応するMIMEタイプ
1html,htmtext/html
2txt,texttext/plain
3gif,GIFimage/gif
4iefimage/ief
5jpeg,jpg,jpe,JPGimage/jpeg
6tiff,tifimage/tiff
7xwdimage/x-xwindowdump
8ai,eps,psapplication/postscript
9rtfapplication/rtf
10texapplication/x-tex
11texinfo,texiapplication/x-texinfo
12t,tr,roffapplication/x-troff
13auaudio/basic
14midi,midaudio/midi
15aifcaudio/x-aifc
16aif,aiffaudio/x-aiff
17wavaudio/x-wav
18mpeg,mpg,mpevideo/mpeg
19qt,movvideo/quicktime
20avivideo/x-msvideo

(2) 添付ファイルを読み込む場合の注意事項

ファイルを読み込んで添付ファイルとして送受信する場合は,java.io.FileInputStreamで読み込んだオブジェクトではなく,javax.activation.FileDataSourceで読み込んだオブジェクトを添付ファイルに設定する必要があります。例を次に示します。

AttachmentPart apPart = request.createAttachmentPart();
FileDataSource source = new FileDataSource("D:¥¥attachment.txt");
apPart.setDataHandler(new DataHandler(source));
request.addAttachmentPart(apPart);

java.io.FileInputStreamで読み込んだオブジェクトを設定した場合の動作は保証されません。

(3) DOM APIを使用する場合の注意事項

DOM APIを使用してSOAPメッセージを作成する場合は,次に示すメソッドは使用しないでください。使用した場合の動作は保証されません。

(4) 複数のファイルを添付する場合の注意事項

複数の添付ファイルを一度に送信する場合は,それぞれのAttachmentPartオブジェクトにユニークなContent-IDを設定する必要があります。Content-IDを設定しない,または重複するContent-IDを設定して複数の添付ファイルを送信しようとした場合,最後に設定した添付ファイルだけが送信されます。

複数のAttachmentPartオブジェクトにユニークなContent-IDを設定する例を次に示します。

AttachmentPart apPart1 = request.createAttachmentPart();
FileDataSource source1 = new FileDataSource("D:¥¥attachment1.txt");
apPart1.setDataHandler(new DataHandler(source1));
apPart1.setContentId("001");
request.addAttachmentPart(apPart1);

AttachmentPart apPart2 = request.createAttachmentPart();
FileDataSource source2 = new FileDataSource("D:¥¥attachment2.txt");
apPart2.setDataHandler(new DataHandler(source2));
apPart2.setContentId("002");
request.addAttachmentPart(apPart2);

AttachmentPart apPart3 = request.createAttachmentPart();
FileDataSource source3 = new FileDataSource("D:¥¥attachment3.txt");
apPart3.setDataHandler(new DataHandler(source3));
apPart3.setContentId("003");
request.addAttachmentPart(apPart3);