泽西岛不能解组java.lang.Number

时间:2012-08-22 15:41:00

标签: java jaxb

我有一个通用(POJO-)容器来与客户共享统计数据:

@XmlRootElement
public class StatsSeries implements Serializable {

    private TreeMap<Date, Number> timeSeries;

    /* accessor methods */
}

根据数据,服务器会在其中存储LongIntegerDouble,这就是我使用抽象java.lang.Number的原因。

编组工作正常,并且提示表明具体类包含在数据中:

            "timeSeries": {
                "entry": [
                    {
                        "key": "2012-08-20T00:00:00Z", 
                        "value": {
                            "$": "24", 
                            "@type": "xs:long"
                        }
                    }, 
                    ....
                 ]
              }

或者在XML表示中:

    <timeSeries>
      <entry>
        <key>2012-08-20T00:00:00Z</key>
        <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:long">24</value>
      </entry>
      ...
    </timeSeries>

尝试解组时,我得到javax.xml.bind.UnmarshalException: Unable to create an instance of java.lang.Number

我看到了this question,但它对我没有帮助。我如何注释java.lang.Number?还有其他建议吗?

更新:关注JAXB-890,我了解它应该在JDK 1.7或com.sun.xml.bind:jaxb-impl:2.2.6上修复 - 对我来说都不适用。

1 个答案:

答案 0 :(得分:0)

不确定这会在给定类型擦除时起作用,但您可以尝试annotating with XmlElementRef

    @XmlElementRef
    private TreeMap<Date, Number> timeSeries;
  

“使用此批注时,XML元素名称是在运行时从JavaBean属性类型的实例派生的。”

如果失败,请参阅if this link helps