如果缺少xsi:type,则@XMLSeeAlso也可以继承子类

时间:2018-12-27 10:02:34

标签: java jaxb unmarshalling

这个问题确实使我发疯。

我有一个包装类:

@XmlRootElement(name = "Wrapper") 
public class Wrapper
{       
    private Map<String, DetailSuperClass>   messages = new HashMap<String, DetailSuperClass>();

    @XmlElementWrapper(name = "messages")
    @XmlElement(name = "message")
    public Map<String, DetailSuperClass> getMessages()
    {
        return messages;
    }

    public void setMessages(Map<String, DetailSuperClass> messages)
    {
        this.messages = messages;
    }    
}

DetailSuperClass看起来像这样:

@XmlSeeAlso({Details1.class, Details2.class})
public class DetailSuperClass implements Serializable
{ ... }

子类是:

public class Details1 extends DetailSuperClass
{ private List<DTOA> someDTOAObjects = new ArrayList<DTOA>();}


public class Details2 extends DetailSuperClass
{ private List<DTOB> someDTOBObjects = ArrayList<DTOB>();}

使用消息类型为Details1或Details 2的封送对象可以正常工作。 XML文件具有属性xsi:type,这对我来说还可以。

问题是,有几个不带xsi:type的xml文件需要解组。由于存在XmlSeeAlso批注,因此我获得了类型为DetailSuperClass的对象,但默认情况下需要Details1。

如果没有给出xsi:type的话,有人知道如何告诉JAXB将子类作为默认类吗?

谢谢!

0 个答案:

没有答案