Hi
I can see that Wolfgang Laun actually replied, but it appears that he sees
the output being correct.
I have asked for some additional clarifications, but in meantime, if you do
need that specific output being produced, then we might be able to extend
JAXBElementProvider to wrap certain types into JAXBElements which will
result in the output you need. Lets see what Wolfgang replies and if says
'not possible' then I'll give it a try
Cheers, Sergey
Sergey Beryozkin wrote:
>
> Hi,
>
> Thanks for posting it. Actually, you'll likely get a faster response if
> you ask on the jaxb-users list, as opposed to jaxb-dev. If you do post to
> the users as well, then please consider dropping my response as it makes
> it a bit more difficult for JAXB experts out there to see what the real
> issue is, just ask them what is the way to force JAXB to introduce
> xsi:type into a serialized XML fragment for DerivedType, given the
> original schema
>
> cheers, Sergey
>
>
>
> Qzpmwo wrote:
>>
>> Hi Sergey,
>>
>> Thanks a lot for so fast response and your investigation. I have posted
>> my initial email and your response to jaxb nabble.
>>
>>
>>
>>
>> Sergey Beryozkin wrote:
>>>
>>> Hi
>>>
>>> I've experimented a bit and I've managed to have a test producing the
>>> expected data, but only when using an explicit JAXBElement, this one
>>>
>>> @Test
>>> public void testWriteDerivedTypeJaxbElement() throws Exception {
>>> JAXBElementProvider provider = new JAXBElementProvider();
>>> Method m = CollectionsResource.class.getMethod("getBaseJaxb",
>>> new Class[0]);
>>> DerivedType derived = new DerivedType();
>>> JAXBElement<BaseType> jaxb = new
>>> JAXBElement<BaseType>(_Base_QNAME, BaseType.class, null, derived);
>>> ByteArrayOutputStream bos = new ByteArrayOutputStream();
>>> provider.writeTo(jaxb, m.getReturnType(),
>>> m.getGenericReturnType(),
>>> new Annotation[0], MediaType.TEXT_XML_TYPE, new
>>> MetadataMap<String, Object>(), bos);
>>> String s = bos.toString();
>>> System.out.println(s);
>>>
>>> }
>>>
>>> produces
>>>
>>> <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:base
>>> xmlns:ns2="http://www.cisco.com/dms/xml/ns/dsmCommonService"
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> xsi:type="ns2:DerivedType"/>
>>>
>>> I'm presuming you have a method like this one :
>>>
>>>
>>> public class RootResource {
>>> @GET
>>> public BaseType getType() { return new DerivedType(); }
>>> }
>>>
>>> I'm not sure why JAXB chooses to serialize it as
>>>
>>> <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:derivedType
>>> xmlns:ns2="http://www.cisco.com/dms/xml/ns/dsmCommonService"/>
>>>
>>> in this case, given that ObjectFactory has a method returning
>>> JAXBElement<BaseType>. I tried to force an ObjectFactory method
>>> returning JAXBElement<BaseType> be used, I removed @XmlRootElement on
>>> BaseType but it didn't make any difference. Removing @XmlRootElement on
>>> DerivedType causes a JAXB failure - though ObjectFactory has a method
>>> returning JAXBElement<DerivedType>.
>>>
>>> Can you please post a question to the JAXB users list ? I'd be
>>> interested to see what they reply. Unless our resident experts (Dan,
>>> Benson) can help ?
>>>
>>> thanks, Sergey
>>>
>>
>>
>
>
--
View this message in context:
http://www.nabble.com/Possible-problem-with-JAXB-marshalling-tp24549727p24586518.html
Sent from the cxf-user mailing list archive at Nabble.com.