解组空int,double或date属性时,JAXB抛出Error

时间:2010-07-15 00:26:45

标签: java xsd jaxb

当JAXB解组xml数据时遇到了问题。

当从xml解组intdoubledate属性的空值时,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。我无法在输入中输入“左角”符号。任何人都可以帮助我吗?

非常感谢。

2 个答案:

答案 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>