0

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

@XmlRootElement
public class StatsSeries implements Serializable {

    private TreeMap<Date, Number> timeSeries;

    /* accessor methods */
}

根据数据,服务器存储LongInteger存储Double在其中,这就是我使用 abstract 的原因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.

我看到了这个问题,但这对我没有帮助。我该如何注释java.lang.Number?还有其他建议吗?

更新:查看JAXB-890,我知道它应该在 JDK 1.7 或使用中修复com.sun.xml.bind:jaxb-impl:2.2.6- 对我来说都不适用。

4

1 回答 1

0

不确定这是否适用于类型擦除,但您可以尝试使用XmlElementRef

    @XmlElementRef
    private TreeMap<Date, Number> timeSeries;

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

如果失败,请查看此链接是否有帮助

于 2012-08-22T16:25:09.600 回答