users@jersey.java.net

[Jersey] Re: _at_XmlEnumValue is not recognized by Jackson

From: Jakub Podlesak <jakub.podlesak_at_oracle.com>
Date: Fri, 08 Apr 2011 13:55:06 +0200

Hi Pengfei,

I am a bit confused. You stated you turned the POJO mapping feature off.
Then Jackson JAX-RS provider won't be used and you can not expect anything
from it as the internal JAXB->JSON mapping is not leveraging the Jackson
features
described by Tatu. I think, and Tatu could confirm, if you switched the
POJO mapping
back on, and provided your own custom (Jackson) serialization implementation
for the class, that should work for you as requested.

~Jakub

On 04/08/2011 01:05 PM, Pengfei Di wrote:
> Hello Tatu,
>
> thank you for your hint. I just found the reason.
> I have to turn of the POJOMapping feature, otherwise the
> JacksonJsonProvider instead of the AbstractRootElementProvider will be
> used for JSON representation.
>
> Now what I get ist: {"myEnum": "2"}
> As you said, @XmlEnum is unfortunately not support.
> What is confusing is that there is no statement from the jackson web
> site, whether this annotation will be supported in the future or will
> not.
>
> Pengfei
>
> On 04/06/2011 06:38 PM, Tatu Saloranta wrote:
>> On Wed, Apr 6, 2011 at 7:00 AM, Pengfei
>> Di<pengfei.di_at_match2blue.com> wrote:
>>> Hello,
>>>
>>> I am trying to write a JAXB class, that constains a field of enum
>>> type, into
>>> JSON String. I tried with @XmlEnumValue annotation, but it doesn't take
>>> effect.
>>> The JAXB class looks like:
>>>
>>> @XmlRootElement
>>> public class MyClass {
>>>
>>> @XmlEnum(Integer.class)
>>> public enum MyEnum {
>>> @XmlEnumValue("1") INACTIVE,
>>> @XmlEnumValue("2") ACTIVE
>>> }
>>>
>>> private MyEnum myEnum;
>>>
>>> public getMyEnum(){
>>> return myEnum;
>>> }
>>> // setter
>>> ...
>>> }
>>>
>>> The expected JSON string is : {"myEnum":2}
>>> But what I get is : {"myEnum":"ACTIVE"}
>>>
>>> Does Jackson support this @XmlEnum annotation? or did I do something
>>> wrong?
>> Jackson does not support @XmlEnum -- enums will always be serialized
>> as Strings, unless custom serializer is used -- but
>> JaxbAnnotationIntrospector should support @XmlEnumValue for
>> customizing actual values used. So this looks like a bug, as long as
>> you have JAXB annotation support enabled (if not, you do need to
>> enable support).
>>
>> -+ Tatu +-
>
>