gpt4 book ai didi

java - 如何让 JAXB 解析 BigInteger 的科学记数法?

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:43 25 4
gpt4 key购买 nike

当涉及到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com