Search code examples
javaxmlinheritanceannotationsjaxb

How do I prevent JAXB from binding superclass methods of the @XmlRootElement when marshalling?


I have a class that is annotated as the @XmlRootElement with @XmlAccessorType(XmlAccessType.NONE). The problem that I am having is that the superclass's methods are being bound, when I do not want them to be bound, and cannot update the class. I am hoping there is an annotation that I can put on the root element class to prevent this from happening.

Example:

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

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

}

I would expect that only the methods annotated @XmlElement on Person would be bound and marshalled, but the superclass's methods are all being bound, as well. The resulting XML then has too much information.

How do I prevent the superclass's methods from being bound without having to annotate the superclass, itself?


Solution

  • According to this StackOverflow post: How can I ignore a superclass?

    It is not possible with JAX-B to ignore the superclass without modifying the superclass. Quoting the relevant portion of that post:

    Update2: I found a thread on java.net for a similar problem. That thread resulted in an enhancement request, which was marked as a duplicate of another issue, which resulted in the @XmlTransient annotation. The comments on these bug reports lead me to believe this is impossible in the current spec.