Quindi ecco il mio problema. Mi viene fornito un XSD a cui il mio file XML generato dovrebbe essere conforme. Utilizzando il plug-in org.apache.cxf.cxf-xjc-plugin
e un file di bind esterno, genera il codice sorgente. Ma quando cerco il mio oggetto marshall, l'XML generato non soddisfa i miei requisiti.JAXB marshalling per BigDecimal usando fractionDigits
mio XSD contiene quanto segue:
<xsd:element maxOccurs="1" minOccurs="0" name="amount">
<xsd:simpleType>
<xsd:restriction base="xsd:decimal">
<xsd:totalDigits value="13" />
<xsd:fractionDigits value="2" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
...
<xsd:element maxOccurs="1" minOccurs="0" name="rate">
<xsd:simpleType>
<xsd:restriction base="xsd:decimal">
<xsd:totalDigits value="8" />
<xsd:fractionDigits value="5" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
E il pezzo generato XML assomiglia a questo:
<amount>109.5</amount>
...
<rate>10.25</rate>
Mentre mi aspettavo che fosse:
<amount>109.50</amount>
...
<rate>10.25000</rate>
C'è un modo per risolvere questo problema in modo pulito?
Preferisco non scrivere più adattatori per ogni singola combinazione totalDigits
, fractionDigits
. E poiché l'XSD è soggetto a modifiche, vorrei lasciare intatto il codice sorgente generato.
Il documento del W3C sul tipo di dati decimale dice 'fractionDigits' specifica il limite superiore per il numero di cifre dopo il separatore decimale. Non dovrebbe importare nulla leggendo i dati se gli zeri della mano destra sono assenti. Qual è il caso d'uso che richiede lo zero padding? –
@Jim L'applicazione (legacy) che analizza il mio file XML generato richiede lo zero padding ;-) – Jasper
È possibile utilizzare 'precisionDecimal' come nella mia risposta? –