7

XJC を使用して XSD から Java Bean を生成する場合、ではなくにマップxs:integerする必要があります。JAXB カスタマイズ ファイルにタグを追加したところ (このサイトの多くの回答で述べられているように)、正常に機能しました。IntegerBigIntegerjavaType

しかし、生成されたコードで、@XmlElementタグにtype=String.classparameterがあることに気付きました。

だから今、私はなぜだろうか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;
4

1 に答える 1

6

私はこれが古い質問であることを知っていますが、まだ答えを探している人々のために: のxs:int代わりにtype を使用すると、.xs:integerの代わりに通常の Java int が作成されますBiginteger

于 2013-12-18T14:41:53.513 に答える