Jaxb 默认为无穷大

Posted

技术标签:

【中文标题】Jaxb 默认为无穷大【英文标题】:Jaxb default to infinity 【发布时间】:2021-11-02 00:00:17 【问题描述】:

我正在尝试使用 Jaxb 制作 XML Schema 来表示数字选择器/微调器的参数:最小值、最大值和步长。我希望最大默认为无穷大,最小为负无穷大,步长默认为 Double.MIN_VALUE。

无穷大和负无穷大都是有效的 xml 和 double 值,所以看起来它们应该是一种将其默认为它们的方法。如果他们是 Double.MIN_VALUE 的快捷方式,而不仅仅是复制该数字,则可以获得奖励积分。

目前我有:

  <xsd:element name="NumericParameter">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="batsignal:DetectorParameter" >
          <xsd:sequence>
            <xsd:element name="min" type="xsd:double" default="-INF"/>
            <xsd:element name="max" type="xsd:double" default="+INF" />
            <xsd:element name="step" type="xsd:double" default="0x0.0000000000001P-1022" />
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>

我得到:

org.xml.sax.SAXParseException; lineNumber: 173; columnNumber: 72; e-props-correct.2: Invalid value constraint value '+INF' in element 'max'.
    at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
    at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:135)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)
    at java.xml/com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:4214)
...

谢谢!

【问题讨论】:

根据w3.org INF-INF 是可接受的值。没有提到+INF 解决了!我现在觉得有点傻。如果你写一个答案,我会接受。 很高兴它有帮助:-) 【参考方案1】:

根据w3.org INF 或 -INF 是可接受的值。没有提到 +INF。

特殊值正无穷和负无穷和非数字分别具有 INF、-INF 和 NaN 的词法表示。零的词法表示可以采用正号或负号。

例如,-1E4、1267.43233E12、12.78e-2、12、-0、0 和 INF 都是 double 的合法字面量。

更新(感谢@Michael-Kay):

+INF 在 XSD 1.1 中成为有效值。

见his answer。

【讨论】:

+INF 在 XSD 1.1 中成为有效值。 @MichaelKay 所以它的工作取决于萨克斯版本? 与 Sax 无关——它取决于 XSD 处理器支持的 XSD Schema 规范的版本。 JAXB 仍在 XSD 1.0 上。 @MichaelKay 什么提供 XSD 处理器实现,Java jdk?你能推荐一个教程/文档来了解这一切是如何联系在一起的吗?谢谢:-) 恐怕我不知道 JAXB 是否有能力选择除 JDK 附带的模式处理器(即 XSD 1.0)之外的模式处理器。你必须自己研究。有两种 XSD 1.1 处理器可供 Java 用户使用 - Apache Xerces 和 Saxon-EE。

以上是关于Jaxb 默认为无穷大的主要内容,如果未能解决你的问题,请参考以下文章

JAXB - java xml解析

Java:使用JAXB方式实现xml和对象之间的转化(注解方式)

通过JAXB完成Java对象与XML之间的转换

itertools模块

CXF+JAXB处理复杂数据

Maven Jaxb2 插件错误