簡體   English   中英

如何忽略使用JAXB綁定到XML的字段

[英]How to ignore a field from binding to XML with JAXB

我有一個像這樣的簡單班級

    import nl.hu.pf.coproco.model.Observeable;

    @XmlRootElement (name = "Purpose")
    @XmlAccessorType (XmlAccessType.FIELD)
    public class Purpose implements Observeable{
        private String name;
        private ArrayList<Observer> observers;

        @XmlElement (name = "subPurpose")
        private ArrayList<Purpose> subPurposes;

        //methods
    }

但是Observable是一個接口,所以我得到一個例外,因為JAXB無法處理接口。 我試圖弄清楚如何使用ArrayList<Observer>忽略該字段,因此不會將其導出到xml。

我嘗試使用@XmlTransient批注,但是得到以下接收信號javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"purpose"). Expected elements are <{}Purpose> javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"purpose"). Expected elements are <{}Purpose>

取消編組但我也想編組該類時發生這種情況

樣本XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purpose>
    <name>All Purposes</name>
    <subPurpose>
        <name>Creational</name>
    </subPurpose>
    <subPurpose>
        <name>Structural</name>
    </subPurpose>
    <subPurpose>
        <name>Behavioral</name>
        <subPurpose>
            <name>Behavioral 1</name>
        </subPurpose>
        <subPurpose>
            <name>Behavioral 2</name>
        </subPurpose>
    </subPurpose>
</purpose>

接口Observable看起來像這樣:

public interface Observeable {
    public void registerObserver(Observer o);
    public void removeObserver(Observer o);
    public void notifyObservers(Object o, String arg);
}

您的xml包含purpose而非Purpose因此將@XmlRootElement(name = "Purpose")更改為

@XmlRootElement(name = "purpose")

並在這樣的觀察者上添加@XmlTransient

@XmlTransient
private ArrayList<Observer> observers;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM