"deserialize as a Map, and if it fails, it try to deserialize as a String (in the next statements)."
--> But why a String for the last attempt of deserialization ? What will happen if I send a List<Integer> as a value for the AngularObject ? After all, by looking at the definition of an AngularObject, the value can be anything (type parameter T), not necessarily a String right ? public class AngularObject<T> { private String name; private T object; And yes, I'm going to review your resource pool PR, it looks promising On Wed, Jan 27, 2016 at 11:01 PM, moon soo Lee <m...@apache.org> wrote: > Hi, > > When deserializing AngularObject, RemoteInterpreterServer first try to > deserialize as a Map, and if it fails, it try to deserialize as a String > (in the next statements). > > So the exception should be muted, as it's just expected exception while > guessing the type. > > I've made commit for muting this expected exception > > https://github.com/Leemoonsoo/incubator-zeppelin/commit/0af0cd03236faac63cae17cfc4a4d9b4f76692ca > and the commit is included in > https://github.com/apache/incubator-zeppelin/pull/655 > > I think PR-655 is ready to be merged. DuyHai Doan, could you review the PR? > > Thanks, > moon > > On Wed, Jan 27, 2016 at 11:41 PM DuyHai Doan <doanduy...@gmail.com> wrote: > > > I encountered the following exception when pushing an AngularObject to a > > remote interpreter: > > > > > > INFO [2016-01-27 15:25:41,433] ({pool-1-thread-4} > > RemoteInterpreterServer.java[angularObjectAdd]:598) - Exception in > > RemoteInterpreterServer while deserializing "James BOND" in > > angularObjectAdd, nolock > > com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: > > Expected BEGIN_OBJECT but was STRING at line 1 column 13 > > at com.google.gson.Gson.fromJson(Gson.java:802) > > at com.google.gson.Gson.fromJson(Gson.java:757) > > at com.google.gson.Gson.fromJson(Gson.java:706) > > at > > > > > org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer.angularObjectAdd(RemoteInterpreterServer.java:593) > > at > > > > > org.apache.zeppelin.interpreter.thrift.RemoteInterpreterService$Processor$angularObjectAdd.getResult(RemoteInterpreterService.java:1289) > > at > > > > > org.apache.zeppelin.interpreter.thrift.RemoteInterpreterService$Processor$angularObjectAdd.getResult(RemoteInterpreterService.java:1274) > > at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39) > > at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) > > at > > > > > org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:285) > > at > > > > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > > at > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > > at java.lang.Thread.run(Thread.java:745) > > Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was > > STRING at line 1 column 13 > > at com.google.gson.stream.JsonReader.expect(JsonReader.java:339) > > at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:322) > > at > > > > > com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:184) > > at > > > > > com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:146) > > at com.google.gson.Gson.fromJson(Gson.java:791) > > > > > > Looking into the source code of RemoteInterpreterServer : > > > > @Override > > public void angularObjectAdd(String name, String noteId, String > > paragraphId, String object) { > > > > try { > > value = gson.fromJson(object, > > new TypeToken<Map<String, Object>>() { > > }.getType()); > > } catch (Exception e) { > > // nolock > > logger.info(String.format("Exception in RemoteInterpreterServer > > while > > deserializing %s " + > > "in angularObjectAdd, nolock", object), e); > > } > > } > > > > The issue is because we try to tell GSON to deserialize the object and we > > expect the type Map<String, Object>. There is no reason that the angular > > object value is a map. It can be anything, a String, a Double, a Long > .... > > > > In my example, in the exception stack trace, the value is just a plain > > String "James BOND" > > > > Should I fill a JIRA and push a quick fix for that ? > > >