如何使用JAXB忽略绑定到XML的字段 [英] How to ignore a field from binding to XML with JAXB
问题描述
我有一个看起来像这样的简单类
I have a simple class that looks like this
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。
But Observable is an interface so I get an exception because JAXB can'ty handle interfaces. I tried figuring out how to ignore the field with the ArrayList<Observer>
so it wont be exported to xml.
我尝试使用 @XmlTransient
注释,但我得到以下结果 javax.xml.bind.UnmarshalException:意外元素(uri:,本地: 目的)。预期元素是< {}目的>
I tried using the @XmlTransient
annotation but the I get the following eception javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"purpose"). Expected elements are <{}Purpose>
这种情况发生在Unmarshalling但我想要Marshall那个类
This happens when Unmarshalling but I want to Marshall that class too
示例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包含目的
不是目的
所以更改 @XmlRootElement(name =Purpose)
to
Your xml contains purpose
not Purpose
so change @XmlRootElement(name = "Purpose")
to
@XmlRootElement(name = "purpose")
并在像这样的观察者上添加 @XmlTransient
And add @XmlTransient
on observers like this
@XmlTransient
private ArrayList<Observer> observers;
这篇关于如何使用JAXB忽略绑定到XML的字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!