- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当涉及到 JAXB 和编码/解码时,我是一个新手,并且一直在努力完成我的实现以使事情正常工作。
到目前为止,我已经使用 xjc 编写了我的 XSD 并生成了我的 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'.]
在使用“十进制”类型或必须是“ double ”时,是否有某种方法可以正确解析科学记数法?
最初,我认为我可以使用 double 表示,因为 double 可以解析科学计数法,但是,我正在处理财务值(这是用于银行计算),因此,我意识到使用 double 表示会导致舍入错误,因为其固有的局限性。
所以我想问题变成了如何创建允许我解析科学记数法并将数据存储在 BigDecimal 中的自定义绑定(bind)?我看过 XMLAdpater
,但我不明白如何将它用于我正在查看的案例。如果有人可以提供见解或示例(除了我一直在网上找到的无处不在的 Map 示例),我将不胜感激。
谢谢!
埃里克
最佳答案
1) 没有自定义绑定(bind),不,因为 XML 模式规范非常清楚 lexical representation of a decimal 是什么是。
2) 我认为定制是克服这个问题的唯一方法; another way maybe ?
但我会担心的是,如果有人试图使用生成的 XSD 来验证实例 XML,那会时不时地失败,除非您有一个允许两者的模式...虽然 shunned , xsd:union 可能是唯一的出路(您仍然必须进行自定义绑定(bind))...
关于java - 如何让 JAXB 解析 BigInteger 的科学记数法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069765/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!