2013-04-29 27 views
6

當使用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; 

回答

6

我知道這是一個老問題,但對於人們仍然在尋找一個答案:使用 型xs:int代替xs:integer將創建一個普通的Java int的,而不是Biginteger

+0

int的問題是它不支持爲空,Integer會。 – 2013-12-18 14:55:37

+0

全部都是真的,但我的問題不是關於目標java類型,而是關於生成的'@ XmlElement'註釋。 此外,如果我可以改變XSD使用'xs:int'(我不能,這就是爲什麼我使用的是一個適配器),我懷疑JAXB會生成一個'int' **或**一個'Integer' ,這取決於該領域的可空性。 – 2013-12-19 16:16:24

+2

指定'type =「int」'產生一個'int',用'type =「int」'指定'minOccurs = 0'產生一個'Integer'。 – 2017-01-11 14:12:44