xs:integer上的JAXB javaType自定义生成带有"type = String.class"的@XmlElement

Tho*_*let 6 java xjc jaxb2

当使用XJC从XSD生成Java bean时,我需要映射xs:integerInteger而不是BigInteger.我javaType在我的JAXB自定义文件中添加了一个标记(如本网站的许多答案所述),它运行正常.

但是,在生成的代码我注意到,@XmlElement标签现在有一个type=String.class参数.

所以现在我想知道,为什么String
是因为解析和打印方法是从/转换为字符串对象?

我试过xjc:javaType而不是jaxb:javaType,允许我Adapter1<String, Integer>用自定义替换生成的MyAdapter<BigInteger, Integer>,但完全相同的事情发生了.

如果这是正常的XJC行为,是否可以调整它以生成没有此参数的代码,或者使用其他值String

请注意,一切正常,但我想了解.
此外,我正在使用Enunciate来记录我的API,它似乎被这个type东西弄糊涂了(但这可能是Enunciate中的一个错误).


我正在使用JAXB RI 2.2.6,这里有一些代码片段来说明我的问题:

bindings.xjb

<jaxb:bindings version="2.0" ...>
    <jaxb:globalBindings>
        <jaxb:javaType
                name="java.lang.Integer"
                xmlType="xs:integer"
                parseMethod="..."
                printMethod="..." />
        </jaxb:globalBindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

XSD中的字段定义

<xs:complexType name="MyType">
    <xs:sequence>
        <xs:element name="myField" type="xs:integer" />
    </xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)

生成的Java字段

@XmlElement(namespace = "...", required = true, type = String.class)
@XmlJavaTypeAdapter(Adapter1.class)
@XmlSchemaType(name = "integer")
protected Integer myField;
Run Code Online (Sandbox Code Playgroud)

小智 6

我知道这是一个老问题,但对于仍在寻找答案的人:使用type xs:int而不是xs:integer将创建一个普通的java int而不是Biginteger.

  • 指定`type ="int"`产生一个`int`,用`type ="int"`指定`minOccurs = 0`产生一个`Integer`. (2认同)