6.21.2 スキーマコンパイラに関する注意事項

スキーマコンパイラに関する注意事項を次の表に示します。

項番1~項番28の注意事項に該当するスキーマは,スキーマコンパイラで処理しないでください。項番29~項番44については,注意事項に留意して使用してください。

表6-45 JAXBに関する注意事項(スキーマコンパイラ)

項番注意事項
1[条件]
繰り返し指定のある内容モデルに次のすべての条件が該当する場合です。
  • nillable="true"を指定した要素定義が存在する。
  • 内容モデルがmixedではなく,ワイルドカードを含まない。
  • 内容モデルの要素定義がxs:listやxs:IDREFのxmlデータ型またはxs:listやxs:IDREFから派生したデータ型を持っていない。
  • 内容モデルのすべての要素定義に対し,型が同じJavaデータ型にバインドされる二つの異なった要素定義が存在しない。
(例)
<xs:complexType>
 <xs:sequence maxOccurs="unbounded">
  <xs:element name="A" type="xs:string" />
  <xs:element name="B" type="xs:int" nillable="true" />
  <xs:element name="C" type="xs:float" nillable="true"/>
  <xs:element name="D" type="xs:double" />
  </xs:sequence>
</xs:complexType>
 
[Cosminexus XML Processorの動作]
コレクションの最適化を適用します。@XmlElementRefs/@XmlElementRefではなく@XmlElements/@XmlElementでアノテートされたコレクションを出力します。この出力javaソースを使用してアンマーシャル・マーシャルを実行した場合,不正な動作をすることがあります。
2[条件]
次のすべての条件に該当する場合です。
  1. xs:schema要素のtargetNamespace属性に「www.com1.hitachi」などWindowsの予約デバイス名を含む。
  2. Windows上でスキーマコンパイラを実行する。
[Cosminexus XML Processorの動作]
エラーが発生します。
(例)
[ERROR] .¥hitachi¥com1¥ObjectFactory.java(指定されたパスが見つかりません。[errno=3, syscall=CreateFileW])
3[条件]
xs:schema要素のtargetNamespace属性に指定したURIを":"または"/"で分割した文字列の先頭文字が,次のすべての条件に該当する場合です。
  • Character.isJavaIdentifierStartの戻り値がfalseとなる。
  • Character.isJavaIdentifierPartの戻り値がfalseとなる。
[Cosminexus XML Processorの動作]
不正なパッケージ名であるというエラーが発生します。
(例)
[ERROR] The package name 'publicid.__-.w3c.dtd_html_4_01.en' used for this schema is not a valid package name.
4[条件]
xs:schema要素のtargetNamespace属性およびxmlns属性に指定するURIが,次の文字だけで構成されている場合です。
  • ピリオド(.)
  • スラッシュ(/)
  • 文字列"www"
[Cosminexus XML Processorの動作]
java.lang.ArrayIndexOutOfBoundsExceptionなどの,規定されていない例外が発生する場合があります。
5[条件]
次のどちらかの条件に該当する場合です。
  • 繰り返し指定のない内容モデルにxs:any要素が複数存在する。
  • 複合型の拡張で,基底型と拡張型の両方が要素内容としてxs:any型を含んでいる。
[Cosminexus XML Processorの動作]
一つの一般的内容プロパティではなく,複数のプロパティの生成を試みて,エラーが発生します。一般的内容プロパティの詳細については,JSR 222 The Java Architecture for XML Binding 2.1の6.12.3を参照してください。
(例)
[ERROR] Property "Any" is already defined. Use &lt;jaxb:property> to resolve this conflict.
なお,jaxb:propertyカスタムバインディングを指定し,複数の@XmlAnyElement注釈されたプロパティを出力したjavaソースを使用してアンマーシャル・マーシャルを実行した場合,不正な動作をすることがあります。
6[条件]
次のどちらかの条件に該当する場合です。
  • 型を派生したとき,派生した型のcomplexType要素のmixed属性の属性値が"true"である。
  • 型を派生したとき,基底型のmixed属性の属性値が"true"である。
