Vì vậy, đây là vấn đề của tôi. Tôi được cung cấp một XSD mà tệp XML được tạo của tôi sẽ tuân thủ. Sử dụng plugin org.apache.cxf.cxf-xjc-plugin
maven và tệp ràng buộc bên ngoài tôi tạo mã nguồn. Nhưng khi tôi đang thử marshall đối tượng của tôi, XML được tạo ra không đáp ứng các yêu cầu của tôi.JAXB marshalling cho BigDecimal sử dụng fractionDigits
XSD My chứa sau:
<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>
Và mảnh tạo của XML trông như thế này:
<amount>109.5</amount>
...
<rate>10.25</rate>
Trong khi tôi đang mong nó sẽ được:
<amount>109.50</amount>
...
<rate>10.25000</rate>
Có cách nào để giải quyết vấn đề này một cách sạch sẽ không?
Tôi không thích viết nhiều bộ điều hợp cho mỗi kết hợp totalDigits
, fractionDigits
. Và như XSD có thể thay đổi tôi muốn để lại mã nguồn được tạo ra không bị ảnh hưởng.
Tài liệu w3c trên datatype thập phân nói 'fractionDigits' xác định giới hạn trên về số chữ số sau dấu phân cách thập phân. Nó không quan trọng đối với bất cứ điều gì đọc dữ liệu nếu các số 0 bên phải không có. Trường hợp sử dụng yêu cầu padding bằng không là gì? –
@Jim Phân tích ứng dụng (kế thừa) của tệp XML được tạo của tôi yêu cầu không có đệm ;-) – Jasper
Bạn có thể sử dụng 'precisionDecimal' như trong câu trả lời của tôi không? –