我正在使用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”)
一切正常(不幸的是我确实需要一个元素)。
这些类都不是我的根元素(一切都在我的模型中“深入”)
有人知道我错过了什么吗?可能是某些东西真的很蠢,但却无法把握住它。
由于
答案 0 :(得分:0)
您的根元素(或默认命名空间)可能有一个名称空间定义,因此元素名称不是additionalInformation而是名称空间:additionalInformation(或者它在Record元素中表示)。你是否也检查过Toto类的内容是否正确地保存了附加信息元素(我猜它是因为它适用于属性,但以防万一)。
您可以打印出Record元素的内容,以查看存储的内容和方式。
答案 1 :(得分:0)
感谢您的回答,我找到了解决方案:
显然,目前MOXy要求继承指示符在XML属性中,以便@XmlClassExtractor工作。 我最终找到并使用另一种方法来处理使用@XmlAdapter
的继承