XmlElement上的Jaxb / MOXY ClassExtractor

时间:2015-02-19 17:14:49

标签: java jaxb moxy

我正在使用jaxb遇到一个问题,在解组我的xml时,我无法区分我的一个类和一个继承的类。

我得到了第一堂课:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlClassExtractor(PersonExtractor.class)
@XmlSeeAlso(Toto.class)
public class Person {
}

继承的:

public class Toto
extends Person
{
    @XmlElement(name = "additionalInformation")
    private String additionalInformation;
}

我的提取器:

public class PersonExtractor
extends ClassExtractor
{
@Override
public Class extractClassFromRow(Record pArg0, Session pArg1)
{
    if (pArg0.get("additionalInformation") != null || pArg0.get("@additionalInformation") != null)
    {
        return Toto.class;
    }
    else
    {
        return Person.class;
    }
}

}

不幸的是,这不起作用 当我试图解组时,总会返回Person.class 如果我改变:
@XmlElement(name =“additionalInformation”)

@XmlAttribute(name =“additionalInformation”)
一切正常(不幸的是我确实需要一个元素)。

这些类都不是我的根元素(一切都在我的模型中“深入”)
有人知道我错过了什么吗?可能是某些东西真的很蠢,但却无法把握住它。

由于

2 个答案:

答案 0 :(得分:0)

您的根元素(或默认命名空间)可能有一个名称空间定义,因此元素名称不是additionalInformation而是名称空间:additionalInformation(或者它在Record元素中表示)。你是否也检查过Toto类的内容是否正确地保存了附加信息元素(我猜它是因为它适用于属性,但以防万一)。

您可以打印出Record元素的内容,以查看存储的内容和方式。

答案 1 :(得分:0)

感谢您的回答,我找到了解决方案:

显然,目前MOXy要求继承指示符在XML属性中,以便@XmlClassExtractor工作。 我最终找到并使用另一种方法来处理使用@XmlAdapter

的继承