Как избежать стирания типа в реализации JAXB, MOXY при сортировке? - PullRequest
1 голос
/ 04 октября 2019

Мне нужно маршалловать следующий класс;

@XmlRootElement(name = "SYSMessage")
@XmlAccessorType(XmlAccessType.FIELD)
public class Message<T> {

    @XmlPath("Personel")
    private Personel personel;

    @XmlPath("AccountType")
    private T accountType;

    ...

Так что в производстве я установил класс универсального типа учетной записи с некоторым объектом с именем "DebitAccount". Я должен использовать универсальный тип, потому что debitAccount будетизменить много раз.

Message<DebitAccount> msg = new Msg<>();
DebitAccount dAccount= new DebitAccount();
msg.setAccountType(dAccount);

и когда я упорядочил класс Message, я получил следующий xml-результат в качестве типа учетной записи;... org.demo.blabla.DebitAccount@123123 ...

В классе DebitAccount;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class DebitAccount{

    @XmlPath("ID")
    private String id;

    @XmlPath("Visa")
    private String visaNo;

Я выяснил, что это происходит из-за стирания типа,Мокси просто не может понять, что мой объект - DebitAccount. Таким образом, он обрабатывает объект как строку. Как я могу заставить moxy понимать мой составной объект.

1 Ответ

2 голосов
/ 05 октября 2019

Вы должны связать класс DebitAccount с тем же XML-контекстом класса Message, используя аннотацию @XmlSeeAlso. Вы можете перечислить несколько классов с помощью фигурных скобок. При использовании универсальных типов (T или?) Необходимо указать, какие классы являются частью одного и того же контекста.

@XmlRootElement(name = "SYSMessage")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso({DebitAccount.class})
public class Message<T> { ... }
...