6.20.3 スキーマジェネレータに関する注意事項

スキーマジェネレータに関する注意事項を次の表に示します。

項番1~項番32,56,57,59の注意事項に該当するJavaソースは,スキーマジェネレータで処理しないでください。項番33~項番55,項番58,60,61については,注意事項に留意して使用してください。

表6-45 JAXBに関する注意事項(スキーマジェネレータ)

項番注意事項
1JAXBマッピングアノテーションは,JAXB仕様で指定範囲が制約されています。次の例のように,JAXB仕様の指定範囲外の個所にJAXBマッピングアノテーションを指定した場合,エラーにならないことがあるため注意してください。指定した場合のJAXB実行時の動作は規定されていません。
(例)
  • パッケージに指定できないJAXBマッピングアノテーションをパッケージに指定した。
  • トップレベルでないクラスに@XmlRootElement,および@XmlTypeを指定した。
  • フィールドに@XmlEnumValueを指定した。
  • 列挙型に@XmlRegistryを指定した。
  • 同時に指定できると記載されていないJAXBマッピングアノテーションを同時に指定した。
2[条件]
次の組み合わせのJAXBマッピングアノテーションのどれかを同時に指定する場合です。
  • @XmlAttributeと@XmlValue
  • @XmlAttributeと@XmlMimeType
  • @XmlElementと@XmlValue
[XML Processorの動作]
エラーを出力します。スキーマは生成しません。
(例)
@XmlAttributeと@XmlValueの場合
mypackage.ChildType#name has mutually exclusive annotations @javax.xml.bind.annotation.XmlAttribute and @javax.xml.bind.annotation.XmlValue
@XmlAttributeと@XmlMimeTypeの場合
javax.xml.bind.annotation.XmlMimeType annotation cannot be placed here
3[条件]
transientフィールドに次のどれかを指定する場合です。
  • @XmlAttribute
  • @XmlElement
  • @XmlElements
  • @XmlElementWrapper
  • @XmlList
  • @XmlMimeType
  • @XmlValue
  • @XmlAnyElement
 
[XML Processorの動作]
エラーが発生します。
(例)
Transient field "child" cannot have any JAXB annotations.
4[条件]
staticフィールドに次のどれかを指定する場合です。
  • @XmlElement
  • @XmlElements
  • @XmlElementWrapper
  • @XmlList
  • @XmlMimeType
  • @XmlValue
  • @XmlAnyElement
  • @XmlID
  • @XmlIDREF
 
[XML Processorの動作]
エラーは発生しません。
5[条件]
@XmlElementsに@XmlElementを一つも指定しない場合です。
 
[XML Processorの動作]
不正なスキーマが出力されます。
6[条件]
@XmlJavaTypeAdapterを一つも含まない@XmlJavaTypeAdaptersを指定する場合です。
 
[XML Processorの動作]
@XmlJavaTypeAdaptersが指定されなかったかのようなスキーマを出力します。
7[条件]
value要素が空の配列である@XmlSeeAlsoを指定する場合です。
 
[XML Processorの動作]
@XmlSeeAlsoが指定されなかったかのようなスキーマを出力します。
8[条件]
@XmlElementWrapper,@XmlAttribute,@XmlElement,@XmlRootElement,@XmlElementDeclのどれかのname要素に,空文字列を指定する場合です。
 
[XML Processorの動作]
  • @XmlElementWrapper,または@XmlElementの場合,name要素が指定されていないときと同様に,フィールド名やプロパティ名から要素名を生成します。
  • @XmlAttributeの場合,<xs:attribute name="" .../>という不正な属性定義を生成します。
  • @XmlRootElement,または@XmlElementDeclの場合,<xs:element name="" .../>という不正な要素定義を生成します。
9[条件]
次のすべての条件に該当する場合です。
  1. パラメタ化されたコレクション型のフィールドまたはJavaBeanプロパティに@XmlElementを付ける。または,配列型かパラメタ化されたリスト型のJavaBeanプロパティに@XmlElementsを付ける。
  2. 1.の@XmlElementのtype要素を明示的に指定する。
