【发布时间】:2012-02-22 14:16:49
【问题描述】:
在 JAXB 和编组/解组方面我是个新手,并且一直在努力通过我的实现来让事情正常进行。
到目前为止,我已经编写了 XSD 并使用 xjc 生成了我的 POJO。一切正常。此外,当我需要解组作为字符串数据或 w3c 文档传入的数据时,我使用JAXBContext.generateSchema() 来生成与我收到的预期类相关的匹配模式。一切正常。
当我分析 generateSchema() 生成的模式时,我的问题就出现了。根据JAXB docs,BigDecimal 生成为 xsd 十进制类型。
我的输入有时包含科学记数法(例如:1.12E12)。当我尝试使用 JAXB 生成的架构解组时,我得到一个 javax.xml.bind.UnmarshalException 异常:
[org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '1.32400146520976E-4' is not a valid value for 'decimal'.]
在使用“十进制”类型或必须为“双精度”时,有什么方法可以正确解析科学记数法吗?
最初,我认为我可以使用双精度表示,因为双精度可以解析科学记数法,但是,我正在处理财务值(这是用于银行计算),因此,我意识到使用双精度表示会导致舍入错误它的固有局限性。
所以我想问题变成了如何创建自定义绑定,让我能够解析科学记数法并将数据存储在 BigDecimal 中?我看过XMLAdpater,但我不明白如何将它用于我正在查看的案例。如果有人能提供见解或示例(除了我一直在网上找到的无处不在的地图示例),我将不胜感激。
谢谢!
埃里克
【问题讨论】: