FasterXML / jackson-modules-base

Uber-project for foundational modules of Jackson that build directly on core components but nothing else; not including data format or datatype modules
Apache License 2.0
167 stars 77 forks source link

jackson-module-jaxb-annotations: can't use both @XmlElementWrapper and @XmlElement #213

Open alexlitovsky opened 1 year ago

alexlitovsky commented 1 year ago

Migrating an application from resteasy-jettison-provider to resteasy-jackson2-provider, but need to retain the JSON format. Can't configure JaxbAnnotationIntrospector to properly handle the case of @XmlElementWrapper + @XmlElementtogether. Depending on MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME, it either uses one or the other, but not both. Jettison's default behavior is to use both.

Example:

@XmlRootElement(name = "Parent")
public class Parent {

    private List<Child> children = new LinkedList<>();

    @XmlElementWrapper(name = "Children")
    @XmlElement(name = "Child")
    public List<Child> getChildren() {
        return children;
    }

    public void setChildren(List<Child> children) {
        this.children = children;
    }
}

Using Jettison:

{"Parent":{"Children":{"Child":[{"Value":1},{"Value":2}]}}}

Using JaxbAnnotationIntrospector with MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME enabled:

{"Parent":{"Children":[{"Value":"1"},{"Value":"2"}]}}

Using JaxbAnnotationIntrospector with MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME disabled:

{"Parent":{"Child":[{"Value":"1"},{"Value":"2"}]}}

Test: https://bitbucket.org/alexlitovsky1/jaxb-annotations-bug/