使用XJC从XSD生成Java bean时,我需要将xs:integer
映射到Integer
而不是BigInteger
。我在我的JAXB自定义文件中添加了javaType
标记(如本网站的许多答案中所述),并且运行正常。
但是在生成的代码中,我注意到 @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>
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;
答案 0 :(得分:6)
我知道这是一个老问题,但对于仍在寻找答案的人们:
使用类型xs:int
而不是xs:integer
将创建一个普通的java int而不是Biginteger
。