[XML Processorの動作]
@XmlElementのtype要素に関する制約は適用されません。このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。制約の詳細については,JSR 222 The Java Architecture for XML Binding 2.1の8.9.1.2およびJavadocを参照してください。
10[条件]
次のすべての条件に該当する場合です。
  1. パラメタ化されたコレクション型のフィールドまたはJavaBeanプロパティに@XmlElementsを指定する。
  2. 1.の@XmlElementsの要素に,複数の@XmlElementを指定する。
[XML Processorの動作]
エラーは発生しません。しかし,このスキーマおよびjavaソースを使用してアンマーシャルを実行しても正しく処理されません。
 
[回避策]
パラメタ化されたコレクション型のプロパティまたはJavaBeanフィールドに複数の要素定義を指定したい場合は,@XmlElementRefsおよび@XmlElementRefを使用しJAXBElementのコレクション型として処理してください。
11[条件]
@XmlElementのdefaultValue要素に,@XmlElementを指定したフィールドまたはJavaBeanプロパティの型に対して不適切な値を指定する場合です。
 
[XML Processorの動作]
default属性に不適切な値が指定された要素定義のスキーマ文書を生成し,エラーは発生しません。しかし,このスキーマを設定したUnmarshallerでアンマーシャルを実行すると,スキーマ不正のエラー(KECX06161-E)になります。生成されるスキーマは不正なものとなります。
12[条件]
次のすべての条件に該当する場合です。
  1. @XmlSchemaのnamespace要素に空文字列以外の値を指定する。
  2. @XmlSchemaのxmlns要素に@XmlNsを指定する。
  3. 2.に指定した@XmlNsのprefix要素の値が"tns"かつnamespace要素の値が1.の値と異なる。
[XML Processorの動作]
エラーが出力されずスキーマは生成できません。
13[条件]
次のすべての条件に該当する場合です。
  1. プリミティブ型のフィールドまたはJavaBeanプロパティに対して,@XmlAttributeを付ける。
  2. 1.で指定した@XmlAttributeにrequired要素を指定しないか,"false"を指定する。
[XML Processorの動作]
生成される属性定義のuse属性値は,常に"required"です。
14[条件]
次のすべての条件に該当する場合です。
  1. 単純型リストにマップされるクラスが存在する。
  2. 1.のクラスを型パラメタとして持つListインスタンスに,@XmlListを指定する。
[XML Processorの動作]
エラーは発生しないで,@XmlListを反映したスキーマが生成されます。
15[条件]
次のすべての条件に該当する場合です。
  1. @XmlRootElement,およびname要素が空文字列の@XmlTypeをクラスに付ける。
  2. 1.のクラスのフィールドまたはJavaBeanプロパティの型が,1.のクラス自身である。
[XML Processorの動作]
エラーが出力されずスキーマは生成できません。
 
[回避策]
2.のフィールドまたはJavaBeanの名前を,要素クラス名と同じ(ただし,XML名→Java名の変換規則による変換後の名前)にしてください。
(例)
@XmlRootElement
@XmlType(name="")
public class ItemType { public ItemType itemType;}
16[条件]
次のすべての条件に該当する場合です。
  1. 複合型にマッピングされるクラスにabstract修飾子を指定する。
  2. 1.のクラスのフィールドまたはJavaBeanプロパティに,@XmlValueを付ける。
  3. 1.のクラスのフィールドまたはJavaBeanプロパティに,@XmlAttributeを付ける。
[XML Processorの動作]
生成されるxs:complexType要素には,abstract属性が付けられません。
17[条件]
列挙型に@XmlEnumを指定します。そのvalue要素に,単純型にマッピングされないクラス(例:java.lang.Object)を指定する場合です。
 
[XML Processorの動作]
エラーは出力されません。このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。
18[条件]
列挙定数に@XmlEnumValueを指定します。そのvalue要素に,@XmlEnum.value()型に対して不当な字句表現を指定する場合です。
 
