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

问题描述 投票:0回答:1

我必须在下课后进行编组;

@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;

我发现这是由于类型擦除引起的。 Moxy不能简单地了解我的对象是DebitAccount。因此,它将对象视为字符串。如何使moxy了解我的复合对象。

xml soap jaxb moxy type-erasure
1个回答
0
投票

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

@XmlRootElement(name = "SYSMessage")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso({DebitAccount.class})
public class Message<T> { ... }
© www.soinside.com 2019 - 2024. All rights reserved.