JAXB编写XML Schema设置xsd:double默认值为无穷大报错如何解决
报错原因
XML Schema 1.0/1.1规范中对xsd:double类型的特殊值规定如下:
- 正无穷大的合法字面量为
INF,不允许添加前置+号 - 负无穷大的合法字面量为
-INF,你当前min的默认值写法是正确的 - NaN的合法字面量为
NaN
你代码中max的默认值写为+INF不符合规范,因此触发了值约束校验错误。
修正方案
直接将max元素的默认值修改为INF即可,修正后的XSD片段如下:
<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>
Double.MIN_VALUE默认值说明
XSD是平台无关的规范,没有直接引用Java常量的快捷方法,你当前使用的十六进制浮点表示0x0.0000000000001P-1022完全符合规范,和Double.MIN_VALUE的取值完全等价,也可以替换为更易读的十进制科学计数法写法2.2250738585072014E-308,两者效果完全一致。
使用修正后的定义生成JAXB类时,三个字段的默认值会自动映射为Java的Double.NEGATIVE_INFINITY、Double.POSITIVE_INFINITY和Double.MIN_VALUE,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者yesennes
相关产品推荐
相关产品推荐

