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 ? >