3

jaxb 仍然有一些问题!

事实上,昨天我改变了我的代码,以找到 jaxb 和接口的问题,因为我在同名的两个属性上遇到了这个问题......

我找了,但我有一个特例 @XmlElements{...}。

如果我这样写,它可以工作

@XmlAccessorType(XmlAccessType.FIELD)
public class Event {

String name;
@XmlElements(value = {
        @XmlElement(type=FTPSend.class),
        @XmlElement(type=SFTPSend.class),
        @XmlElement(type=MailSend.class),
        @XmlElement(type=ServerToServerSend.class)
    })
ArrayList<IAction> actionsList = new ArrayList<IAction>();

public Event(){

}

public Event(String name) {
    super();
    this.name = name;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public ArrayList<IAction> getActionsList() {
    return actionsList;
}

public void setActionsList(ArrayList<IAction> actionsList) {
    this.actionsList = actionsList;
}

}

但是如果我添加@XmlElement,我会遇到两个错误,一个是 jaxb 无法处理接口,另一个是同名

@XmlAccessorType(XmlAccessType.FIELD)
public class Event {

String name;
@XmlElements(value = {
        @XmlElement(type=FTPSend.class),
        @XmlElement(type=SFTPSend.class),
        @XmlElement(type=MailSend.class),
        @XmlElement(type=ServerToServerSend.class)
    })
ArrayList<IAction> actionsList = new ArrayList<IAction>();

public Event(){

}

public Event(String name) {
    super();
    this.name = name;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

**@XmlElement**
public ArrayList<IAction> getActionsList() {
    return actionsList;
}

public void setActionsList(ArrayList<IAction> actionsList) {
    this.actionsList = actionsList;
}

}

不幸的是,我需要添加 @XmlElement 来构建我的 xml 文件

4

1 回答 1

3

如果您注释一个字段并且它是相应的属性,您将得到一个异常,您只需要做一个或另一个。

对于解组您的 JAXB 实现,将需要一些关于解组的正确类的指示。下面我为每个类分配了一个唯一的元素名称。此映射对应于 XML 模式中的选择结构。

@XmlElements(value = {
    @XmlElement(type=FTPSend.class, name="FTPSend"),
    @XmlElement(type=SFTPSend.class, name="SFTPSend"),
    @XmlElement(type=MailSend.class, name="MailSend"),
    @XmlElement(type=ServerToServerSend.class, name="ServerToServerSend")
})
ArrayList<IAction> actionsList = new ArrayList<IAction>();

了解更多信息

于 2013-10-11T12:11:25.087 回答