7

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

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

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

我尝试使用xjc:javaType而不是jaxb: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

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

于 2013-12-18T14:41:53.513 回答