16.2.11 javax.xml.bind.annotation.XmlMimeTypeアノテーション

javax.xml.bind.annotation.XmlMimeTypeアノテーションは,Java型とMIMEタイプの関連づけに使用されるJAXBのアノテーションで,javax.xml.ws.soap.MTOMアノテーションを使用する場合で,Java型とMIMEタイプを関連づけるときに使用します。

javax.xml.bind.annotation.XmlMimeTypeアノテーションは,SEIや暗黙のSEIがあるWebサービス実装クラスが持つサービスメソッドの引数,戻り値,またはユーザ定義型のgetterメソッドに指定できます。それ以外の個所(暗黙のSEIがないWebサービス実装クラスが持つサービスメソッドの引数,戻り値,ユーザ定義例外のフィールドなど)に指定した場合は動作が保証されません。

javax.xml.bind.annotation.XmlMimeTypeアノテーションをSEIなどにアノテートしている場合,Webサービス側のJAX-WSエンジンが発行するWSDLファイルやcjwsgenツールが生成するWSDLファイルは,javax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートしたJava型に対応するスキーマの要素に,アノテーションのvalue要素に指定した値を持つxmime:expectedContentTypes属性が付与されます。

javax.xml.bind.annotation.XmlMimeTypeアノテーションを使用した例を次の図に示します。

図16-19 javax.xml.bind.annotation.XmlMimeTypeアノテーションを使用した例

[図データ]

Java型とMIMEタイプを関連づけない場合,javax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートする必要はありません。そのとき,MTOM/XOP仕様形式の添付ファイルで送信されるメッセージの添付ファイルパートにあるContent-Typeフィールドの値は,Java型に対応する初期値が使用されます。

javax.xml.bind.annotation.XmlMimeTypeアノテーションを使用しない例を次の図に示します。

図16-20 javax.xml.bind.annotation.XmlMimeTypeアノテーションを使用しない例

[図データ]

javax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートし,MIMEタイプを関連づけることができるJava型とその指定個所を次の表に示します。なお,それ以外の型にjavax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートした場合の動作は保証されません。

表16-17 MIMEタイプを関連づけることができるJava型とその指定個所

項番Java型関連づけの可否指定個所
メソッド引数メソッド戻り値ユーザ定義型のフィールドユーザ定義例外のフィールド
1java.awt.Image※1※2×※3
2javax.xml.transform.Source※2×※3
3javax.activation.DataHandler※2×※3
4java.awt.Imageの配列型※4※2×※3
5javax.activation.DataHandlerの配列型※4※2×※3
6java.util.List<Image>※2×※3
7java.util.List<DataHandler>※2×※3
8javax.xml.ws.Holder<Image>×※5×※5×※5
9javax.xml.ws.Holder<Source>×※5×※5×※5
10javax.xml.ws.Holder<DataHandler>×※5×※5×※5
(凡例)
○:指定できます。
△:条件付きで指定できます。
×:指定できません。

注※1
JAXB仕様に従います。java.awt.ImageクラスはJava SE仕様でのグラフィカルイメージを表現する抽象クラスで,データ形式の規定はありません。この関連づけを使用して画像データをインスタンス化した場合,具象クラスのインスタンスには復号化した情報だけが保持される可能性があります。そのため,JPEG形式のように符号化するときに情報が削減される可能性のある画像を添付ファイルとして送信する場合,受信側のインスタンスが送信側のインスタンスや元のデータと異なることがあります。
画像を元の形式のまま扱いたい場合は,javax.activation.DataHandlerにマッピングされるMIMEタイプ(application/octet-streamなど)を使用してください。
注※2
JavaプロパティにMIMEタイプを関連づける場合,javax.xml.bind.annotation.XmlMimeTypeアノテーションをgetterメソッドにアノテートしてください。フィールドおよびsetterメソッドにアノテートした場合,動作は保証されません。JavaプロパティにMIMEタイプを関連づける例を次に示します。

package com.sample;

import java.awt.Image;

public class UserData {

   private Image image;

   public void setImage(Image image) {
       this.image = image;
   }

   @javax.xml.bind.annotation.XmlMimeType("image/png")
   public Image getImage() {
       return image;
   }
}

注※3
ユーザ定義例外のフィールドにjavax.xml.bind.annotation.XmlMimeTypeアノテーションを指定した場合,動作は保証されません。
注※4
1次元配列だけ使用でき,多次元配列は使用できません。多次元配列を使用した場合,動作は保証されません。
注※5
Holder型は引数にだけ指定できます。戻り値には指定できません。
<この項の構成>
(1) value要素(javax.xml.bind.annotation.XmlMimeType)

(1) value要素(javax.xml.bind.annotation.XmlMimeType)

value要素は,javax.xml.bind.annotation.XmlMimeTypeアノテーションをアノテートしたJava型に関連づけるMIMEタイプのテキスト表現を指定します。

指定するMIMEタイプは,アノテーションをアノテートしたJava型に対して適切なMIMEタイプでなければなりません。指定するMIMEタイプが適切ではない場合や複数のMIMEタイプをコンマ区切りで記述した場合,動作は保証されません。また,指定するMIMEタイプには,"text/xml"および"application/xml"のcharsetパラメタを除いて,パラメタを記述しないでください。"text/xml"および"application/xml"のcharsetパラメタ以外のパラメタを記述した場合,動作は保証されません。

Java型に指定できるMIMEタイプを次の表に示します。

表16-18 Java型に指定できるMIMEタイプ

項番Java型value要素に指定できるMIMEタイプ
1java.awt.Image,java.awt.Imageの配列型,java.util.List<Image>,またはjavax.xml.ws.Holder<Image>image/png※1
2image/jpeg※1
3image/*※2
4javax.xml.transform.Sourceまたはjavax.xml.ws.Holder<Source>text/xml※3
5application/xml
6javax.activation.DataHandler,javax.activation.DataHandlerの配列型,java.util.List<DataHandler>,またはjavax.xml.ws.Holder<DataHandler>上記以外※4
注※1
表中にないimageタイプを送信する場合は,javax.activation.DataHandlerクラスを使用して送信してください。
注※2
MIMEタイプに"image/*"を指定した場合,送信するSOAPメッセージの添付ファイルパートにあるMIMEヘッダのContent-Typeフィールドの値は,java.awt.Image型を使用したときの初期値("image/png")です。
注※3
MIMEタイプに"text/xml"を指定した場合,送信するSOAPメッセージの添付ファイルパートにあるMIMEヘッダのContent-Typeフィールドの値は,javax.xml.transform.Source型を使用したときの初期値("application/xml")です。
注※4
MIMEタイプに"application/*"や未知のMIMEタイプを指定した場合,送信するSOAPメッセージの添付ファイルパートにあるMIMEヘッダのContent-Typeフィールドの値は,javax.activation.DataHandler型を使用したときの初期値(javax.activation.DataHandlerオブジェクトのMIMEタイプ)です。