[XML Processorの動作]
エラーは出力されません。このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。
19[条件]
次のすべての条件に該当する場合です。
  1. @XmlRootElement,およびname要素が空文字列の@XmlTypeをクラスに付ける。
  2. フィールドまたはJavaBeanプロパティの型が1.のクラスであるようなクラスが存在する。
  3. 2.のフィールドまたはJavaBeanプロパティがマッピングする要素名と,1.がマッピングする要素名が異なる。
(例)
public class Root {  
  // 条件2.と3.のフィールド名がchildTypeであれば,要素参照が生成される。
  protected ChildType child;
}
 
// 条件1.のクラス
@XmlRootElement
@XmlType(name = "")
public class ChildType {
  public String fname;
}
 
[XML Processorの動作]
要素定義(name属性)が生成されます。
20[条件]
次のすべての条件に該当する場合です。
  1. @XmlRootElement,およびname要素が空文字列の@XmlTypeをクラスに付ける。
  2. フィールドまたはJavaBeanプロパティの型が1.のクラスであるようなクラスが存在する。
  3. 2.のフィールドまたはJavaBeanプロパティがマッピングする要素名と1.がマッピングする要素名が,一致する。
  4. 2.のフィールドまたはJavaBeanプロパティに指定した@XmlElementのdefaultvalue要素に,"¥u0000"以外を指定する。
(例)
public class Root {
  @XmlElement(defaultValue="default") // 条件4.
   protected ChildType childType; // 条件2.,3.
 }
 
// 条件1.のクラス
@XmlRootElement
@XmlType(name = "")
public class ChildType {
  public String fname;
}
 
[XML Processorの動作]
default属性を持つ要素定義(name属性)が生成されます。
21[条件]
JavaBeanプロパティが,setterメソッドまたはgetterメソッドの一方が存在しないような,不当なものである場合です。
 
[XML Processorの動作]
setterメソッドおよびgetterメソッドの両方が存在する正しいJavaBeanであるかのように,スキーマが生成されます。エラーは発生しません。
このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。
22[条件]
JAXBマッピングアノテーションの要素に,不当なスキーマ文書を生成するような指定が存在する場合です。
(例)
  @XmlRootElementpublic
  class ItemType {
    @XmlElement(name="A")
    public String item1;   
    @XmlElement(name="A")
    public String item2;
  }
 
 @XmlElement(name="A")では,異なるフィールドに同一の要素名("A")を指定しています。
 
[XML Processorの動作]
エラーチェックがされないで,不当なスキーマ文書が生成されることがあります。
23[条件]
JAXBマッピングアノテーションのnamespace要素にXML Schema仕様固有の名前空間URIを表す文字列"http://www.w3.org/2001/XMLSchema"を指定する場合です。
 
[XML Processorの動作]
この名前空間URIをtargetNamespace属性に持つスキーマ文書は生成されません。なお,この名前空間URIを指定する用途はなく,指定する意味はありません。
24[条件]
@XmlElementsおよび@XmlMixedを同時に指定した場合です。
 
[XML Processorの動作]
エラーが出力されずスキーマは生成できません。
25[条件]
次のすべての条件に該当する場合です。
  • @XmlElementRefを指定したフィールドやプロパティのデータ型がJAXBElementである。
  • @XmlElementRef.name()と@XmlElementRef.namespace()が,@XmlRegistryで注釈されたクラス内の@XmlElementDecl注釈を伴う要素ファクトリメソッドである,次のJAXBマッピングアノテーションとそれぞれ同じである。
    ・@XmlElementDecl.name()
    ・@XmlElementDecl.namespace()
  • @XmlElementRef.namespace()に"##default"を指定する。
[XML Processorの動作]
エラーが出力されずスキーマは生成できません。
26[条件]
type要素のない@XmlSchemaType注釈をパッケージに指定する場合です。
 
[XML Processorの動作]
エラーは出力されません。このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。
27[条件]
クラス中に複数の@XmlIDで注釈している場合です。
 
[XML Processorの動作]
エラーにはならないで,スキーマが生成されます。
28[条件]
次のどれかの条件に該当する場合です。
  • java.lang.Object型のコレクション型のプロパティに,@XmlID注釈の付いたプロパティが含まれない。
  • java.lang.Object型のプロパティに,@XmlID注釈の付いたプロパティが含まれない。
  • java.lang.Object型のコレクション型のプロパティに,@XmlID注釈の付いたフィールドが含まれない。
  • java.lang.Object型のプロパティに,@XmlID注釈の付いたフィールドが含まれない。
