簡體   English   中英

xs:integer上的JAXB javaType自定義生成帶有“type = String.class”的@XmlElement

[英]JAXB javaType customization on xs:integer produces @XmlElement with “type=String.class”

當使用XJC從XSD生成Java bean時,我需要將xs:integer映射到Integer而不是BigInteger 我在我的JAXB自定義文件中添加了一個javaType標記(如本網站的許多答案所述),它運行正常。

但是在生成的代碼中,我注意到@XmlElement標記現在有一個type=String.class參數

所以現在我想知道,為什么是String
是因為解析和打印方法是從/轉換為字符串對象?

我嘗試使用xjc:javaType而不是jaxb:javaType ,允許我用自定義MyAdapter<BigInteger, Integer>替換生成的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM