Is it possible to ignore a wrapper class during JAXB marshalling

java, jaxb, xml

Solution

You cannot achieve that in JAXB. Even if you would be able to serialize like this, using a XmlAdapter for example, it will be impossible to deserialize it.

Try this:

@XmlType(name = "root")
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.NONE)
public class Root {

    private ArrayList<Resource> resources = new ArrayList<Resource>();

    public void addResource(Resource resource) {
        resources.add(resource);
    }

    @XmlElementRefs(value = { @XmlElementRef(type = Element.class),
                              @XmlElementRef(type = ListType.class),
                              @XmlElementRef(type = FieldType.class) })
    public List<Object> getResourceFields() {
        List<Object> list = new ArrayList<Object>();
        for (Resource r : resources) {
            list.add(r.getElement());
            list.add(r.getFieldType());
            list.add(r.getListType());
        }
        return list;
    }
}

Basically `getRerourceFields` concatenates all the resources' fields in the same list. If you cannot change the `Root` class, this could be your `RootAdapter` and use it as @Biju suggested.

Problem

I'm trying to get JAXB to ignore a wrapper class during the Mashalling process, it makes sense to have this wrapper class in code, as it keep all related information together, however I need to get rid of it during the marshaling process. The following is the relevant code. ``` @XmlType(name = "root") @XmlRootElement(name = "root") public class Root { @XmlElementRef private List<Resource> resources = new ArrayList<>(); public void addResource(Resource resource) { resources.add(resource); } } @XmlRootElement(name = "", namespace = "") @XmlAccessorType(XmlAccessType.NONE) public class Resource { @XmlElementRef private Element element; @XmlElementRef private FieldType fieldType; @XmlElementRef private ListType listType; } ``` Root is the main object, and Resource is the wrapper object that I'd like not have a node created for. I still want the Element, FieldType and ListType within the Resource to be rendered however. This is what I currently have: ``` <root> <> <element name="resource1"/> <fieldType name="resource1--type"> </fieldType> <listType name="resource--list"> </listType> </> <> <element name="resource2"/> <fieldType name="resource2--type"> </fieldType> <listType name="resource2--list"> </listType> </> </root> ``` What I'd like to achieve is the following: ``` <root> <element name="resource1"/> <fieldType name="resource1--type"> </fieldType> <listType name="resource--list"> </listType> <element name="resource2"/> <fieldType name="resource2--type"> </fieldType> <listType name="resource2--list"> </listType> </root> ``` I don't know if it's possible, but any help would be appreciated. Thanks.

Original source