3

jaxb にはまだ問題があります。

実際、昨日、jaxbとインターフェースの問題を見つける方法でコードを変更しました。それ以来、同じ名前の2つのプロパティでこの問題が発生しています...

探しましたが、@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 を追加すると、2 つのエラーが発生します。1 つは jaxb でインターフェイスを処理できず、もう 1 つは同じ名前です。

@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 に答える