当使用XJC从XSD生成Java bean时,我需要将
但是在生成的代码中,我注意到
那么现在我想知道,为什么是
是因为解析和打印方法正在转换为/来自字符串对象吗?
我尝试使用
如果这是正常的XJC行为,是否可能调整它以生成没有此参数或具有另一个值而不是
请注意,一切都正常工作,但我想要理解。
另外,我正在使用Enunciate记录我的API,它似乎对此
我正在使用JAXB RI 2.2.6,这里是一些代码片段,以说明我的问题:
xs:integer
映射到Integer
而不是BigInteger
。我在我的JAXB定制文件中添加了一个javaType
标签(如本网站上的许多答案所述),它运行良好。但是在生成的代码中,我注意到
@XmlElement
标记现在具有type=String.class
参数。那么现在我想知道,为什么是
String
?是因为解析和打印方法正在转换为/来自字符串对象吗?
我尝试使用
xjc:javaType
代替jaxb:javaType
,允许我用自定义的MyAdapter<BigInteger,Integer>
替换生成的Adapter1<String,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;
@XmlElement
注释。 此外,如果我可以更改XSD以使用xs:int
(我不能,这就是为什么我正在使用适配器),我怀疑JAXB将根据字段的可空性生成一个int
或Integer
。 - Thomas Gillettype="int"
将得到一个int
,指定minOccurs=0
且type="int"
将得到一个Integer
。 - Eric Duminilnillable =“true”
而不是minOccurs = 0
。 - Shane Rowatt