I'm using 2.1-RC1
I have a resource interface with a get method which returns an enum: DrState.
I have included a callback signature in the interface:
@Get("json")
DrState getDrState();
@Get("json")
void getDrState( Result<DrState> callback );
When I use the synchronous version, everything works. If I use the callback
version, I see an exception logged and onSuccess() is called with null.
Running in the debugger and looking at the code, I see in
org.restlet.engine.resource.ClientInvocationHandler<T>:
result = getClientResource().toObject(
response.getEntity(),
actualType.getClass());
At this point, actualType is correctly the class of my enum. However,
actualType.getClass() is Class.class.
Based on my (limited) reading of the code, I think this should be passing
actualType instead of actualType.getClass().
The logged stack trace:
Unable to parse the object with Jackson.
org.codehaus.jackson.map.JsonMappingException: Can not construct instance of
java.lang.Class, problem: NEUTRAL
at [Source: org.restlet.engine.io.NbChannelInputStream@627b5c; line: 1,
column: 1]
at
org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:169)
at
org.codehaus.jackson.map.deser.StdDeserializationContext.instantiationException(StdDeserializationContext.java:204)
at
org.codehaus.jackson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:714)
at
org.codehaus.jackson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:685)
at
org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2395)
at
org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1641)
at
org.restlet.ext.jackson.JacksonRepresentation.getObject(JacksonRepresentation.java:136)
at
org.restlet.ext.jackson.JacksonConverter.toObject(JacksonConverter.java:163)
at
org.restlet.service.ConverterService.toObject(ConverterService.java:164)
at org.restlet.resource.Resource.toObject(Resource.java:715)
at
org.restlet.engine.resource.ClientInvocationHandler$1.handle(ClientInvocationHandler.java:163)
at
org.restlet.engine.connector.ClientConnectionHelper.doHandleInbound(ClientConnectionHelper.java:217)
at org.restlet.engine.connector.BaseHelper$2.run(BaseHelper.java:585)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: NEUTRAL
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at
org.codehaus.jackson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:712)
... 13 more
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2880706