【发布时间】:2020-10-26 11:54:00
【问题描述】:
我们在 java 1.8 和 web 逻辑 12c 中使用 XSD 验证 XML,但是我们面临 0E-8 不是十进制的有效值
下面是我的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<isns:Envelope xmlns:isns="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:pkp-core="http://tracx.de/pkp/interfaces/core/1.0"
xmlns:pkp-msg="http://tracx.de/pkp/interfaces/msg/1.0">
<isns:Header/>
<isns:Body>
<pkp-msg:ABC>
<pkp-msg:test>
<pkp-core:oops>
<pkp-core:XYZ>0.00000000</pkp-core:XYZ>
<pkp-core:billi>period</pkp-core:bill>
<pkp-core:check>0.90225</pkp-core:check>
</pkp-core:oops>
</pkp-msg:test>
</pkp-msg:ABC>
</isns:Body>
</isns:Envelope>
一段java代码:
javax.xml.validation.Validator validator = schema.newValidator();
validator.setErrorHandler(new EUBatchValidationHandler());
validator.validate(source);
【问题讨论】:
-
0.00000000当由BigDecimal解析时是一个数字0,其比例应为8,但BigDecimal的toString()方法将其输出为0E-8,这是有据可查的。您没有指定 为什么 该值被拒绝;是因为 zero 的值无效,还是因为该值不允许使用Scientific Notation?实际的 XML 模式 指定了什么? -
嗨@Andreas。在 XSD 中,我们有类似
的验证 -
不要解释 XSD,展示它,在问题中。只需相关部分就足够了。
-
仅供参考: 值
0.00000000是一个有效的xsd:decimal值,所以要么你没有你认为你拥有的东西,要么 XSD 验证器被窃听。 -
我们在 java 1.6 中使用了上面的验证方法,它工作正常,java 1.8 的问题。所以你可以建议任何替代方法
标签: java xml validation xsd weblogic12c