当JAXB解组xml数据时遇到了问题。
当从xml解组int
,double
或date
属性的空值时,JAXB会抛出异常。例如,它在解组以下xml数据时抛出java.lang.NumberFormatException
。
<sku displayName="iphone" price=""/>
以下是我的架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="sku" type="SkuType" maxOccurs="unbounded"/>
<xs:complexType name="SkuType">
<xs:attribute name="displayName" type="xs:string" use="required"/>
<xs:attribute name="price" type="xs:double" use="required"/>
<xs:attribute name="startDate" type="xs:dateTime" use="optional"/>
<xs:attribute name="minimumOrderQty" type="xs:integer" use="optional"/>
</xs:complexType>
</xs:schema>
抱歉凌乱的xml。我无法在输入中输入“左角”符号。任何人都可以帮助我吗?
非常感谢。
答案 0 :(得分:2)
抛出错误,因为空字符串“”不是有效的double。如果需要价格,则必须为其分配有效的双倍值。
而不是price =“”你应该设置一个像price =“0”这样的值,或者让属性成为可选项。
有效价格属性:
<sku displayName="iphone" price="0"/>
价格属性作为可选属性:
<xs:attribute name="price" type="xs:double" use="optional"/>
答案 1 :(得分:1)
您可以将price属性类型限制为空字符串和整数值的并集。虽然这仍然会将price属性映射到XML Schema的字符串验证,但会检查只有空字符串和整数作为price属性的值有效。这是架构示例:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="product" type="product"/>
<xsd:complexType name="product">
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="price" type="emptyInt"/>
</xsd:complexType>
<xsd:simpleType name="emptyInt">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="xsd:integer"/>
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value=""/>
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
</xsd:schema>