16.1.7 Javaのラッパ例外クラスからフォルトへのマッピング
Javaのラッパ例外クラスからWSDLのフォルト(wsdl:fault要素,一つのwsdl:part子要素を持つwsdl:message要素,およびXML Schemaのグローバル要素宣言)へのマッピングについて説明します。
(1) マッピング
Javaのラッパ例外クラスとフォルトは,JAX-WS 2.2仕様に従ってマッピングされます。マッピング例を次の図に示します。
ラッパ例外クラスからフォルトへのマッピング規則を次に示します。
-
ラッパ例外クラスがjavax.xml.ws.WebFaultアノテーションを持つ場合で,かつフォルトbeanを返すgetFaultInfoメソッドを持つ場合,すでにフォルトbeanがあるため,コマンド実行時にフォルトbeanは生成されません。
-
ラッパ例外クラスがjavax.xml.ws.WebFaultアノテーションもgetFaultInfoメソッドも持たない場合,ラッパ例外クラスの名前の接尾辞に"Bean"を付加した名前のフォルトbeanが生成されます。
-
生成されるフォルトbeanは,ラッパ例外クラスとその親クラスが持つ,Throwableから継承されるgetMessageというgetterと同じ型/名称のプロパティを持ちます。
-
生成したフォルトbeanには,javax.xml.bind.annotation.XmlTypeアノテーションがアノテートされます。
アノテートされたjavax.xml.bind.annotation.XmlTypeアノテーションには,name要素に例外クラス名が,namespace要素にSEIの名前空間が,propOrder要素にラッパ例外クラスが持つすべてのプロパティ名が設定されます。propOrder要素のプロパティ名は,各文字のUnicode値に従って昇順にソートされたString型配列で設定されます。
javax.xml.bind.annotation.XmlTypeアノテーションについては,「16.2.12 javax.xml.bind.annotation.XmlTypeアノテーション」を参照してください。
-
フォルトメッセージ名には,ラッパ例外クラス名と同じ値でマッピングされます。また,フォルトメッセージのパート名には,faultという固定値でマッピングされます。
-
一つのメソッドでスローする例外は,255個まで定義できます。
-
メソッドがスローする例外クラスが見つからない場合は,コンパイルエラーが発生します。
(2) ラッパ例外クラスの条件
ラッパ例外クラスの条件を示します。
-
ラッパ例外クラスは,java.lang.Exception,java.lang.RuntimeException,java.rmi.RemoteExceptionの例外クラスを継承してもかまいません。ただし,java.lang.RuntimeExceptionとjava.rmi.RemoteException,およびそのサブクラスはラッパ例外クラスとして扱われません。
-
同じSEI内の複数のメソッドで,同じラッパ例外クラスをスローしてもかまいません。
(3) ラッパ例外クラス名の条件
ラッパ例外クラス名には,次の表に示すすべての条件を満たす文字列を記述できます。ラッパ例外クラス名は,アノテーションを指定してもWSDL内で使用されるため,次の表の条件に従う必要があります。
(4) 名前衝突時の動作
フォルトbeanの名前は,パッケージ内でユニークにする必要があります。ただし,大文字/小文字の違いは無視されます。
フォルトbeanからマッピングするグローバル要素(ローカル名および名前空間)は,WSDL内でユニークにする必要があります。ユニークでない場合の動作は保証されません。