这个问题确实使我发疯。
我有一个包装类:
@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将子类作为默认类吗?
谢谢!