У меня есть сложный XML, из которого мне нужно создавать объекты Java.Я делаю это с помощью Unmarshal.в то время как эта работа прекрасно, мне также нужно напечатать объект Java как String.У меня есть два решения для этого:
- реализовать метод toString () для каждого из вложенных классов.-> это прекрасно работает
- маршал.-> здесь есть ошибки.
У меня есть этот XML:
<Lang>
<a1 NAM="Momo" RTA="" />
<a2 NAM="Rena" RTA="buba" />
<a3 NAM="Fiba" RTA="kusit" />
<a4 NAM="Shila" RTA="hamuda" />
<Lang>
Мне нужно было сгенерировать представление карты объекта Java.
Карта - ключпервый атрибут в этом примере a1, a2, a3 ...
Map - значением являются остальные атрибуты - для этого реализованного мной класса, имеющего атрибут NAM и RTA, имя класса BBB.
В этом классе я создаю конструктор, который имеет 1 параметр - Элемент.
Я вызываю этого конструктора из метода Unmarshall
У меня нет значений значений вmap.
у меня сейчас нет имени атрибута - a1, a2 .. должны быть универсальными
Итак, что я сделал, чтобы правильно выполнить демаршалл это:
Я создаю класс, содержащий список элементов (org.w3c.dom.Element) - с аннотацией @XmlAnyElement.имя класса ABC
Я создаю класс, который расширяет XmlAdapter {ABC, MAP {String, BBB}}
и реализует метод Unmarshall, а НЕ реализует в Marshallmethod
Это отлично работает, я получаю данные именно так, как я и ожидал.Теперь я хочу реализовать метод Маршала и не уверен, что собираюсь это делать, потому что элемент не является обычным объектом - это интерфейс.
Метод Маршала:
@Override
public LangVos marshal(Map<String, BBB> map) {
ABC abc = new ABC();
langVos.langVOs = new ArrayList<Element>(map.size());
for (Entry<String, BBB> entry : map.entrySet()) {
Element e = (Element) entry.getValue(); // how to create Element using factory from entry ?
ABC.list.add(e);
}
return abc;
}
Iне сейчас, как установить атрибуты в маршале.Находясь в демаршале, мне нужно было сделать getAttribute.
Надеюсь, я проясню.
Спасибо за любую помощь.
Борис.