JAXB Unmarshalling полиморфные объекты - коллекции? - PullRequest
2 голосов
/ 24 июля 2011

У меня есть XML в следующем виде:

<Temp NAME="bobo"> 
    <elem1 />
    <elem2>
        <Attri1 ID="123" />
    </elem2>
    <elem3>
        <Attri2 MOM="9" ID="7" SSS="2" />
    </elem3>
    <elem3>
         <Attri3 MOM="44" ID="4" DSC="First Test"/>
    </elem3>
</Temp>

Я использую аннотации для сопоставления с классами Java:

@XmlRootElement(name = "Temp")
public class Temp {

    @XmlElements({
        @XmlElement(name="elem1",type=elem.class),
        @XmlElement(name="elem2",type=elem.class)})
    public ArrayList<elem> elms;
}

public class elem {
...
}

public class elem1 extends elem{
...
}

public class elem2 extends elem{
...
}

public class elem3 extends elem{
...
}

В каждом элементе может быть много атрибутов.

Может кто-нибудь помочь мне, как правильно аннотировать классы Java?

Позвольте мнеотточить мой вопрос.Мне нужно построить из этого XML java-объекты, которые будут иметь 3 параметра: имя первого элемента (p1), имя дочернего элемента (p2), значения карты (p3).

Приведенный выше XML-код сгенерирует4 объекта java elem:

тип всех объектов java - elem!

obj1:

p1 = elem1
p2 = null
p3 = null

obj2:

p1 = elem2
p2 = Attri1
p3 =  map:   key   value
             (ID,  123)

obj3:

p1 = elem3
p2 = Attri2
p3 =  map:   key   value
             (MOM,  9)
             (ID,  7)
             (SSS,  2)

obj4:

p1 = elem3
p2 = Attri3
p3 =  map:   key   value
             (MOM,  44)
             (ID,  4)
             (DSC,  First Test)

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

1 Ответ

0 голосов
/ 25 июля 2011

Ну, вам нужно иметь определение схемы для вашего xml, которое охватывает все ваши случаи. Если вам действительно нужна динамическая структура, вам нужно построить ее по-другому с помощью пар ключ-значение. Например:

<Атрибут>

<name >ID</name >
<value > 123</value >

OR

Это даст вам набор атрибутов для каждого элемента. Это может быть представлено в вашей схеме. Если у вас есть схема, вы можете сгенерировать или создать свои объекты

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