编组时如何避免 JAXB、MOXY 实现中的类型擦除?

How to avoid type erasue in JAXB, MOXY implementation while marshalling?

我必须编组以下 class ;

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

    @XmlPath("Personel")
    private Personel personel;

    @XmlPath("AccountType")
    private T accountType;

    ...

因此在生产中我设置了通用帐户类型 class 和一些名为 "DebitAccount" 的对象 我必须使用通用类型,因为 debitAccount 会更改很多次。

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

当我整理 class 消息时,我得到以下 xml 结果作为帐户类型; ... org.demo.blabla.DebitAccount@123123 ...

在借记账户中class;

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

    @XmlPath("ID")
    private String id;

    @XmlPath("Visa")
    private String visaNo;

我发现这是因为类型擦除而发生的。 Moxy就是不能简单的理解我的对象是DebitAccount。所以它将对象视为字符串。我怎样才能让 moxy 理解我的复合对象。

您必须使用 @XmlSeeAlso 注释将 DebitAccount class 绑定到 Message class 的相同 XML 上下文。您可以用花括号列出多个 classes。使用泛型类型(T 或 ?)时,您必须指定哪些 class 是同一上下文的一部分。

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