当使用 XJC 从 XSD 生成 Java bean 时,我需要映射 xs:integer
至 Integer
而不是 BigInteger
.我添加了一个 javaType
标记到我的 JAXB 自定义文件(如本网站的许多答案中所述),并且工作正常。
但是在生成的代码中我注意到@XmlElement
标签现在有一个 type=String.class
参数.
所以现在我想知道,为什么 String
?
是因为 parse 和 print 方法正在从/向字符串对象转换吗?
我试过 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>
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;
最佳答案
我知道这是一个老问题,但对于仍在寻找答案的人来说:
使用类型 xs:int
而不是 xs:integer
将创建一个普通的 java int 而不是 Biginteger
。
关于java - xs :integer produces @XmlElement with "type=String.class" 上的 JAXB javaType 自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16280273/