Michael Lambert created CXF-5815:
------------------------------------

             Summary: cxf not unmarshalling parent elements
                 Key: CXF-5815
                 URL: https://issues.apache.org/jira/browse/CXF-5815
             Project: CXF
          Issue Type: Bug
          Components: JAXB Databinding
    Affects Versions: 2.7.11
         Environment: ubuntu 13.10, oracle java 1.7, tomcat 7.0
            Reporter: Michael Lambert


Base class elements are not being unmarshaled when passed into jax-rs service. 
For example if I pass:

{
  "id": "12",
  "name": "mike"
}

Where "id" comes from a base complexType:

<xsd:complexType name="entityType" abstract="true">
                <xsd:sequence>
                        <xsd:element name="id" type="tns:textType" 
minOccurs="0" maxOccurs="1" />
                </xsd:sequence>
</xsd:complexType>

and "name" comes from a complexType derived from the base type:

<xsd:complexType name="userDataType">
                <xsd:complexContent>
                        <xsd:extension base="common:entityType">
                                <xsd:sequence>
                                        <xsd:element name="name" 
type="xsd:string" minOccurs="0" maxOccurs="1" />
                                </xsd:sequence>
                        </xsd:extension>
                </xsd:complexContent>
</xsd:complexType>

The service method does not receive the "id" value when the object is 
unmarshalled:

@POST
public void get(UserDataType user) {
    assert user.getName() != null : "this passes";
    assert user.getId() != null : "this fails";
}

The elements that belong to the derived class (and not the base class) are 
passed properly (i.e. they are populated with data).

This happens only when I unmarshall json objects. It works fine with XML.

The project is on github 
(https://github.com/MacFlecknoe/service-repository-sample). The schema with the 
parent "entityType" is located at 
https://github.com/MacFlecknoe/service-repository-sample/blob/master/schema/src/main/resources/schema/common/common-v1.xsd.
  The schema which contains the derived type is located at: 
https://github.com/MacFlecknoe/service-repository-sample/blob/master/schema/src/main/resources/schema/entity/user-v1.xsd.
 The dto classes are generated in the project: 
https://github.com/MacFlecknoe/service-repository-sample/tree/master/user-data/artifacts.
 And the service itself (including the cxf configuration which is in beans.xml) 
is located here: 
https://github.com/MacFlecknoe/service-repository-sample/tree/master/user-data/service.
 The marshaller is configured in 
https://github.com/MacFlecknoe/service-repository-sample/blob/master/user-data/service/src/main/webapp/WEB-INF/beans.xml.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to