Uploaded image for project: 'Contrib: Evaluation System'
  1. Contrib: Evaluation System
  2. EVALSYS-1444

Null value in EVAL_EVALUATION.ALL_ROLES_PARTICIPATE causes NullPointerExceptions

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: RESOLVED
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 10.4
    • Fix Version/s: 11.x
    • Component/s: Eval Setup
    • Labels:
      None

      Description

      After a migration from 1.3.0 to 10.4, newly created evaluations work fine but editing the old evaluations causes NullPointerExceptions because the field EVAL_EVALUATION.ALL_ROLES_PARTICIPATE has null values by default.

      This was fixed in EVALSYS-1177 for EvalBeanUtils, but the issue is happening in EvaluationSettingsProducer. I paste the stacktrace:

      2015-05-27 10:10:11,211  WARN http-bio-8080-exec-5 PonderUtilCore - Exception rendering view: 
      			java.lang.NullPointerException
      				at org.sakaiproject.evaluation.tool.producers.EvaluationSettingsProducer.fill(EvaluationSettingsProducer.java:409)
      				at org.sakaiproject.evaluation.tool.producers.EvalCommonProducer.fillComponents(EvalCommonProducer.java:53)
      				at uk.org.ponder.rsf.view.support.ViewCollector.fillComponents(ViewCollector.java:56)
      				at uk.org.ponder.rsf.view.support.LayoutCollector.fillComponents(LayoutCollector.java:68)
      				at sun.reflect.GeneratedMethodAccessor1036.invoke(Unknown Source)
      				at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      				at java.lang.reflect.Method.invoke(Method.java:606)
      				at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
      				at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
      				at com.sun.proxy.$Proxy183.fillComponents(Unknown Source)
      				at uk.org.ponder.rsf.view.support.ViewGenerator.generateView(ViewGenerator.java:53)
      				at uk.org.ponder.rsf.processor.support.RSFRenderHandler$1.run(RSFRenderHandler.java:79)
      				at uk.org.ponder.rsf.processor.support.RequestInvoker$1.run(RequestInvoker.java:46)
      				at uk.org.ponder.util.CollectingRunnableInvoker$1.run(CollectingRunnableInvoker.java:25)
      				at uk.org.ponder.rsf.flow.support.BasicScopedAlterationWrapper.invokeRunnable(BasicScopedAlterationWrapper.java:59)
      				at uk.org.ponder.rsf.flow.support.BasicScopedAlterationWrapper$$FastClassByCGLIB$$84f89202.invoke(<generated>)
      				at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
      				at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:627)
      				at uk.org.ponder.rsf.flow.support.BasicScopedAlterationWrapper$$EnhancerByCGLIB$$65f67722.invokeRunnable(<generated>)
      				at uk.org.ponder.rsf.flow.support.BasicScopedAlterationWrapper$$FastClassByCGLIB$$84f89202.invoke(<generated>)
      				at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
      				at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:627)
      				at uk.org.ponder.rsf.flow.support.BasicScopedAlterationWrapper$$EnhancerByCGLIB$$65f67722.invokeRunnable(<generated>)
      				at uk.org.ponder.util.CollectingRunnableInvoker$1.run(CollectingRunnableInvoker.java:29)
      				at uk.org.ponder.util.CollectingRunnableInvoker.invokeWrappers(CollectingRunnableInvoker.java:22)
      				at uk.org.ponder.util.CollectingRunnableInvoker.invokeRunnable(CollectingRunnableInvoker.java:14)
      				at uk.org.ponder.rsf.processor.support.RequestInvoker.invokeRunnable(RequestInvoker.java:39)
      				at uk.org.ponder.rsf.processor.support.RSFRenderHandler.handle(RSFRenderHandler.java:75)
      				at uk.org.ponder.rsf.processor.support.RSFRenderHandler$$FastClassByCGLIB$$5bda3a3d.invoke(<generated>)
      				at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
      				at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:627)
      				at uk.org.ponder.rsf.processor.support.RSFRenderHandler$$EnhancerByCGLIB$$7190cafd.handle(<generated>)
      				at uk.org.ponder.rsf.processor.support.RenderHandlerBracketer.handle(RenderHandlerBracketer.java:82)
      				at uk.org.ponder.rsf.processor.support.RenderHandlerBracketer$$FastClassByCGLIB$$3055fa0f.invoke(<generated>)
      				at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
      				at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:627)
      				at uk.org.ponder.rsf.processor.support.RenderHandlerBracketer$$EnhancerByCGLIB$$520ab28f.handle(<generated>)
      				at uk.org.ponder.rsf.processor.support.RootHandlerBeanBase.handleGet(RootHandlerBeanBase.java:97)
      				at uk.org.ponder.rsf.processor.support.RootHandlerBeanBase.handle(RootHandlerBeanBase.java:79)
      				at org.sakaiproject.evaluation.tool.utils.RootHandlerBeanOverride.handle(RootHandlerBeanOverride.java:41)
      				at sun.reflect.GeneratedMethodAccessor916.invoke(Unknown Source)
      				at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      				at java.lang.reflect.Method.invoke(Method.java:606)
      				at uk.org.ponder.reflect.JDKReflectiveCache.invokeMethod(JDKReflectiveCache.java:23)
      				at uk.org.ponder.reflect.JDKReflectiveCache.invokeMethod(JDKReflectiveCache.java:17)
      				at uk.org.ponder.reflect.JDKReflectiveCache.invokeMethod(JDKReflectiveCache.java:77)
      				at uk.org.ponder.rsac.support.RSACBeanLocatorImpl.createBean(RSACBeanLocatorImpl.java:553)
      				at uk.org.ponder.rsac.support.RSACBeanLocatorImpl.access$000(RSACBeanLocatorImpl.java:75)
      				at uk.org.ponder.rsac.support.RSACBeanLocatorImpl$1.run(RSACBeanLocatorImpl.java:449)
      				at org.sakaiproject.genericdao.hibernate.HibernateGenericDao.invokeTransactionalAccess(HibernateGenericDao.java:580)
      				at sun.reflect.GeneratedMethodAccessor885.invoke(Unknown Source)
      				at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      				at java.lang.reflect.Method.invoke(Method.java:606)
      				at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
      				at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
      				at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
      				at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
      				at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
      				at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
      				at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
      				at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
      				at com.sun.proxy.$Proxy16.invokeTransactionalAccess(Unknown Source)
      				at org.sakaiproject.evaluation.dao.EvalDaoInvokerImpl.invokeTransactionalAccess(EvalDaoInvokerImpl.java:34)
      				at org.sakaiproject.evaluation.tool.wrapper.ModelAccessWrapperInvoker.invokeRunnable(ModelAccessWrapperInvoker.java:44)
      				at uk.org.ponder.rsac.support.RSACBeanLocatorImpl.createBean(RSACBeanLocatorImpl.java:447)
      				at uk.org.ponder.rsac.support.RSACBeanLocatorImpl.access$000(RSACBeanLocatorImpl.java:75)
      				at uk.org.ponder.rsac.support.RSACBeanLocatorImpl$1.run(RSACBeanLocatorImpl.java:449)
      				at uk.org.ponder.rsac.RSACErrorBridge.invokeRunnable(RSACErrorBridge.java:38)
      				at uk.org.ponder.rsac.support.RSACBeanLocatorImpl.createBean(RSACBeanLocatorImpl.java:447)
      				at uk.org.ponder.rsac.support.RSACBeanLocatorImpl.getLocalBean(RSACBeanLocatorImpl.java:348)
      				at uk.org.ponder.rsac.support.RSACBeanLocatorImpl.getBean(RSACBeanLocatorImpl.java:379)
      				at uk.org.ponder.rsac.support.PerRequestInfo$1.locateBean(PerRequestInfo.java:49)
      				at uk.ac.cam.caret.sakai.rsf.servlet.ReasonableSakaiServlet.service(ReasonableSakaiServlet.java:65)
      				at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
      				at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
      				at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      				at org.sakaiproject.evaluation.tool.utils.EvalServletFilter.doFilter(EvalServletFilter.java:43)
      				at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
      				at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      				at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:394)
      				at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
      				at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      				at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
      				at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
      				at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:369)
      				at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
      				at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:513)
      				at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1539)
      				at org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:215)
      				at org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:98)
      				at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:901)
      				at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
      				at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
      				at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
      				at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      				at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:455)
      				at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
      				at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      				at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
      				at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
      				at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
      				at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
      				at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
      				at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
      				at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
      				at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
      				at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
      				at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
      				at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
      				at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      				at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      				at java.lang.Thread.run(Thread.java:745)
      

      A comment in EVALSYS-1177 shows the SQL needed to populate the null field with false values. This can solve the issue if somebody is in a hurry.

        Gliffy Diagrams

          Zeplin

            Attachments

              Activity

                People

                Assignee:
                jonespm Matthew Jones
                Reporter:
                daniel.merino Daniel Merino Echeverría
                Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                  Dates

                  Created:
                  Updated:
                  Resolved:

                    Git Integration