如何使用JAXB忽略绑定到XML的字段 [英] How to ignore a field from binding to XML with JAXB

查看:976
本文介绍了如何使用JAXB忽略绑定到XML的字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个看起来像这样的简单类

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