16.1.7 Javaのラッパ例外クラスからフォルトへのマッピング
(1) マッピング
Javaのラッパ例外クラスとフォルトは,JAX-WS 2.2仕様に従ってマッピングされます。マッピング例を次の図に示します。
図16-8 例外クラスとフォルトのマッピング例
![[図データ]](figure/zu120800.gif)
ラッパ例外クラスからフォルトへのマッピング規則を次に示します。
- ラッパ例外クラスが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個まで定義できます。256個以上定義した場合は,標準エラー出力とログに警告メッセージが出力され,処理が続行されます(KDJW61027-W)。
- メソッドがスローする例外クラスが見つからない場合は,コンパイルエラーが発生します。
(2) ラッパ例外クラスの条件
ラッパ例外クラスの条件を示します。
- ラッパ例外クラスは,java.lang.Exception,java.lang.RuntimeException,java.rmi.RemoteExceptionの例外クラスを継承してもかまいません。ただし,java.lang.RuntimeExceptionとjava.rmi.RemoteException,およびそのサブクラスはラッパ例外クラスとして扱われません。
- 同じSEI内の複数のメソッドで,同じラッパ例外クラスをスローしてもかまいません。
(3) ラッパ例外クラス名の条件
ラッパ例外クラス名には,次の表に示すすべての条件を満たす文字列を記述できます。ラッパ例外クラス名は,アノテーションを指定してもWSDL内で使用されるため,次の表の条件に従う必要があります。
表16-8 ラッパ例外クラス名に記述できる文字列の条件
項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作 |
---|
1 | 半角英数字(0~9,A~Z,a~z),およびアンダースコア(_)だけを使用した文字列 | 鈴木_exception | 動作は保証されません(エラーメッセージは出力されません)。 |
2 | Java言語仕様で定められているJava識別子の命名規則に従った文字列 | abstract | cjaptコマンド実行時にコンパイルエラーとなり,終了します。 |
(4) 名前衝突時の動作
フォルトbeanの名前は,パッケージ内でユニークにする必要があります。ただし,大文字/小文字の違いは無視されます。フォルトbeanが,パッケージ内で同時に生成されるJavaBeanと名前衝突した場合,標準エラー出力とログにエラーメッセージが出力されます(KDJW61065-E)。
すでに存在するクラスと名前が重複していた場合,上書きされます。ただし,そのクラスがcjaptコマンドの引数に含まれている場合は,cjaptコマンドでエラーチェックされます。
フォルトbeanからマッピングするグローバル要素(ローカル名および名前空間)は,WSDL内でユニークにする必要があります。ユニークでない場合の動作は保証されません。