2013-10-11 156 views
3

的兩個屬性還是有一些問題,JAXB!類具有相同的名稱「則actionsList」

其實昨天我改變了我的代碼的方式找到問題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到b uild我的XML文件

回答

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>(); 

更多信息

+1

布萊斯謝謝! –