[Cosminexus XML Processorの動作]
派生した型の子要素を取得するメソッドが生成されません。
7[条件]
次のすべての条件に該当する場合です。
  1. xs:simpleType要素に対して,jaxb:typesafeEnumMemberを子要素として持つjaxb:typesafeEnumClassカスタムバインディングが存在する。また,jaxb:typesafeEnumMemberにはname属性が指定されている。
  2. 1.のxs:simpleTypeの下位要素であるxs:enumuration要素に対してjaxb:typesafeEnumMemberカスタムバインディングが指定されていて,name属性が指定されている。
  3. 1.2.のname属性の属性値が異なる。
[Cosminexus XML Processorの動作]
条件1.のname属性を基に,Javaクラスの列挙定数名を生成します。
8[条件]
次のどれかに示すXMLスキーマ要素に,カスタムバインディングを指定する場合です。
  • xs:attributeGroup要素にjaxb:typesafeEnumClassを指定する。
  • xs:complexContent要素の子要素であるxs:extension要素にjaxb:typesafeEnumClassを指定する。
  • xs:simpleType要素の子要素であるxs:restriction要素,またはその子要素のxs:maxExclusive/xs:maxInclusive/xs:minExclusive/xs:maxLength/xs:patternファセットにjaxb:typesafeEnumClass/jaxb:typesafeEnumMember/jaxb:propertyを指定する。
  • xs:restriction要素の子要素のxs:totalDigits/xs:whiteSpaceファセットにjaxb:schemaBindingsを指定する。
[Cosminexus XML Processorの動作]
このようなスキーマ文書を用いた場合のJAXB実行時の動作は規定されていません。
9[条件]
次のすべての条件に該当する場合です。
  • map属性が"false"であるようなjaxb:schemaBindingsカスタムバインディングが存在する。
  • jaxb:classまたはjaxb:typesafeEnumClassカスタムバインディングが存在する。
[Cosminexus XML Processorの動作]
カスタムバインディングが不正であるというエラーが出力されます。
(例)
[ERROR] compiler was unable to honor this class customization. It is attached to a wrong place, or its inconsistent with other bindings.
10[条件]
匿名複合型で型定義されている局所要素定義(=xs:complexTypeを子要素として持つxs:element)に対しjaxb:classカスタムバインディングを指定する場合です。
 
[Cosminexus XML Processorの動作]
エラーが出力されます。
(例)
Exception in thread "main" java.lang.IllegalArgumentException: Illegal class inheritance loop. Outer class <要素名> may not subclass from inner class: <要素名>
11[条件]
複合型定義のxs:restrictionの中で指定されたxs:choice, xs:sequenceまたはxs:allに対し,jaxb:propertyカスタムバインディングを指定する場合です。
 
[Cosminexus XML Processorの動作]
エラーが出力されます。
(例)
[ERROR] compiler was unable to honor this property customization. It is attached to a wrong place, or its inconsistent with other bindings.
12[条件]
次のすべての条件に該当する場合です。
  1. xs:complexType要素にjaxb:typesafeEnumClassカスタムバインディングを指定する。
  2. 1.のカスタムバインディング指定のmap属性に"true"または"1"または"0"を指定する。
[Cosminexus XML Processorの動作]
KECX06051-E cvc-enumeration-valid: Value 'true' is not facet-valid with respect to enumeration '[false]'. It must be a value from the enumeration.が発生します。
map属性に指定した"true"は正しい値ですが,xs:complexType要素にjaxb:typesafeEnumClassカスタムバインディングを指定すること自体が不正です。
13[条件]
次のどちらかの条件に該当する場合です。
  • jaxb:propertyのcollectionType属性に次のどれかを指定する。
    ・空文字列
    ・java.util.Listを実装していないクラス
    ・java.util.Listを実装しているが,完全修飾でないクラス
  • jaxb:globalBindingsのcollectionType属性に次のどちらかを指定する。
    ・java.util.Listを実装していないクラス
    ・java.util.Listを実装しているが,完全修飾でないクラス
