XML To Java Object

113
31 марта 2021, 15:20

Есть XML строка такого типа:

<Tabelle name="WWS_ARTIKEL">
<FeldBeschreibung>
<Feld type="String(12)">ARTIKELNR</Feld>
<Feld type="String(6)">ARTIKELGRP</Feld>
</FeldBeschreibung>
<Datensaetze>
<Datensatz>
<Feld name="ARTIKELNR">1000</Feld>
<Feld name="ARTIKELGRP">1</Feld>
</Datensatz>
<Datensatz>
<Feld name="ARTIKELNR">2000</Feld>
<Feld name="ARTIKELGRP">2</Feld>
</Datensatz>
</Datensaetze>
</Tabelle>
</StammDaten>

Вопрос: как правильно ее десериализовать в java object?

Создал классы Stammdaten, Tabelle, Datensatz, Feld. Stammdaten я делаю

@JacksonXmlRootElement(localName = "StammDaten")

затем

@JacksonXmlElementWrapper(localName = "Datensaetze")
@JacksonXmlProperty(localName = "Datensatz")
private List<Datensatz> datensaetze;

и так далее иду вниз по иерархическому дереву

Answer 1

Отвечаю сам, может кому пригодится.

Моя ошибка была в том, что в самом начале XML есть заглавный тэг <lcs:LandwehrStammDaten ...>. Это и есть в иерархическом дереве самый высокий его член.

Создается класс LandwehrStammDaten как и все остальные, стоящие ниже по иерархии: StammDaten, Tabelle, Datensatz, Feld

@JsonIgnoreProperties(ignoreUnknown = true)
@JacksonXmlRootElement(localName = "LandwehrStammDaten")
public class LandwehrStammDaten implements Serializable {
    @JacksonXmlProperty(localName = "StammDaten")
    private StammDaten stammdaten;
//getters and setters
}
//класс Tabelle по аналогии
@JsonIgnoreProperties(ignoreUnknown = true)
public class StammDaten implements Serializable {
    @JacksonXmlProperty(localName = "Tabelle")
    private Tabelle tabelle;
//getters adn setters
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Datensatz implements Serializable{
    @JacksonXmlElementWrapper(localName = "Datensatz")
    @JacksonXmlProperty(localName = "Feld")
    private List<Feld> Feld;
//getters and setters
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Feld implements Serializable{
    private static List<Feld> instances = new ArrayList();
    public Feld() {
        instances.add(this);
    }
    public static List<Feld> getList(){
        return instances;
    }
    @JacksonXmlProperty(isAttribute = true)
    private String name;
    @JacksonXmlText(value = true)
    private String value;
//getters and setters
}
READ ALSO
Код из стороннего потока изменяет UI

Код из стороннего потока изменяет UI

Во многих источниках говорится, что код из стороннего потока не может изменять экран приложения(UI) и для этого нужно использовать Handler, runOnUiThread()...

118
Билиотека для андроид

Билиотека для андроид

Только начал изучать андроид, хочу написать библиотеку для получения всех view на активностиНе могу нащупать точку входа

133
EventEmitter и проверка заполнения объекта

EventEmitter и проверка заполнения объекта

Есть события (events) на которые я подписываюсь (данные события делают запрос на сторонний сервис и получают информацию)После получения информации,...

94
Асинхроность при постановке команд в очередь

Асинхроность при постановке команд в очередь

Ajax запросы отрабатывают верно: получение статуса команды, удаление команды, постановка в очередьНе могу решить проблему, при клике осуществляет...

135