[XML Processorの動作]
エラーにはならないで,スキーマが生成されます。
29[条件]
「あるクラスとそのスーパークラスで,@XmlAnyElementで注釈されたJavaBeanプロパティは1つだけである」という制限使用制約に反した,次のような記述をする場合です。
  • クラスに@XmlAnyElementを指定したフィールドやプロパティが複数存在する。
  • あるクラスとそのスーパークラスで,それぞれ@XmlAnyElementを指定したフィールドやプロパティが存在する。
[XML Processorの動作]
エラーは出力されません。このようなJavaソースを用いた場合のJAXB実行時の動作は規定されていません。
30[条件]
@XmlAttachmentRefを,フィールドまたはJavaBeanプロパティに付ける場合です。
 
[XML Processorの動作]
生成される要素定義のminOccurs属性値は0になります。
31[条件]
次のjava型をスキーマ文書にマッピングする場合です。
char, Boolean, Character, Byte, Short, Integer, Long, Float, Double, byte[]
 
[XML Processorの動作]
それぞれ,xs:unsignedShort,xs:boolean,xs:unsignedShort,xs:byte,xs:short,xs:int,xs:long,xs:float,xs:double,xs:base64Binary型にマッピングされます。
32[条件]
package文にtype要素を持たない@XmlJavaTypeAdapterを指定する場合です。
 
[XML Processorの動作]
エラーは発生しないで,@XmlJavaTypeAdapter指定が有効なスキーマが生成されます。
33[条件]
static finalフィールド,またはpublic staticフィールドに@XmlAttributeを付ける場合です。
 
[XML Processorの動作]
生成されるxs:attribute要素に,fixed属性は付けられません。
34[条件]
required要素の値がfalseである@XmlElementを,プリミティブ型複数次元配列のフィールドまたはJavaBeanプロパティに指定する場合です。
 
[XML Processorの動作]
minOccurs属性の値は0になります。
35[条件]
@XmlList,@XmlJavaTypeAdapter,@XmlAttachmentRef,@XmlMimeTypeのどれかを,メソッドのパラメタに付ける場合です。
 
[XML Processorの動作]
これらのJAXBマッピングアノテーションの指定は無視されます。
36[条件]
パッケージにlocation要素を持たない@XmlSchemaを指定する場合です。
 
[XML Processorの動作]
location要素のデフォルト値は"##generate"と解釈されます。
37[条件]
@XmlTypeを列挙型に付ける場合です。
 
[XML Processorの動作]
生成されるxs:simpleTypeに,final属性は付けられません。
38[条件]
次のすべての条件に該当する場合です。
  1. @XmlSchemaのnamespace要素に名前空間URIを指定する。
  2. @XmlSchemaのxmlns要素に@XmlNsを指定し,そのnamespaceURI要素に名前空間URIを指定する。
  3. 1.2.の名前空間URIが同じ文字列である。
[XML Processorの動作]
条件1.と条件2.の名前空間宣言が別々に生成されます。生成されたスキーマを使用しても問題はありません。
39[条件]
連続する大文字で始まるクラス名または列挙型名が存在する場合です。
 
[XML Processorの動作]
クラス名または列挙型名の先頭の連続する大文字を小文字に変換したものが,XML名にマッピングされます。
40[条件]
@XmlElementWrapperのnillable要素にtrueを指定する場合です。
 
[XML Processorの動作]
生成するスキーマの要素定義にはminOccurs="0"が指定されます。
41[条件]
次のどれかの条件に該当する場合です。
  • @XmlElementをフィールドまたはJavaBeanプロパティに付ける。
  • @XmlElementWrapperをフィールドまたはJavaBeanプロパティに付ける。
  • @XmlRootElementをクラスまたは列挙型に付ける。
