JAXB动态XML根类名称

时间:2018-12-10 09:09:48

标签: jaxb marshalling unmarshalling xmlroot

我在Java中有User类。当我想取消封送时,我得到带有<UserIn>根元素的xml,当我要进行封送时,我应该将<UserOut>成为XML根元素。如果我提供@XmlRootElement("UserIn"),则它不是动态的,并且始终是UserIn根。有什么办法可以在类上做动态根元素吗?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以创建两个扩展您的User类的类,然后根据您是否在解组中进行编组来使用特定的子类。

例如,对于一个类User:

public class User {

    @XmlElement
    private String value;

    public User() { }

    public User(String value) {
        this.value = value;
    }
}

您可以拥有UserIn:

@XmlRootElement(name = "UserIn")
@XmlAccessorType(XmlAccessType.FIELD)
public class UserIn extends User {

    public UserIn() { }

    public UserIn(String value) {
        super(value);
    }
}

和UserOut:

@XmlRootElement(name = "UserOut")
@XmlAccessorType(XmlAccessType.FIELD)
public class UserOut extends User {

    public UserOut() { }

    public UserOut(String value) {
        super(value);
    }
}

在需要的地方提供适当的类,您将使其与所需的输入或输出配合使用。