@XMLSeeAlso, чтобы взять подкласс, если отсутствует xsi: type - PullRequest
0 голосов
/ 27 декабря 2018

эта проблема действительно сводит меня с ума.

У меня есть класс в качестве оболочки:

@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, и это нормально для меня.

Проблема в том, что есть пара xml-файлов без xsi: type, которые необходимо разобрать.Из-за аннотации XmlSeeAlso я получаю объекты типа DetailSuperClass, но мне нужно по умолчанию Details1.

Кто-нибудь знает, как я могу сказать JAXB, что нужно использовать подкласс по умолчанию, если не указан xsi: type?

Заранее спасибо!

...