當使用XJC從XSD生成Java bean時,我需要將xs:integer
映射到Integer
而不是BigInteger
。我爲我的JAXB自定義文件添加了一個javaType
標記(正如本網站的許多答案中所述),並且它工作正常。xs:integer上的JAXB javaType自定義生成帶有「type = String.class」的@XmlElement
但是在生成的代碼中我注意到@XmlElement
標籤現在有type=String.class
參數。
所以現在我想知道,爲什麼String
?
是否因爲解析和打印方法正在將字符串轉換爲字符串對象?
我試着用xjc:javaType
而不是jaxb:javaType
,允許我用自定義的MyAdapter<BigInteger, Integer>
替換生成的Adapter1<String, Integer>
,但發生了完全相同的事情。
如果這是正常的XJC行爲,是否可以調整它以生成沒有此參數的代碼,或使用除String
之外的其他值?
請注意,一切工作正常,但我想明白。
另外我使用發音來記錄我的API,它似乎被這個type
事情弄糊塗了(但這可能是一個錯誤)。
我使用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;
int的問題是它不支持爲空,Integer會。 – 2013-12-18 14:55:37
全部都是真的,但我的問題不是關於目標java類型,而是關於生成的'@ XmlElement'註釋。 此外,如果我可以改變XSD使用'xs:int'(我不能,這就是爲什麼我使用的是一個適配器),我懷疑JAXB會生成一個'int' **或**一個'Integer' ,這取決於該領域的可空性。 – 2013-12-19 16:16:24
指定'type =「int」'產生一個'int',用'type =「int」'指定'minOccurs = 0'產生一個'Integer'。 – 2017-01-11 14:12:44