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;
Il problema con int è che non supporta l'essere nullo, integer. –
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. –
Specificare 'type =" int "' produce un 'int', specificando' minOccurs = 0' con 'type =" int "' produce un 'Integer'. –