[XML Processorの動作]
xs:element要素にfinal属性とblock属性は付けられません。また,xs:schema要素にfinalDefault属性とblock属性は付けられません。
42[条件]
@XmlValueをフィールドまたはJavaBeanプロパティに付ける場合です。
 
[XML Processorの動作]
生成されるxs:simpleType要素またはxs:complexType要素に,final属性は付けられません。
43[条件]
絶対パスが"#"を含むディレクトリでcsmschemagenコマンドを実行する場合です。
(例)
   cd C:¥jaxb¥abc#xyz¥test
   csmschemagen mypackage¥TEST.java
 
[XML Processorの動作]
生成されるスキーマ文書のxs:import要素のschemaLocation属性の値が不正になります。
 
[回避策]
絶対パスが"#"を含まないディレクトリでcsmschemagenコマンドを実行してください。
44[条件]
csmschemagenコマンドの-dオプションの引数に出力先ディレクトリを指定しない場合です。
(例)
  csmschemagen -d mypackage¥TEST.java
 
[XML Processorの動作]
スキーマは出力されません。また,このときエラーが出力されないことがあります。
45[条件]
プロパティやフィールドで,@XmlSchemaTypeのnameおよび@XmlElementのtypeに,異なる型にマッピングする値を指定する場合です。
 
[XML Processorの動作]
@XmlSchemaTypeのnameに指定されたデータ型の,要素定義のスキーマ文書が生成されます。
46[条件]
次のすべての条件に該当する場合です。
  • フィールドまたはJavaBeanプロパティに,それらが含まれるクラスの名前空間とは異なるnamespace要素の@XmlElementを指定する。
  • フィールドまたはJavaBeanプロパティに,@XmlIDまたは@XmlIDREFを指定する。
[XML Processorの動作]
指定された@XmlIDまたは@XmlIDREFは,生成される大域要素定義に反映されません。
47[条件]
@XmlElementDeclのsubstitutionHeadName要素に,""以外を指定する場合です。
 
[XML Processorの動作]
xs:element要素のsubstitutionGroup属性が出力されません。
48[条件]
@XmlElementDeclのdefaultValue要素に,"¥u0000"以外を指定する場合です。
 
[XML Processorの動作]
xs:element要素のdefault属性が出力されません。
49[条件]
次のすべての条件に該当する場合です。
  • @XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)をパッケージやクラスに指定する。
  • 1クラス内に,アルファベット順でない@XmlAttribute注釈された複数のフィールドやプロパティがある。
 
[XML Processorの動作]
属性がアルファベット順にソートされたスキーマが生成されます。
50[条件]
トップレベルでない内部クラスに,@XmlAccessorType,および@XmlAccessorOrderを指定する場合です。
 
[XML Processorの動作]
エラーにはならないで,指定の注釈が有効となります。
51[条件]
システムのエンコーディングと異なるエンコーディングのJavaソースを指定した場合です。
 
[XML Processorの動作]
エラーが出力されず,不正なスキーマが生成されたりします。
52[条件]
次のすべての条件に該当する場合です。
  1. 複数値のフィールドまたはJavaBeanプロパティに@XmlElementRefを付加する。
  2. 1.の@XmlElementRefのrequired要素が指定されていない,またはrequired要素にtrueが指定されている。
 
[XML Processorの動作]
minOccurs属性の値は,0になります。
53[条件]
次のすべての条件に該当する場合です。
  • -encodingオプションに不当なエンコーディングを指定する。
  • -encodingオプション以外のオプションを指定しない。
 
[XML Processorの動作]
エラーが出力されず,スキーマも生成されません。
54[条件]
次のどれかの条件に該当する場合です。
  • カレントディレクトリまたは-dオプションで指定したディレクトリに書き込み権限がない場合。
  • -dオプションでディレクトリ以外を指定した場合。
  • カレントディレクトリまたは-dオプションで指定したディレクトリに書き込み権限のないスキーマ文書がすでに存在する場合。
  • -dオプションまたは-encodingオプションを指定しjavaソースを指定しない場合。
  • Cosminexus 09-70 以降のバージョンであること。
 
[XML Processorの動作]
エラーを出力せずコマンドを終了します。