我有一个通用(POJO-)容器来与客户共享统计数据:
@XmlRootElement
public class StatsSeries implements Serializable {
private TreeMap<Date, Number> timeSeries;
/* accessor methods */
}
根据数据,服务器会在其中存储Long
,Integer
或Double
,这就是我使用抽象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
上修复 - 对我来说都不适用。
答案 0 :(得分:0)
不确定这会在给定类型擦除时起作用,但您可以尝试annotating with XmlElementRef
@XmlElementRef
private TreeMap<Date, Number> timeSeries;
“使用此批注时,XML元素名称是在运行时从JavaBean属性类型的实例派生的。”
如果失败,请参阅if this link helps。