[Cosminexus XML Processorの動作]
エラーは発生しないで,javaクラスが生成されます。
14[条件]
jaxb:globalBindingsのcollectionType属性に空文字列を指定する場合です。
[Cosminexus XML Processorの動作]
java.lang.StringIndexOutOfBoundsException例外をスローします。
15[条件]
次のどれかの条件に該当する場合です。
  • jaxb:classカスタムバインディングで次の両方の属性を指定する。
    ・ref属性
    ・排他であるname属性
  • jaxb:classカスタムバインディングで次の両方の属性を指定する。
    ・ref属性
    ・排他であるimplClass属性
  • jaxb:typesafeEnumClassカスタムバインディングで次の両方の属性を指定する。
    ・ref属性
    ・排他であるname属性
  • jaxb:typesafeEnumClassカスタムバインディングで次の両方の属性を指定する。
    ・ref属性
    ・排他であるmap属性
[Cosminexus XML Processorの動作]
エラーは発生しません。このような場合のJAXB実行時の動作は規定されていません。
16[条件]
次のすべての条件に該当する場合です。
  • xs:element大域要素定義,またはxs:element局所要素定義に,jaxb:classカスタムバインディングを指定する。
  • jaxb:classカスタムバインディングでimplClass属性を指定する。
[Cosminexus XML Processorの動作]
エラーは発生しません。このような場合のJAXB実行時の動作は規定されていません。
17[条件]
次のすべての条件に該当する場合です。
  • 列挙ファセットのxs:simpleType定義に,jaxb:typesafeEnumClassカスタムバインディングを指定する。
  • jaxb:typesafeEnumClassのmap属性に"true","1",または"0"を指定する。
[Cosminexus XML Processorの動作]
エラーが出力されます。map属性を指定していない場合,デフォルトの動作は,"true"または"1"を指定したときの動作となります。
18[条件]
次のすべての条件に該当する場合です。
  • 局所または大域属性宣言に対して,jaxb:propertyカスタムバインディングを指定する。
  • generateElementProperty属性に"true","false","1",または"0"を指定する。
[Cosminexus XML Processorの動作]
エラーは出力されないで,プロパティを含むjavaソースが出力されます。
19[条件]
次のすべての条件に該当する場合です。
  • 同じ型でname属性が異なる複数の要素宣言に対して,jaxb:propertyカスタムバインディングを指定する。
  • generateElementProperty属性に"false"を指定する。
[Cosminexus XML Processorの動作]
エラーは出力されないで,JAXBElementを含むjavaソースが出力されます。
20[条件]
次のどちらかの条件に該当する場合です。
  • jaxb:baseType要素のname属性に,デフォルト基底型と同じ継承階層にないクラスを指定する。
  • jaxb:baseType要素のname属性に,完全修飾されたJavaクラス名ではないクラスを指定する。
[Cosminexus XML Processorの動作]
エラーは出力されないで,javaソースが出力されます。
21[条件]
jaxb:propertyカスタムバインディングのattachmentRef属性を使用する場合です。
 
[Cosminexus XML Processorの動作]
スキーマコンパイル中に次のエラーが出力されます。
[ERROR] KECX06031-E cvc-complex-type.3.2.2: Attribute 'attachmentRef' is not allowed to appear in element 'jaxb:property'.
22[条件]
jaxb:globalBindingsカスタムバインディングのunderscoreBinding属性に,"asWordSeparator"または"asCharInWord"以外の文字列を指定する場合です。
 
[Cosminexus XML Processorの動作]
NullPointerException例外をスローします。
23[条件]
jaxb:globalBindingsカスタムバインディングのtypesafeEnumMemberName属性に,"skipGeneration"を指定する場合です。
 
[Cosminexus XML Processorの動作]
次のエラーが出力されます。
KECX06051-E cvc-enumeration-valid: Value 'skipGeneration' is not facet-valid with respect to enumeration '[generateError, generateName]'. It must be a value from the enumeration.
 
[回避策]
typesafeEnumMemberName属性を指定しない場合,デフォルトの動作は"skipGeneration"の動作となります。
24[条件]
次のjaxb:globalBindingsカスタムバインディングのカスタム化指定を,複数指定した場合です。
  • name属性の値が異なるxmlType属性で,そのxmlType属性の値が同じjaxb:javaType
  • uid属性の値が異なるjaxb:serializable
