JAXBの動作の差異を,状況別に次の表に示します。
表A-7 JAXBの動作の差異(csmxjcコマンド)
項番 | 条件 | XML Processorの動作 | |
---|---|---|---|
バージョン08-50の場合 | バージョン08-70以降の場合 | ||
1 | enumerationファセットが存在しないXMLスキーマ文書の単純型にtypesafeEnumClassカスタムバインディングが存在する場合 | csmxjcコマンドが正常終了します。 | typesafeEnumClassカスタムバインディングの指定が不正であることを示すエラーが発生します。 |
2 | 次のどちらかの場合に該当するとき
| 要素クラスの参照プロパティは,要素のデータ型(@XmlElementまたは@XmlElements)で注釈されます。 なお,その要素に対応するソースにデフォルトコンストラクタは出力されません。 | 要素クラスの参照プロパティは,要素のクラス型(@XmlElementRefまたは@XmlElementRefs)で注釈されます。 デフォルトコンストラクタが出力されます。 |
3 | group要素中のelement要素にclassカスタムバインディングを指定して,そのgroup要素がほかの複数の型から参照されている場合 | group要素中のelement要素のうち,classカスタムバインディング指定されていない要素のオブジェクトを作成するファクトリメソッドは,生成されません。 | group要素中のelement要素のうち,classカスタムバインディング指定されていない要素のオブジェクトを作成するファクトリメソッドが,生成されます。 |
4 | globalBindingsまたはpropertyカスタムバインディングにcollectionType="indexed"の指定がある場合 | csmxjcコマンドで生成したソースのelement要素に対する型は,java.util.Listです。 | csmxjcコマンドで生成したソースのelement要素に対する型は,配列です。 |
5 | 型定義や匿名型要素定義にfactoryMethodカスタムバインディングの指定がある状態でcsmxjcコマンドを実行した場合 | エラーになります。 | 正常終了します。 |
6 | csmxjcコマンドで生成したソースに@XmlElementRef注釈型※が含まれる場合 | required要素は出力されません。 | required要素が出力されます。 |
7 | @XmlAttribute注釈型のname要素が生成するフィールド名と同じ場合 | name要素は出力されません。 | name要素が出力されます。 |
表A-8 JAXBの動作の差異(csmschemagenコマンド)
項番 | 条件 | XML Processorの動作 | |
---|---|---|---|
バージョン08-50の場合 | バージョン08-70以降の場合 | ||
1 | Javaソースに@XmlAccessorOrderまたは@XmlAccessorOrder(XmlAccessOrder.UNDEFINED)を指定した場合 | csmschemagenコマンドで作成したXMLスキーマ文書がsequence要素になります。 | csmschemagenコマンドで作成したXMLスキーマ文書がall要素になります。 |
2 | Javaソースに@XmlElementDeclを指定した場合 | csmschemagenコマンドで生成したXMLスキーマ文書の大域定義のelement要素に,nillable="true"属性が出力されます。 | csmschemagenコマンドで生成したXMLスキーマ文書の大域定義のelement要素に,nillable="true"属性は出力されません。 |
表A-9 JAXBの動作の差異(実行時)
項番 | 条件 | XML Processorの動作 | |
---|---|---|---|
バージョン08-50の場合 | バージョン08-70以降の場合 | ||
1 | @XmlAttribute注釈型または@XmlValue注釈型で注釈されたjava.lang.Object型の変数が存在するクラス,またはそのクラスが存在するパッケージ名を,JAXBContextクラスのnewInstanceメソッドに指定した場合 | IllegalAnnotationsExceptionがスローされます。 | NullPointerExceptionがスローされます。 |
2 | JAXBContextクラスのnewInstanceメソッドに指定したパッケージにpackage-infoクラスが存在し,XmlNs注釈型で名前空間が指定されている場合 | marshalで出力されるXML文書に名前空間宣言が出力されません。 | marshalで出力されるXML文書に名前空間宣言が出力されます。 |
3 | @XmlMixed注釈型で注釈されたJavaBeanプロパティに空白類だけのテキストが含まれるXML文書をアンマーシャルした場合 | アンマーシャルで生成されたオブジェクトにテキストオブジェクトが生成されません。 | 空白類だけのテキストオブジェクトが生成されます。 |
4 | スキーマ検証やイベントハンドラで,エラーチェックをしないUnmarshallerで数値のプリミティブ型のJavaBeanプロパティに,文字列をアンマーシャルした場合 | IllegalAccessErrorとなります。 | アンマーシャルが正常終了します。 |
5 | JAXBにマッピングされたクラスにbeforeUnmarshalメソッドまたはafterUnmarshalメソッドを実装して,アンマーシャル実行時にそのメソッドで例外がスローされた場合 | アンマーシャル処理は中断しません。 | UnmarshalExceptionがスローされて,アンマーシャル処理が中断します。 |
6 | JAXBContextクラスのnewInstance(Class[], Map<String, ?>)メソッドおよびnewInstance(Class[])メソッドの第1パラメタにnullを指定した場合 | NullPointerExceptionがスローされます。 | IllegalArgumentExceptionがスローされます。 |
7 | DatatypeConverterクラスのparseBooleanメソッドに"0","1","false","true"以外を指定した場合 | falseが返ります。 | IllegalArgumentExceptionがスローされます。 |
8 | DatatypeConverterクラスのparseDecimalメソッドに空白だけを指定した場合 | java.lang.NumberFormatExceptionがスローされます。 | 例外はスローされません。 |
9 | enumクラスにアンマーシャルする値に改行や空白が含まれる場合 | 処理結果が不正になります。 | 値が正しくアンマーシャルされます。 |