XJC を使用して XSD から Java Bean を生成する場合、ではなくにマップxs:integer
する必要があります。JAXB カスタマイズ ファイルにタグを追加したところ (このサイトの多くの回答で述べられているように)、正常に機能しました。Integer
BigInteger
javaType
しかし、生成されたコードで、@XmlElement
タグにtype=String.class
parameterがあることに気付きました。
だから今、私はなぜだろうかString
?
parse メソッドと print メソッドが文字列オブジェクトとの間で変換しているためですか?
xjc:javaType
の代わりにを試してみて、生成された を customjaxb:javaType
に置き換えることができましたが、まったく同じことが起こりました。Adapter1<String, Integer>
MyAdapter<BigInteger, Integer>
これが通常の XJC の動作である場合、このパラメーターを使用せずにコードを生成するように微調整することは可能String
ですか?
すべてが正常に機能していることに注意してください。ただし、理解したいと思います。
また、私は Enunciate を使用して API を文書化していますが、このtype
ことで混乱しているようです (ただし、これはおそらく Enunciate のバグです)。
私は JAXB RI 2.2.6 を使用しています。私の質問を説明するために、いくつかのコードを次に示します。
バインディング.xjb
<jaxb:bindings version="2.0" ...>
<jaxb:globalBindings>
<jaxb:javaType
name="java.lang.Integer"
xmlType="xs:integer"
parseMethod="..."
printMethod="..." />
</jaxb:globalBindings>
</jaxb:bindings>
XSD でのフィールド定義
<xs:complexType name="MyType">
<xs:sequence>
<xs:element name="myField" type="xs:integer" />
</xs:sequence>
</xs:complexType>
生成された Java フィールド
@XmlElement(namespace = "...", required = true, type = String.class)
@XmlJavaTypeAdapter(Adapter1.class)
@XmlSchemaType(name = "integer")
protected Integer myField;