[ 
https://issues.apache.org/jira/browse/CXF-5815?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14038647#comment-14038647
 ] 

Sergey Beryozkin commented on CXF-5815:
---------------------------------------

Right, the problem is to do with the lack of the schema information in the 
incoming JSON payload. I'm not even sure why the top level properties are 
populated in the "urn:healthmedia:schema:user:v1" namespace, I guess 
JAXBElement is lax enough but it does not let the properties in some other 
namespace be populated, it does not know that 'id' happens to be in 
"urn:healthmedia:schema:common:v1".
In XML case we have the namespace information available so I guess it helps.

This should work in a CXF to CXF case where JSONProvider adds  namespace 
prefixes but it will be a non-portable JSON.

In this case where JSONProvider is used I can only think of using the 
transformation approach, add an inTransformElements property which will map 
"id" to "{urn:healthmedia:schema:common:v1}id", and so on for all the 
"urn:healthmedia:schema:common:v1" elements, this is tedious but you have a 
limited set of properties in "urn:healthmedia:schema:common:v1" so it should 
work



> 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
>         Attachments: EntityType.java, UserDataType.java, beans.xml, 
> common-v1.xsd, schema-0.0.1-SNAPSHOT-sources.jar, schema-0.0.1-SNAPSHOT.jar, 
> user-data-artifacts-0.0.1-SNAPSHOT-sources.jar, 
> user-data-artifacts-0.0.1-SNAPSHOT.jar, 
> user-data-service-0.0.1-SNAPSHOT-sources.jar, 
> user-data-service-0.0.1-SNAPSHOT.war, user-v1.xsd
>
>
> 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