[Cosminexus XML Processorの動作]
このような場合のJAXB実行時の動作は規定されていません。
25[条件]
次のすべての条件に該当する場合です。
  • jaxb:globalBindingsカスタムバインディングのoptionalProperty属性に,"primitive"を指定する。
  • スキーマに,次のどれかのローカル要素定義がある。
    ・minOccurs="0"が指定されているプリミティブ型の要素
    ・xs:choiceの中で定義されたプリミティブ型の要素
[Cosminexus XML Processorの動作]
primitive型ではなく,ラッパークラス型で出力されます。
26[条件]
次のすべての条件に該当する場合です。
  • jaxb:globalBindingsカスタムバインディングのgenerateElementProperty属性に,"false"を指定する。
  • スキーマに同一の型で異なる名前の要素が複数存在するなど,JAXBElement型のプロパティとなる指定が存在する。
[Cosminexus XML Processorの動作]
エラーは発生しません。このような場合のJAXB実行時の動作は規定されていません。
27[条件]
バイナリ型の単純内容を持ったxs:complexTypeに,jaxb:inlineBinaryDataを指定する場合です。
 
[Cosminexus XML Processorの動作]
カスタムバインディングが不正であるというエラーが出力されます。
(例)
[ERROR] compiler was unable to honor this inlineBinaryData customization. It is attached to a wrong place, or its inconsistent with other bindings.
28[条件]
次のどれかの条件に該当する場合です。
  • jaxb:javaTypeのname属性に,存在しないjavaデータ型を指定する。
  • jaxb:javaTypeのparseMethod属性,またはprintMethod属性を指定し,name属性にプリミティブ型を指定する。
  • jaxb:javaTypeのname属性に,String型の一つの引数を持つコンストラクタが定義されていないjavaデータ型を指定する。
[Cosminexus XML Processorの動作]
エラーは発生しません。
29標準仕様では,カスタムバインディングjaxb:javadocを用いることで,生成されるJavaクラスのドキュメンテーションコメントの内容をカスタマイズする方法が規定されています。jaxb:javadocを指定しない場合でも,デフォルトのドキュメンテーションコメントが生成されますが,その内容は標準仕様では規定されていません。
30[条件]
xs:totalDigits,xs:maxExclusive,xs:maxInclusive,xs:minExclusive,xs:minInclusiveファセットのどれかで指定された範囲が,intまたはlongの範囲に収まるような単純型定義が存在する場合です。
 
[Cosminexus XML Processorの動作]
xs:totalDigitsファセットを用いた場合は,常にjava.math.BigIntegerが生成されます。
xs:maxExclusive,xs:maxInclusive,xs:minExclusive,xs:minInclusiveファセットを用いた場合は,JSR 222 The Java Architecture for XML Binding 2.1の6.2.2に示されているアルゴリズムに従ってJava型が生成されます。
31[条件]
次のどれかを含むモデルグループ定義が存在する場合です。
  • 匿名の複合型定義
  • enum typeにマップされるxs:enumerationファセット定義
  • 要素クラスにマップされる内容モデル
[Cosminexus XML Processorの動作]
作成されるクラス名に,モデルグループ名は付けられません。
32[条件]
xs:element局所要素定義にjaxb:classカスタムバインディングを指定する場合です。
 
[Cosminexus XML Processorの動作]
JAXBElement<T>を継承する,作成されたクラスを返す要素ファクトリメソッドを作成します。
(例)
public class ObjectFactory {
 public Base.Bar createBaseBar(String value) {
  return new Base.Bar(value);
 }
 ・・・・
}
Base.Barは,JAXBElement<T>を継承したクラスです。
33[条件]
次のすべての条件に該当する場合です。
  1. xs:element大域要素定義が存在する。
  2. 1.のabstract属性の値が"true"である。
[Cosminexus XML Processorの動作]
要素定義に対応する要素ファクトリメソッドは生成されますが,そのファクトリメソッドを使用してインスタンスを生成できません。
34[条件]
スキーマ文書が次のどちらかに該当する場合です。
  • 内容モデルに,要素名が同じで名前空間が異なる要素定義が指定されている。
  • 内容モデルに,要素名が「classまたはClass」と「clazzまたはClazz」である要素定義が,両方とも含まれる。
