2013-04-29 9 views
6

Quando si generano bean Java da XSD con XJC, è necessario mappare xs:integer a Integer anziché BigInteger. Ho aggiunto un tag javaType al mio file di personalizzazione JAXB (come detto in molte risposte da questo sito), e ha funzionato bene.Personalizzazione javaType JAXB su xs: l'intero produce @XmlElement con "type = String.class"

Ma nel codice generato ho notato che il tag @XmlElement ora ha un parametro.

Quindi ora mi chiedo, perché String?
È perché i metodi di analisi e stampa stanno convertendo da/a oggetti stringa?

ho provato con xjc:javaType invece di jaxb:javaType, che mi permette di sostituire il generato Adapter1<String, Integer> con un costume MyAdapter<BigInteger, Integer>, ma esattamente la stessa cosa è accaduto.

Se questo è normale comportamento XJC, è possibile modificarlo per generare codice senza questo parametro o con un altro valore rispetto a String?

Si noti che tutto funziona correttamente, ma mi piacerebbe capire.
Inoltre sto usando Enuncia per documentare la mia API e sembra essere confuso da questa cosa type (ma questo è probabilmente un bug in Enunciate).


sto usando JAXB RI 2.2.6, e qui ci sono alcuni pezzi di codice, per illustrare la mia domanda:

bindings.xjb

<jaxb:bindings version="2.0" ...> 
    <jaxb:globalBindings> 
     <jaxb:javaType 
       name="java.lang.Integer" 
       xmlType="xs:integer" 
       parseMethod="..." 
       printMethod="..." /> 
     </jaxb:globalBindings> 
</jaxb:bindings> 

definizione di campo in the XSD

<xs:complexType name="MyType"> 
    <xs:sequence> 
     <xs:element name="myField" type="xs:integer" /> 
    </xs:sequence> 
</xs:complexType> 

generata campo Java

@XmlElement(namespace = "...", required = true, type = String.class) 
@XmlJavaTypeAdapter(Adapter1.class) 
@XmlSchemaType(name = "integer") 
protected Integer myField; 

risposta

6

So che questa è una vecchia questione, ma per la gente ancora alla ricerca di una risposta: utilizzando il tipo xs:int invece di xs:integer creerà una normale java int al posto del Biginteger.

+0

Il problema con int è che non supporta l'essere nullo, integer. –

+0

Tutto vero, ma la mia domanda non riguardava il tipo java di destinazione, ma l'annotazione '@ XmlElement' generata. Anche se potessi cambiare l'XSD per usare 'xs: int' (che non posso, ecco perché sto usando un adattatore), sospetto che JAXB possa generare un' int' ** O ** un 'intero' , a seconda del nullability del campo. –

+2

Specificare 'type =" int "' produce un 'int', specificando' minOccurs = 0' con 'type =" int "' produce un 'Integer'. –

Problemi correlati