[
https://issues.apache.org/jira/browse/CXF-5815?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14038784#comment-14038784
]
Michael Lambert commented on CXF-5815:
--------------------------------------
Turning off ignorenamespace and enabling namespaceMap within the JSONProvider
worked. Unfortunately I dont see how this could ever work without passing
namespaces. If I were to enable ignorenamespace and configure
inTransformElements to add namepaces to elements I presume the marshaller would
treat the added namespaces as part of the element name itself (as it was
configured to ignore the very thing I am adding).
There is an additional complication with simply adding namespaces to the
elements being passed in as well. If the json objects are to be used in
orchestrations and different prefixes are expected for the same namespace in
different REST services I will have to translate those prefixes before passing
parts of the original message on. I will either have to 1: carefully govern
those namespace prefixes to avoid overlap or 2: deal with the translation
headaches.
Are my assumptions correct?
Thanks Sergey!
> 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)