Разоблачение в подкласс с JAXB - PullRequest
2 голосов
/ 24 февраля 2011

У меня есть JSON что-то вроде этого:

objects:[{
   id:"p452365",
   type:"photo",
   link:"http://xxx.zz"
},
{
   id:"v7833",
   type:"video",
   link:"http://xxx.yy",
   length:"4.12"
}
]

В суперклассе Entity есть 2 переменные экземпляра: id и type. В моем расширенном XmlAdapter классе я пытался привести свои экземпляры Entity к подтипу для ex. Photo

public HashMap<String, List<Column>> unmarshal(Feeds f) throws Exception {
        for(Feed feed : f.getFeeds()){
            System.out.println("Entity id for feed : " + feed.getId());
            for(Entity e:feed.getObjects()){
                if (e instanceof Photo){
                    // Of course it's not
                }
            }
        }
        return (HashMap<String, List<Column>>)fm.map(f.getFeeds());
    }

Конечно, это не фото, я сделал там снимок :) Я хочу иногда вмешиваться в процесс JAXB и отменять маршалинг в соответствии со значением типа в JSON. Интересно, где и как.

1 Ответ

0 голосов
/ 24 февраля 2011

Один из моих предыдущих ответов на подобный вопрос может помочь здесь. По сути, он использует @XmlDescrimatorNode в EclipseLink JAXB (MOXy). Обратите внимание, что я ведущий технический специалист МОКСИ.

Вы также можете сделать это с помощью XmlAdapter. AdaptedEntity будет иметь все свойства Entity и его подклассов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...