Umm.. another library issue getting in my way!
Well, Ive found a bypass annotating both container and contained classes with two adapters that have the conversion of XMLGregorianCalendarImpl to Date Id prefer a more standardized solution instead Thanks, Ivan De: Sergey Beryozkin [mailto:[email protected]] Enviado el: miércoles, 13 de abril de 2011 10:45 Para: Ivan Vitoria Sanchez CC: [email protected] Asunto: Re: Using Date instead of XmlGregorianCalendarImpl Hi Ivan It looks like a JAXB issue to me. I don't understand why referencing the adapter from a package-info.java for serializing the Date leads to that exception - CXF JAXBElementProvider is not involved at that stage. With JAX-WS, this customization (at the schema level) actually leads to adapters being generated and declarations added to the fields... The fact that the adapter is not activated when DateField is a list member seems like a bug to me, or may be you need to annotate the List field itself, not really sure Cheers, Sergey On Wed, Apr 13, 2011 at 9:12 AM, Ivan Vitoria Sanchez <[email protected]> wrote: Hi Sergey, Adding the adapter to the DateField class works if I send this class as a root of my payload. However, if other class has a DateField within a List (this is my real scenario) the adapter is not activated. If I add the adapter either to the package level or the field/property level, a JAXBException is thrown: Payload: JAXBException occurred : unexpected element (uri:"", local:"priority"). Expected elements are <{}genericBean>. unexpected element (uri:"", local:"priority"). Expected elements are <{}genericBean>. This is the payload, which works with XMLGregorioanCalendarImpl if I dont annotate any field/property with the adapter: <?xml version="1.0" encoding="utf-8" ?> <priority xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <fieldList> <field xsi:type="dateField"> <maxValue>2011-04-12T15:51:37.489+02:00</maxValue> <value xsi:type="xs:dateTime">2011-04-12T15:51:37.977+02:00</value> </field> </fieldList> </priority> Thanks for your patience :P Cheers! Ivan ¡De: Sergey Beryozkin [mailto:[email protected]] Enviado el: martes, 12 de abril de 2011 16:27 Para: Ivan Vitoria Sanchez CC: [email protected] Asunto: Re: Using Date instead of XmlGregorianCalendarImpl Hi Ivan I think you should then add the adapter to the DateField class itself, to the maxValue field, or add it to package-info.java, that should fix it thanks, Sergey On Tue, Apr 12, 2011 at 3:09 PM, Ivan Vitoria Sanchez <[email protected]> wrote: Hi Sergey, Its the same scenario that you have seen before in other JIRAs. At this time, Im trying to put/post data. There is no problem if my POJO (annotated with @XmlRootElement) has Date attributes: <workOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <completionDate>2015-02-27T17:08:46.300+01:00</completionDate> <!-- other tags omitted --> </workOrder> The problem comes when Ive this kind of entity: public abstract class InputField<T> extends GenericBean<InputField<T>> { T value; // getter & setter omitted } public class DateField extends InputField<Date> { private Date maxValue; // getter & setter omitted } And my XML looks like this: <dateField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <maxValue>2011-04-12T15:51:37.489+02:00</maxValue> <value xsi:type="xs:dateTime">2011-04-12T15:51:37.977+02:00</value> </dateField> It seems as if the Java instance becomes InputField<XMLGregorianCalendarImpl> instead of DateField. Hope this helps! Cheers, Ivan De: Sergey Beryozkin [mailto:[email protected]] Enviado el: martes, 12 de abril de 2011 15:16 Para: [email protected] CC: Ivan Vitoria Sanchez Asunto: Re: Using Date instead of XmlGregorianCalendarImpl Hi Ivan On Mon, Apr 11, 2011 at 3:19 PM, Ivan Vitoria Sanchez <[email protected]> wrote: Hi Sergey, The problem is that my method returns T, which is resolved by XMLGregorianCalendar instead of Date. Is this method a JAX-RS resource method ? Or is it part of the JAXB bean class ? I don't think returning a Date directly from a resource method would work with JAXBElementProvider Adding a @XmlJavaTypeAdapter to the method with a custom XmlAdapter causes a JAXBException (unexpected element). Can you provide more info please ? thanks, Sergey Ivan -----Mensaje original----- De: Sergey Beryozkin [mailto:[email protected]] Enviado el: lunes, 11 de abril de 2011 12:45 Para: [email protected] Asunto: Re: Using Date instead of XmlGregorianCalendarImpl Hi Ivan You have to add an adapter, please see http://blogs.sun.com/CoreJavaTechTips/entry/exchanging_data_with_xml_and for an example. JAXBElementProvider won't check package-level adapters, at the moment you'll probably need to add it to a method returning a Date. I'll see what has be improved for package-level adapters be checked too Cheers, Sergey On Mon, Apr 11, 2011 at 9:25 AM, Ivan Vitoria Sanchez <[email protected] > wrote: > Hello, > > > > Is there any way to configure (via Spring) the JAXB provider in order to > use > "Date" instead of "XmlGregorianCalendarImpl" in the JAX-RS server? I'm > having XmlGregorianCalendarImpl instances when using a class which extend > from a generic type class and specifying Date as the type in my subclass. > > > > Many thanks, > > > > Ivan > > > > -- Sergey Beryozkin Application Integration Division of Talend <http://www.talend.com> http://sberyozkin.blogspot.com -- Sergey Beryozkin Application Integration Division of Talend <http://www.talend.com> http://sberyozkin.blogspot.com
