Hi OK, it's done now on the trunk/2.2.3-SNAPSHOT. Hopefully a 2.2.3 release will be done next week. You'd just need to explicitly register JAXBElementProvider and set a list property with a list of class names whose instances need to be wrapped prior to serialization, here's a fragment :
<beans xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd ..."> <util:list id="jaxbElementClassNames"> <value>org.apache.cxf.systest.jaxrs.BaseType</value> </util:list> <jaxrs:server> <jaxrs:providers> <ref bean="jaxbProvider"/> <jaxrs:providers> </jaxrs:server> <bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider"> <property name="jaxbElementClassNames" ref="jaxbElementClassNames"/> </bean> </beans> In meantime, till the release is done, you can register a response JAXRS filter and wrap the BaseType instance in JAXBElement, it is a bit hacky, but you can do something like public class JAXBElementWrapper implements ResponseHandler { private final static Method m; static { m = SomeClass.getMethod("get", new Class[0]); } public Response handleResponse(Message m, OperationResourceInfo ori, Response response) { if (BaseType.class == ori.getMethodToInvoke().getReturnType()) { // this is a hacky bit OperationResourceInfo ori2 = new OperationResourceInfo(m, ori.getAnnotatedMethod(), ori.getClassResourceInfo()); message.getExchange().put(OperationResourceInfo.class, ori2); Object instance = MessageContentsList.getContentsList(message).get(0); // convert as Wolfgang suggested or check JAXBElementProvider source JAXBElement el = convertToJAXBElement(instance); message.setContent(new MessageContentsList(el)); } return null; } private static class SomeClass { public JAXBElement<BaseType> get(); } } Also, Wolfgang suggested some additional schema updates - not sure if it will work for you thanks, Sergey Qzpmwo wrote: > > Hi, > > I'm having a strange problem with CXF RESTful service marsahlling base and > derived xsd types. > > XSD: > > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" > xmlns="http://www.cisco.com/dms/xml/ns/dsmCommonService" > targetNamespace="http://www.cisco.com/dms/xml/ns/dsmCommonService" > elementFormDefault="unqualified" jaxb:version="2.0"> > > <xs:complexType name="BaseType"> > <xs:sequence> > </xs:sequence> > </xs:complexType> > > <xs:complexType name="DerivedType"> > <xs:complexContent> > <xs:extension base="BaseType"> > <xs:sequence> > </xs:sequence> > </xs:extension> > </xs:complexContent> > </xs:complexType> > > <xs:complexType name="ListType"> > <xs:sequence> > <xs:element name="item" type="BaseType" minOccurs="0" > maxOccurs="unbounded" /> > </xs:sequence> > </xs:complexType> > > <xs:element name="base" type="BaseType" /> > <xs:element name="derived" type="DerivedType" /> > <xs:element name="list" type="ListType" /> > > </xs:schema> > > xjc has been used to jenerate java code from xsd. After that: > > 1) @XmlSeeAlso pointing to DerivedType class and @XmlRootElement > annotations have been added to BaseType java class code > 2) @XmlRootElement has been added to DerivedType java class code > 3) @XmlRootElement has been added to ListType java class code > > When my CXF rest service returns list of the Derived objects it produces > xml > correctly: > > <list> > <base xsi:type="DerivedType">...</base> > ... > <base xsi:type="DerivedType">...</base> > </list> > > But when I'm requesting 1 instance of the Derived object XML is wrong (as > I > understand) > > <derived>...</derived> > > Since I did not specify substitution group in my opinion xml should be > like > in list: > > <base xsi:type="DerivedType">...</base> > > Could you please clarify the issue for me and may be help me to solve this > problem. > > Forgot to mention that I'm using CXF 2.2 > > Thanks in advance > --- Karen > > -- View this message in context: http://www.nabble.com/Possible-problem-with-JAXB-marshalling-tp24549727p24591197.html Sent from the cxf-user mailing list archive at Nabble.com.
