You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mo...@apache.org on 2015/08/24 04:47:09 UTC

incubator-zeppelin git commit: Add argument check for option and properties to protect from NPE

Repository: incubator-zeppelin
Updated Branches:
  refs/heads/master 7ba743eec -> 7ddf810ef


Add argument check for option and properties to protect from NPE

Here is the repro steps:
    1) run zeppelin
    2) using some REST client call the update settings with the following JSON
    {"id":"2AVJY1M6F","name":"md","group":"md","properties":{"propname":"propvalue"},"interpreterGroup":[{"class":"org.apache.zeppelin.markdown.Markdown","name":"md"}]}
    - NOTE that I intentionally omitted the option part
    3) Now look at the log file:
    INFO [2015-08-19 09:14:13,106] ({qtp2095490653-44}
    InterpreterRestApi.java[updateSetting]:111) - Update interpreterSetting
    2AVGGNEKP
     WARN [2015-08-19 09:14:13,121] ({qtp2095490653-44}
    LogUtils.java[doLog]:452) - Application {
    http://rest.zeppelin.apache.org/}NotebookRestApi has thrown exception,
    unwinding now
    org.apache.cxf.interceptor.Fault
    at
    org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:192)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100)
    at
    org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:57)
    at
    org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:93)
    at
    org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
    at
    org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at
    org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
    at
    org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
    at
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
    at
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
    at
    org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPut(AbstractHTTPServlet.java:223)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:598)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
    at
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1496)
    at org.apache.zeppelin.server.CorsFilter.doFilter(CorsFilter.java:53)
    at
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1467)
    at
    org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
    at
    org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229)
    at
    org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
    at
    org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at
    org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
    at
    org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at
    org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
    at
    org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:370)
    at
    org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
    at
    org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)
    at
    org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
    at
    org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
    at
    org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667)
    at
    org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
    at
    org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at
    org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.NullPointerException
    at
    org.apache.zeppelin.interpreter.InterpreterFactory.createInterpreterGroup(InterpreterFactory.java:361)
    at
    org.apache.zeppelin.interpreter.InterpreterFactory.setPropertyAndRestart(InterpreterFactory.java:515)
    at
    org.apache.zeppelin.rest.InterpreterRestApi.updateSetting(InterpreterRestApi.java:116)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
    ... 40 more
     WARN [2015-08-19 09:14:13,239] ({qtp2095490653-44}
    PhaseInterceptorChain.java[unwind]:444) - Exception in handleFault on
    interceptor
    org.apache.cxf.binding.xml.interceptor.XMLFaultOutInterceptor51637100
    org.apache.cxf.interceptor.Fault
    at
    org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:192)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100)
    at
    org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:57)
    at
    org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:93)
    at
    org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
    at
    org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at
    org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
    at
    org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
    at
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
    at
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
    at
    org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPut(AbstractHTTPServlet.java:223)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:598)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
    at
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1496)
    at org.apache.zeppelin.server.CorsFilter.doFilter(CorsFilter.java:53)
    at
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1467)
    at
    org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
    at
    org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229)
    at
    org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
    at
    org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at
    org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
    at
    org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at
    org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
    at
    org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:370)
    at
    org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
    at
    org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)
    at
    org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
    at
    org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
    at
    org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667)
    at
    org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
    at
    org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at
    org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.NullPointerException
    at
    org.apache.zeppelin.interpreter.InterpreterFactory.createInterpreterGroup(InterpreterFactory.java:361)
    at
    org.apache.zeppelin.interpreter.InterpreterFactory.setPropertyAndRestart(InterpreterFactory.java:515)
    at
    org.apache.zeppelin.rest.InterpreterRestApi.updateSetting(InterpreterRestApi.java:116)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
    ... 40 more
    ERROR [2015-08-19 09:14:13,242] ({qtp2095490653-44}
    AbstractFaultChainInitiatorObserver.java[onMessage]:115) - Error occurred
    during error handling, give up!
    org.apache.cxf.interceptor.Fault
    at
    org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:192)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100)
    at
    org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:57)
    at
    org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:93)
    at
    org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
    at
    org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at
    org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
    at
    org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
    at
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
    at
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
    at
    org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPut(AbstractHTTPServlet.java:223)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:598)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
    at
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1496)
    at org.apache.zeppelin.server.CorsFilter.doFilter(CorsFilter.java:53)
    at
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1467)
    at
    org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
    at
    org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229)
    at
    org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
    at
    org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at
    org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
    at
    org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at
    org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
    at
    org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:370)
    at
    org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
    at
    org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)
    at
    org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
    at
    org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
    at
    org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667)
    at
    org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
    at
    org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at
    org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.NullPointerException
    at
    org.apache.zeppelin.interpreter.InterpreterFactory.createInterpreterGroup(InterpreterFactory.java:361)
    at
    org.apache.zeppelin.interpreter.InterpreterFactory.setPropertyAndRestart(InterpreterFactory.java:515)
    at
    org.apache.zeppelin.rest.InterpreterRestApi.updateSetting(InterpreterRestApi.java:116)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
    ... 40 more
     WARN [2015-08-19 09:14:13,245] ({qtp2095490653-44}
    ServletHandler.java[doHandle]:561) - /api/interpreter/setting/2AVGGNEKP
    java.lang.RuntimeException: org.apache.cxf.interceptor.Fault
    at
    org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116)
    at
    org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:333)
    at
    org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at
    org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
    at
    org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
    at
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
    at
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
    at
    org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPut(AbstractHTTPServlet.java:223)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:598)
    at
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
    at
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1496)
    at org.apache.zeppelin.server.CorsFilter.doFilter(CorsFilter.java:53)
    at
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1467)
    at
    org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
    at
    org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229)
    at
    org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
    at
    org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at
    org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
    at
    org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at
    org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
    at
    org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:370)
    at
    org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
    at
    org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)
    at
    org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
    at
    org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
    at
    org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667)
    at
    org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
    at
    org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at
    org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.apache.cxf.interceptor.Fault
    at
    org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:192)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100)
    at
    org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:57)
    at
    org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:93)
    at
    org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
    ... 35 more
    Caused by:* java.lang.NullPointerException*
    at
    org.apache.zeppelin.interpreter.InterpreterFactory.createInterpreterGroup(InterpreterFactory.java:361)
    at
    org.apache.zeppelin.interpreter.InterpreterFactory.setPropertyAndRestart(InterpreterFactory.java:515)
    at
    org.apache.zeppelin.rest.InterpreterRestApi.updateSetting(InterpreterRestApi.java:116)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)
    at
    org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
    ... 40 more

    This is because we are trying to access the option variable when it is NULL