[Cosminexus XML Processorの動作]
名前衝突エラーにならないで,@XmlElementRef/@XmlElementRefsでアノテートされた一般的内容リストとして処理されます。内容リストの詳細については,JSR 222 The Java Architecture for XML Binding 2.1の6.12.3を参照してください。
35[条件]
xs:anyのprocessContents属性に"lax"または"skip"を指定する場合です。
 
[Cosminexus XML Processorの動作]
バインドされるプロパティのデータ型は,processContents属性が"lax"の場合,java.lang.Object型,"skip"の場合org.w3c.dom.Element型となります。
36[条件]
xs:element要素のfixed属性を指定する場合です。
 
[Cosminexus XML Processorの動作]
指定したfixed属性の値は,生成されるJavaソースの@XmlElementおよび@XmlElementDeclのdefaultValue要素に反映されません。
 
[回避策]
fixed属性の値をデフォルト値として反映させたい場合は,fixed属性ではなくdefault属性を指定してください。
37[条件]
xs:enumeration要素のvalue属性に,生成されるjava定数識別子が衝突するような文字列を指定する場合です。
(例)
「name-with-dashes」と「name_with_dashes」
 
[Cosminexus XML Processorの動作]
列挙定義を出力しません。エラーは発生しません。
38[条件]
xs:schema要素のtargetNamespace属性に指定したURIが,次のすべての条件に該当する場合です。
  • トップレベルドメイン(com,gov,net,org,eduなど)を含まない。
  • 国別コードを含まない。
[Cosminexus XML Processorの動作]
生成されるjavaソースのパッケージ名はドメイン名が逆順にされ,"www."は削除されます。
39[条件]
要素名や属性名に次のどれかを指定する場合です。
  • javaキーワード
  • javaリテラル("true","false","null")
  • java.lang.Objectクラスで定義されているメソッド名
  • javax.xml.bindクラスで定義されているメソッド名
[Cosminexus XML Processorの動作]
名前衝突エラーにならないで,フィールドやメソッド名が生成されます。javaキーワードやjavaリテラルの場合"_"を付けたフィールド名が作成されます。
40[条件]
再定義された複合型定義が存在する場合です。
 
[Cosminexus XML Processorの動作]
再定義された複合型定義は,"_"が付加されたクラス名でなく,接頭辞Originalが付加されたクラス名が生成されます。
41[条件]
次のすべての条件が該当する場合です。
  • モデルグループ定義が存在する。
  • jaxb:schemaBindingsカスタムバインディングで,jaxb:modelGroupNameのsuffix属性,またはprefix属性を指定する。
[Cosminexus XML Processorの動作]
モデルグループ定義はクラスにマッピングされないため,jaxb:modelGroupNameの指定は生成されるソースに反映されません。
42[条件]
次のすべての条件が該当する場合です。
  1. jaxb:globalBindingsカスタムバインディングのunderscoreBinding属性に,"asCharInWord"を指定する。
  2. xs:elementのname属性,またはfixed属性を指定したxs:attributeのname属性に,アンダーラインが含まれる。
  3. 2.がxs:attributeのname属性の場合に,jaxb:globalBindingsのfixedAttributeAsConstantProperty属性に"true"を指定している。
[Cosminexus XML Processorの動作]
仕様書と異なるjava識別子が生成されます。
(例)
  • xs:elementのname属性の場合
    child_element=>getChild_Element(正しくはgetChild_element)
  • xs:attributeのname属性の場合
    child_attribute=>CHILD___ATTRIBUTE(正しくはCHILD_ATTRIBUTE)
43[条件]
次のすべての条件が該当する場合です。
  • jaxb:globalBindingsカスタムバインディングのenableJavaNamingConventions属性に,"true"を指定または属性を指定しない。
  • <jaxb:schemaBindings>の子要素であるjaxb:packageのname属性に,java識別子として不正な値を指定する。
[Cosminexus XML Processorの動作]
適切なjava識別子への変換が実施されません。
44[条件]
jaxb:globalBindingsカスタムバインディングで,uid属性のないjaxb:serializableを指定する場合です。
 
[Cosminexus XML Processorの動作]
エラーは発生しません。このような場合のJAXB実行時の動作は規定されていません。