编组时如何防止JAXB绑定@XmlRootElement的超类方法?

Mat*_*att 10 java xml inheritance annotations jaxb

我有一个注释为@XmlRootElementwith的类@XmlAccessorType(XmlAccessType.NONE).我遇到的问题是,当我不希望它们被绑定时,超类的方法被绑定,并且无法更新类.我希望有一个注释可以放在根元素类上以防止这种情况发生.

例:

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Person extends NamedObject {

    @XmlElement
    public String getId() { ... }

}
Run Code Online (Sandbox Code Playgroud)

我希望,只有注释的方法@XmlElementPerson会被束缚和整理,但超类的方法都是约束,也是如此.结果XML然后有太多的信息.

如何在不必注释超类本身的情况下阻止超类的方法被绑定?

ben*_*ioT 6

根据这篇StackOverflow帖子: 我如何忽略超类?

JAX-B无法在不修改超类的情况下忽略超类.引用该帖子的相关部分:

Update2:我在java.net上发现 一个类似问题的线程.该线程产生了一个增强请求,该请求被标记为另一个问题的副本 ,从而产生了@XmlTransient注释.对这些错误报告的评论让我相信这在目前的规范中是不可能的.


iva*_*off 5

只需添加

@XmlAccessorType(XmlAccessType.NONE)
Run Code Online (Sandbox Code Playgroud)

在每个超类声明(和类本身)前面.

在你的情况下:

@XmlAccessorType(XmlAccessType.NONE)
class NamedObject{
    [ ... ]
}
Run Code Online (Sandbox Code Playgroud)

请记住,必须为每个超类完成此操作,在处理大型类依赖树时经常会忘记它.

当然,接口不需要任何JAXB注释.