スキーマジェネレータに関する注意事項を次の表に示します。
項番1~項番32,56,57,59の注意事項に該当するJavaソースは,スキーマジェネレータで処理しないでください。項番33~項番55,項番58,60,61については,注意事項に留意して使用してください。
表6-46 JAXBに関する注意事項(スキーマジェネレータ)
項番 | 注意事項 |
---|---|
1 | JAXBマッピングアノテーションは,JAXB仕様で指定範囲が制約されています。次の例のように,JAXB仕様の指定範囲外の個所にJAXBマッピングアノテーションを指定した場合,エラーにならないことがあるため注意してください。指定した場合のJAXB実行時の動作は規定されていません。 (例)
|
2 | [条件] 次の組み合わせのJAXBマッピングアノテーションのどれかを同時に指定する場合です。
エラーを出力します。スキーマは生成しません。 (例)
|
3 | [条件] transientフィールドに次のどれかを指定する場合です。
[Cosminexus XML Processorの動作] エラーが発生します。 (例) Transient field "child" cannot have any JAXB annotations. |
4 | [条件] staticフィールドに次のどれかを指定する場合です。
[Cosminexus XML Processorの動作] エラーは発生しません。 |
5 | [条件] @XmlElementsに@XmlElementを一つも指定しない場合です。 [Cosminexus XML Processorの動作] 不正なスキーマが出力されます。 |
6 | [条件] @XmlJavaTypeAdapterを一つも含まない@XmlJavaTypeAdaptersを指定する場合です。 [Cosminexus XML Processorの動作] @XmlJavaTypeAdaptersが指定されなかったかのようなスキーマを出力します。 |
7 | [条件] value要素が空の配列である@XmlSeeAlsoを指定する場合です。 [Cosminexus XML Processorの動作] @XmlSeeAlsoが指定されなかったかのようなスキーマを出力します。 |
8 | [条件] @XmlElementWrapper,@XmlAttribute,@XmlElement,@XmlRootElement,@XmlElementDeclのどれかのname要素に,空文字列を指定する場合です。 [Cosminexus XML Processorの動作]
|
9 | [条件] 次のすべての条件に該当する場合です。
@XmlElementのtype要素に関する制約は適用されません。このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。制約の詳細については,JSR 222 The Java Architecture for XML Binding 2.1の8.9.1.2およびJavadocを参照してください。 |
10 | [条件] 次のすべての条件に該当する場合です。
エラーは発生しません。しかし,このスキーマおよびjavaソースを使用してアンマーシャルを実行しても正しく処理されません。 [回避策] パラメタ化されたコレクション型のプロパティまたはJavaBeanフィールドに複数の要素定義を指定したい場合は,@XmlElementRefsおよび@XmlElementRefを使用しJAXBElementのコレクション型として処理してください。 |
11 | [条件] @XmlElementのdefaultValue要素に,@XmlElementを指定したフィールドまたはJavaBeanプロパティの型に対して不適切な値を指定する場合です。 [Cosminexus XML Processorの動作] default属性に不適切な値が指定された要素定義のスキーマ文書を生成し,エラーは発生しません。しかし,このスキーマを設定したUnmarshallerでアンマーシャルを実行すると,スキーマ不正のエラー(KECX06161-E)になります。生成されるスキーマは不正なものとなります。 |
12 | [条件] 次のすべての条件に該当する場合です。
不正なスキーマ文書(nillable属性のある要素参照)が出力されます。このスキーマを設定したUnmarshallerでアンマーシャルを実行すると,スキーマ不正エラー(KECX06231-E)となります。 |
13 | [条件] 次のすべての条件に該当する場合です。
IllegalArgumentException例外が発生します。 |
14 | [条件] 次のすべての条件に該当する場合です。
生成される属性定義のuse属性値は,常に"required"です。 |
15 | [条件] 次のすべての条件に該当する場合です。
エラーは発生しないで,@XmlListを反映したスキーマが生成されます。 |
16 | [条件] 次のすべての条件に該当する場合です。
無限再帰を示すエラーが発生します。 (例) エラー:Anonymous types form an infinite cycle: ClassInfo(mypackage.ItemType) -> ClassInfo(mypackage.ItemType) [回避策] 2.のフィールドまたはJavaBeanの名前を,要素クラス名と同じ(ただし,XML名→Java名の変換規則による変換後の名前)にしてください。 (例) @XmlRootElement @XmlType(name="") public class ItemType { public ItemType itemType;} |
17 | [条件] 次のすべての条件に該当する場合です。
生成されるxs:complexType要素には,abstract属性が付けられません。 |
18 | [条件] 列挙型に@XmlEnumを指定します。そのvalue要素に,単純型にマッピングされないクラス(例:java.lang.Object)を指定する場合です。 [Cosminexus XML Processorの動作] エラーは出力されません。このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。 |
19 | [条件] 列挙定数に@XmlEnumValueを指定します。そのvalue要素に,@XmlEnum.value()型に対して不当な字句表現を指定する場合です。 [Cosminexus XML Processorの動作] エラーは出力されません。このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。 |
20 | [条件] 次のすべての条件に該当する場合です。
不正なスキーマ文書(default属性のある要素参照)が出力されます。このスキーマを設定したUnmarshallerでアンマーシャルを実行すると,スキーマ不正エラー(KECX06231-E)となります。 |
21 | [条件] java.util.HashMap型のフィールドまたはJavaBeanプロパティに,@XmlElementまたは@XmlElementsを指定する場合です。 [Cosminexus XML Processorの動作] 不正なスキーマ文書(要素定義のmaxOccurs属性が"unbounded"ではなく"1"となるもの)が出力される。 [回避策] HashMap型のプロパティまたはフィールドに対し@XmlElementを指定する場合に限り,JSR 222 The Java Architecture for XML Binding 2.1の8.2.5が示すように@XmlJavaTypeAdapterを追加指定することで回避できます。 |
22 | [条件] 次のすべての条件に該当する場合です。
public class Root { // 条件2.と3.のフィールド名がchildTypeであれば,要素参照が生成される。 protected ChildType child; } // 条件1.のクラス @XmlRootElement @XmlType(name = "") public class ChildType { public String fname; } [Cosminexus XML Processorの動作] 要素定義(name属性)が生成されます。 |
23 | [条件] 次のすべての条件に該当する場合です。
public class Root { @XmlElement(defaultValue="default") // 条件4. protected ChildType childType; // 条件2.,3. } // 条件1.のクラス @XmlRootElement @XmlType(name = "") public class ChildType { public String fname; } [Cosminexus XML Processorの動作] default属性を持つ要素定義(name属性)が生成されます。 |
24 | [条件] JavaBeanプロパティが,setterメソッドまたはgetterメソッドの一方が存在しないような,不当なものである場合です。 [Cosminexus XML Processorの動作] setterメソッドおよびgetterメソッドの両方が存在する正しいJavaBeanであるかのように,スキーマが生成されます。エラーは発生しません。 このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。 |
25 | [条件] JAXBマッピングアノテーションの要素に,不当なスキーマ文書を生成するような指定が存在する場合です。 (例) @XmlRootElementpublic class ItemType { @XmlElement(name="A") public String item1; @XmlElement(name="A") public String item2; } @XmlElement(name="A")では,異なるフィールドに同一の要素名("A")を指定しています。 [Cosminexus XML Processorの動作] エラーチェックがされないで,不当なスキーマ文書が生成されることがあります。 |
26 | [条件] JAXBマッピングアノテーションのnamespace要素にXML Schema仕様固有の名前空間URIを表す文字列"http://www.w3.org/2001/XMLSchema"を指定する場合です。 [Cosminexus XML Processorの動作] この名前空間URIをtargetNamespace属性に持つスキーマ文書は生成されません。なお,この名前空間URIを指定する用途はなく,指定する意味はありません。 |
27 | [条件] @XmlElementsおよび@XmlMixedを同時に指定した場合です。 [Cosminexus XML Processorの動作] 次のエラーが出力されます。 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 |
28 | [条件] 次のすべての条件に該当する場合です。
エラーとなりスキーマは生成されません。 |
29 | [条件] type要素のない@XmlSchemaType注釈をパッケージに指定する場合です。 [Cosminexus XML Processorの動作] エラーは出力されません。このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。 |
30 | [条件] クラス中に複数の@XmlIDで注釈している場合です。 [Cosminexus XML Processorの動作] エラーにはならないで,スキーマが生成されます。 |
31 | [条件] 次のどれかの条件に該当する場合です。
エラーにはならないで,スキーマが生成されます。 |
32 | [条件] 「あるクラスとそのスーパークラスで,@XmlAnyElementで注釈されたJavaBeanプロパティは一つだけである」という制限使用制約に反した,次のような記述をする場合です。
エラーは出力されません。このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。 |
33 | [条件] @XmlAttachmentRefを,フィールドまたはJavaBeanプロパティに付ける場合です。 [Cosminexus XML Processorの動作] 生成される要素定義のminOccurs属性値は0になります。 |
34 | [条件] 次のjava型をスキーマ文書にマッピングする場合です。 char, Boolean, Character, Byte, Short, Integer, Long, Float, Double, byte[] [Cosminexus XML Processorの動作] それぞれ,xs:unsignedShort,xs:boolean,xs:unsignedShort,xs:byte,xs:short,xs:int,xs:long,xs:float,xs:double,xs:base64Binary型にマッピングされます。 |
35 | [条件] package文にtype要素を持たない@XmlJavaTypeAdapterを指定する場合です。 [Cosminexus XML Processorの動作] エラーは発生しないで,@XmlJavaTypeAdapter指定が有効なスキーマが生成されます。 |
36 | [条件] static finalフィールド,またはpublic staticフィールドに@XmlAttributeを付ける場合です。 [Cosminexus XML Processorの動作] 生成されるxs:attribute要素に,fixed属性は付けられません。 |
37 | [条件] required要素の値がfalseである@XmlElementを,プリミティブ型複数次元配列のフィールドまたはJavaBeanプロパティに指定する場合です。 [Cosminexus XML Processorの動作] minOccurs属性の値は0になります。 |
38 | [条件] @XmlList,@XmlJavaTypeAdapter,@XmlAttachmentRef,@XmlMimeTypeのどれかを,メソッドのパラメタに付ける場合です。 [Cosminexus XML Processorの動作] これらのJAXBマッピングアノテーションの指定は無視されます。 |
39 | [条件] パッケージにlocation要素を持たない@XmlSchemaを指定する場合です。 [Cosminexus XML Processorの動作] location要素のデフォルト値は"##generate"と解釈されます。 |
40 | [条件] @XmlTypeを列挙型に付ける場合です。 [Cosminexus XML Processorの動作] 生成されるxs:simpleTypeに,final属性は付けられません。 |
41 | [条件] 次のすべての条件に該当する場合です。
条件1.と条件2.の名前空間宣言が別々に生成されます。生成されたスキーマを使用しても問題はありません。 |
42 | csmschemagenコマンド実行時,およびJAXB API呼び出し時には,aptツールおよびjavacツールが実行されます。このため,エラー発生時にはエラー個所を示す情報に加えて,これらのツールのスタックトレースが出力されることがあります。 (例) ItemType.java:8: シンボルを見つけられません。 シンボル: クラス dummy@XmlEnum(dummy.class) 注釈の処理中に問題が検出されました。 詳細については,下記のスタックトレースを参照してください。 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at com.cosminexus.jaxb.tools.jxc.apt.InlineAnnotationReaderImpl.getClassValue(InlineAnnotationReaderImpl.java:150) at com.cosminexus.jaxb.tools.jxc.apt.InlineAnnotationReaderImpl.getClassValue(InlineAnnotationReaderImpl.java:64) at com.cosminexus.jaxb.xml.bind.v2.model.impl.EnumLeafInfoImpl.<init>(EnumLeafInfoImpl.java:110) at com.cosminexus.jaxb.xml.bind.v2.model.impl.ModelBuilder.createEnumLeafInfo(ModelBuilder.java:335) at com.cosminexus.jaxb.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:224) at com.cosminexus.jaxb.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:209) at com.cosminexus.jaxb.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:315) at com.cosminexus.jaxb.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:330) at com.cosminexus.jaxb.tools.xjc.api.impl.j2s.JavaCompilerImpl.bind(JavaCompilerImpl.java:90) at com.cosminexus.jaxb.tools.jxc.apt.SchemaGenerator$1.process(SchemaGenerator.java:115) at com.sun.mirror.apt.AnnotationProcessors$CompositeAnnotationProcessor.process(AnnotationProcessors.java:60) at com.sun.tools.apt.comp.Apt.main(Apt.java:454) (略) ... 27 moreItemType.java:8: シンボルを見つけられません。 シンボル: クラス dummy @XmlEnum(dummy.class) ^エラー 1 個 |
43 | [条件] 連続する大文字で始まるクラス名または列挙型名が存在する場合です。 [Cosminexus XML Processorの動作] クラス名または列挙型名の先頭の連続する大文字を小文字に変換したものが,XML名にマッピングされます。 |
44 | [条件] @XmlElementWrapperのnillable要素にtrueを指定する場合です。 [Cosminexus XML Processorの動作] 生成するスキーマの要素定義にはminOccurs="0"が指定されます。 |
45 | [条件] 次のどれかの条件に該当する場合です。
xs:element要素にfinal属性とblock属性は付けられません。また,xs:schema要素にfinalDefault属性とblock属性は付けられません。 |
46 | [条件] @XmlValueをフィールドまたはJavaBeanプロパティに付ける場合です。 [Cosminexus XML Processorの動作] 生成されるxs:simpleType要素またはxs:complexType要素に,final属性は付けられません。 |
47 | [条件] 絶対パスが"#"を含むディレクトリでcsmschemagenコマンドを実行する場合です。 (例) cd C:¥jaxb¥abc#xyz¥test csmschemagen mypackage¥TEST.java [Cosminexus XML Processorの動作] 生成されるスキーマ文書のxs:import要素のschemaLocation属性の値が不正になります。 [回避策] 絶対パスが"#"を含まないディレクトリでcsmschemagenコマンドを実行してください。 |
48 | [条件] csmschemagenコマンドの-dオプションの引数に,カレントディレクトリ以外のディレクトリを指定した場合です。 [Cosminexus XML Processorの動作] コマンドが出力する情報メッセージに,スキーマ文書の出力先のパスではなく,カレントディレクトリのパスが表示されます。 (例) csmschemagen -d D:¥schema mypackage¥TEST.java 注:Writing D:¥JAXB¥work¥schema1.xsd |
49 | [条件] csmschemagenコマンドの-dオプションの引数に出力先ディレクトリを指定しない場合です。 (例) csmschemagen -d mypackage¥TEST.java [Cosminexus XML Processorの動作] スキーマは出力されません。また,このときエラーが出力されないことがあります。 |
50 | [条件] プロパティやフィールドで,@XmlSchemaTypeのnameおよび@XmlElementのtypeに,異なる型にマッピングする値を指定する場合です。 [Cosminexus XML Processorの動作] @XmlSchemaTypeのnameに指定されたデータ型の,要素定義のスキーマ文書が生成されます。 |
51 | [条件] 次のすべての条件に該当する場合です。
指定された@XmlIDまたは@XmlIDREFは,生成される大域要素定義に反映されません。 |
52 | [条件] @XmlElementDeclのsubstitutionHeadName要素に,""以外を指定する場合です。 [Cosminexus XML Processorの動作] xs:element要素のsubstitutionGroup属性が出力されません。 |
53 | [条件] @XmlElementDeclのdefaultValue要素に,"¥u0000"以外を指定する場合です。 [Cosminexus XML Processorの動作] xs:element要素のdefault属性が出力されません。 |
54 | [条件] 次のすべての条件に該当する場合です。
[Cosminexus XML Processorの動作] 属性がアルファベット順にソートされたスキーマが生成されます。 |
55 | [条件] トップレベルでない内部クラスに,@XmlAccessorType,および@XmlAccessorOrderを指定する場合です。 [Cosminexus XML Processorの動作] エラーにはならないで,指定の注釈が有効となります。 |
56 | [条件] 次のすべての条件に該当する場合です。
[Cosminexus XML Processorの動作] java.lang.StringIndexOutOfBoundsException例外など,予期しない例外が発生することがあります。 |
57 | [条件] システムのエンコーディングと異なるエンコーディングのJavaソースを指定した場合です。 [Cosminexus XML Processorの動作] エラーが発生したり,不正なスキーマが生成されたりします。 |
58 | [条件] 次のすべての条件に該当する場合です。
[Cosminexus XML Processorの動作] minOccurs属性の値は,0になります。 |
59 | [条件] 次のどちらかに該当する場合です。
[Cosminexus XML Processorの動作] 不正にエラーが何度も出力されたり,引数に指定していないpackage-info.javaのエラーが出力されたりすることがあります。 |
60 | [条件] 次のすべての条件に該当する場合です。
[Cosminexus XML Processorの動作] エラーが出力されず,スキーマも生成されません。 |
61 | [条件] 次のすべての条件に該当する場合です。
[Cosminexus XML Processorの動作] csmschemagenコマンドが異常終了することがあります。 [回避策] -encodingオプションでJavaソースのエンコーディングを指定してください。 |