Rafael Salvador
Rafael Salvador

Reputation: 58

Deserialize Json object using Jackson library with Joda Datetime

I'm trying to use the Jackson library to deserialize a Json object and i'm having some trouble in the Joda Datetime format deserialization.

This code throws the following error:

Unable to resolve Lorg/joda/time/base/AbstractInstant; annotation class 1557

DataWrapper list = mapper.readValue(response, DataWrapper.class);

I already try to find something about this but nothing.

There is the complete code:

public class DataWrapper {
    public List<ScheduleEntry> data;
}

public static class ScheduleEntry {
    public long ID;
public DateTime StartDate;
public DateTime EndDate;
public String Description;
}

WebService callWebService = new WebService(SERVICE_URI);        
String response = callWebService.webInvoke("/GetScheduleEntrys", params);

ObjectMapper mapper = new ObjectMapper();

try
{    
    DataWrapper list = mapper.readValue(response, DataWrapper.class);

    List<ScheduleEntry> items = list.data;
}

WebService:

[OperationContract]
[WebInvoke(Method = "POST",
   UriTemplate = "GetScheduleEntrys",
   BodyStyle = WebMessageBodyStyle.WrappedRequest,
   ResponseFormat = WebMessageFormat.Json,
   RequestFormat = WebMessageFormat.Json)]
List<ScheduleEntry> GetScheduleEntrys(string Token);

JSON:

[{"Description":"Cliente José","EndDate":"/Date(1353319200000+0000)/","ID":0,"StartDate":"/Date(1353315600000+0000)/"},{"Description":"Cliente Carlos","EndDate":"/Date(1353348000000+0000)/","ID":0,"StartDate":"/Date(1353344400000+0000)/"},{"Description":"Cliente Pedro","EndDate":"/Date(1353513600000+0000)/","ID":0,"StartDate":"/Date(1353510000000+0000)/"},{"Description":"Cliente Marco","EndDate":"/Date(1353664800000+0000)/","ID":0,"StartDate":"/Date(1353661200000+0000)/"},{"Description":"Cliente José","EndDate":"/Date(1353319200000+0000)/","ID":0,"StartDate":"/Date(1353315600000+0000)/"},{"Description":"Cliente Carlos","EndDate":"/Date(1353348000000+0000)/","ID":0,"StartDate":"/Date(1353344400000+0000)/"},{"Description":"Cliente Pedro","EndDate":"/Date(1353513600000+0000)/","ID":0,"StartDate":"/Date(1353510000000+0000)/"},{"Description":"Cliente Marco","EndDate":"/Date(1353664800000+0000)/","ID":0,"StartDate":"/Date(1353661200000+0000)/"}]

Full log

01-03 17:39:24.700: E/dalvikvm(18494): Unable to resolve Lorg/joda/time/base/AbstractInstant; annotation class 1557 01-03 17:39:28.505: W/dalvikvm(18494): threadid=11: thread exiting with uncaught exception (group=0x40c4d1f8) 01-03 17:39:28.650: E/AndroidRuntime(18494): FATAL EXCEPTION: AsyncTask #1 01-03 17:39:28.650: E/AndroidRuntime(18494): java.lang.RuntimeException: An error occured while executing doInBackground() 01-03 17:39:28.650: E/AndroidRuntime(18494): at android.os.AsyncTask$3.done(AsyncTask.java:278) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.lang.Thread.run(Thread.java:856) 01-03 17:39:28.650: E/AndroidRuntime(18494): Caused by: java.lang.NoClassDefFoundError: org/joda/convert/ToString 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.lang.reflect.Method.getDeclaredAnnotations(Native Method) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:267) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.AnnotatedClass._addMixUnders(AnnotatedClass.java:999) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.AnnotatedClass._addMemberMethods(AnnotatedClass.java:610) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveMemberMethods(AnnotatedClass.java:421) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.AnnotatedClass.memberMethods(AnnotatedClass.java:243) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addMethods(POJOPropertiesCollector.java:442) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collect(POJOPropertiesCollector.java:232) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.collectProperties(BasicClassIntrospector.java:142) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forDeserialization(BasicClassIntrospector.java:81) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forDeserialization(BasicClassIntrospector.java:11) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.DeserializationConfig.introspect(DeserializationConfig.java:507) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:326) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:325) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:633) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:427) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:295) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:325) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:147) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:23) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:329) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:633) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:427) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:295) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(Deserialize

Upvotes: 1

Views: 1659

Answers (2)

StaxMan
StaxMan

Reputation: 116472

Exception would indicate that you are using incompatible Joda version (most likely an older version).

But looking at JSON, your date values are being serialized using some non-standard notation, so you will probably need to write custom handlers as well (or change serialization format).

Upvotes: 1

Srinivas
Srinivas

Reputation: 1790

Given the JSON you have, you need to have this statement in your mapper. DataWrapper.setData(mapper.readValue(response, new TypeReference<List<ScheduleEntry>>() { }));

This will not resolve the original issue that you are facing: Unable to resolve Lorg/joda/time/base/AbstractInstant; annotation class 1557

Upvotes: 0

Related Questions