This PR fixes that and add test to check it.
This replace PR 223.
Ready for review

Author: eranwitkon <go...@gmail.com>

Closes #241 from eranwitkon/255 and squashes the following commits:

b463100 [eranwitkon] Remove unit test
6075a66 [eranwitkon] fix CI problem
1aa806f [eranwitkon] Fix CI problem
da0717f [eranwitkon] Fix getRegisteredInterpreterList, avoid adding null to the list when class name from config is not registered (only interpreters available on the disk (has interpreter folder) are registered. findRegisteredInterpreterByClassName return null when class name not found. (cherry picked from commit 6724e54)
f863871 [eranwitkon] Add argument check for option and properties to protect from NPE (cherry picked from commit 39ac2c1)


Project: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/commit/7ddf810e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/tree/7ddf810e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/diff/7ddf810e

Branch: refs/heads/master
Commit: 7ddf810ef802cc449c1f5cd6e9664883f1a5477e
Parents: 7ba743e
Author: eranwitkon <go...@gmail.com>
Authored: Sat Aug 22 10:18:25 2015 +0300
Committer: Lee moon soo <mo...@apache.org>
Committed: Sun Aug 23 19:46:58 2015 -0700

----------------------------------------------------------------------
 zeppelin-web/test/karma.conf.js                 |  3 ++-
 .../interpreter/InterpreterFactory.java         | 18 ++++++++++++++----
 .../interpreter/InterpreterFactoryTest.java     | 20 +++++++++++++++++++-
 3 files changed, 35 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/7ddf810e/zeppelin-web/test/karma.conf.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/test/karma.conf.js b/zeppelin-web/test/karma.conf.js
index e85abdb..ffbc996 100644
--- a/zeppelin-web/test/karma.conf.js
+++ b/zeppelin-web/test/karma.conf.js
@@ -35,9 +35,10 @@ module.exports = function(config) {
       'bower_components/ace-builds/src-noconflict/mode-scala.js',
       'bower_components/ace-builds/src-noconflict/mode-sql.js',
       'bower_components/ace-builds/src-noconflict/mode-markdown.js',
+      'bower_components/ace-builds/src-noconflict/mode-sh.js',
       'bower_components/ace-builds/src-noconflict/keybinding-emacs.js',
       'bower_components/ace-builds/src-noconflict/ext-language_tools.js',
-      'bower_components/ace-builds/src-noconflict/theme-github.js',
+      'bower_components/ace-builds/src-noconflict/theme-chrome.js',
       'bower_components/angular-ui-ace/ui-ace.js',
       'bower_components/jquery.scrollTo/jquery.scrollTo.js',
       'bower_components/d3/d3.js',

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/7ddf810e/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java
index f753d5e..8a1d6ff 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java
@@ -41,6 +41,7 @@ import java.util.Properties;
 import java.util.Set;
 
 import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.NullArgumentException;
 import org.apache.zeppelin.conf.ZeppelinConfiguration;
 import org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars;
 import org.apache.zeppelin.display.AngularObjectRegistry;
@@ -314,9 +315,11 @@ public class InterpreterFactory {
     List<RegisteredInterpreter> registeredInterpreters = new LinkedList<RegisteredInterpreter>();
 
     for (String className : interpreterClassList) {
-      registeredInterpreters.add(Interpreter.findRegisteredInterpreterByClassName(className));
+      RegisteredInterpreter ri = Interpreter.findRegisteredInterpreterByClassName(className);
+      if (ri != null) {
+        registeredInterpreters.add(ri);
+      }
     }
-
     return registeredInterpreters;
   }
 
@@ -353,7 +356,14 @@ public class InterpreterFactory {
       String groupName,
       InterpreterOption option,
       Properties properties)
-      throws InterpreterException {
+      throws InterpreterException , NullArgumentException {
+
+    //When called from REST API without option we receive NPE
+    if (option == null )
+      throw new NullArgumentException("option");
+    //When called from REST API without option we receive NPE
+    if (properties == null )
+      throw new NullArgumentException("properties");
 
     AngularObjectRegistry angularObjectRegistry;
 
@@ -589,7 +599,7 @@ public class InterpreterFactory {
           separateCL = false;
         }
       } catch (Exception e) {
-        // nothing to do.
+        logger.error("exception checking server classloader driver" , e);
       }
 
       URLClassLoader cl;

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/7ddf810e/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java
index 585880b..6a69b83 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java
@@ -27,6 +27,7 @@ import java.io.IOException;
 import java.util.List;
 import java.util.Properties;
 
+import org.apache.commons.lang.NullArgumentException;
 import org.apache.zeppelin.conf.ZeppelinConfiguration;
 import org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars;
 import org.apache.zeppelin.interpreter.mock.MockInterpreter1;
@@ -97,7 +98,7 @@ public class InterpreterFactoryTest {
 	}
 
   @Test
-  public void testFactoryDefaultList() throws InterpreterException, IOException {
+  public void testFactoryDefaultList() throws IOException {
     // get default list from default setting
     List<String> all = factory.getDefaultInterpreterSettingList();
     assertEquals(2, all.size());
@@ -112,6 +113,23 @@ public class InterpreterFactoryTest {
   }
 
   @Test
+  public void testExceptions() throws IOException {
+    List<String> all = factory.getDefaultInterpreterSettingList();
+    // add setting with null option & properties expected nullArgumentException.class
+    try {
+      factory.add("a mock", "mock2", null, new Properties());
+    } catch(NullArgumentException e) {
+        assertEquals("Test null option" , e.getMessage(),new NullArgumentException("option").getMessage());
+      }
+    try {
+      factory.add("a mock" , "mock2" , new InterpreterOption(false),null);
+    } catch (NullArgumentException e){
+      assertEquals("Test null properties" , e.getMessage(),new NullArgumentException("properties").getMessage());
+    }
+  }
+
+
+  @Test
   public void testSaveLoad() throws InterpreterException, IOException {
     // interpreter settings
     assertEquals(2, factory.get().size());