Uploaded image for project: 'Sakai'
  1. Sakai
  2. SAK-40856

Samigo > can't publish a quiz linked to gradebook

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: RESOLVED
    • Priority: Blocker
    • Resolution: Incorporated
    • Affects Version/s: 19.0, 20.0
    • Fix Version/s: None
    • Labels:
      None
    • Test Plan:
      Hide
      1. In any site with Gradebook and Tests & Quizzes, create a quiz with any number of questions of any type, worth any point values
      2. Go to the settings of the quiz, and ensure that "Send assessment score to Gradebook immediately, regardless of options below" is selected
      3. Attempt to publish the quiz
      4. If bug is present: user is transferred back to the "Assessments" tab, and the quiz has not been published (stack trace in the logs)
      5. If bug is fixed: user is transferred back to the "Assessments" tab, and the quiz has been published
      Show
      In any site with Gradebook and Tests & Quizzes, create a quiz with any number of questions of any type, worth any point values Go to the settings of the quiz, and ensure that "Send assessment score to Gradebook immediately, regardless of options below" is selected Attempt to publish the quiz If bug is present: user is transferred back to the "Assessments" tab, and the quiz has not been published (stack trace in the logs) If bug is fixed: user is transferred back to the "Assessments" tab, and the quiz has been published

      Description

      This issue only affects the 19.x and master (20) branches. Attempting to publish any quiz that links to the gradebook fails silently. The following stack trace appears in the log:

      org.sakaiproject.tool.api.ToolException: javax.servlet.ServletException: org/apache/commons/text/StringEscapeUtils
              at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:525)
              at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1487)
              at org.sakaiproject.portal.charon.handlers.SiteHandler.doToolBuffer(SiteHandler.java:1228)
              at org.sakaiproject.portal.charon.handlers.SiteHandler.bufferContent(SiteHandler.java:1062)
              at org.sakaiproject.portal.charon.handlers.SiteHandler.doSite(SiteHandler.java:491)
              at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:267)
              at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:155)
              at org.sakaiproject.portal.charon.handlers.WorksiteHandler.doPost(WorksiteHandler.java:69)
              at org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1171)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
              at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:475)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
              at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
              at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
              at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
              at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
              at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
              at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
              at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
              at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
              at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
              at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
              at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
              at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800)
              at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471)
              at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
              at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
              at java.lang.Thread.run(Thread.java:748)
      Caused by: javax.servlet.ServletException: org/apache/commons/text/StringEscapeUtils
              at javax.faces.webapp.FacesServlet.service(FacesServlet.java:683)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
              at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
              at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:426)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
              at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
              at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:470)
              at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
              at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316)
              at org.sakaiproject.jsf.util.SamigoJsfTool.dispatch(SamigoJsfTool.java:360)
              at org.sakaiproject.jsf2.util.JsfTool.doPost(JsfTool.java:250)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
              at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
              at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:470)
              at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:356)
              at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316)
              at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:513)
              ... 35 more
      Caused by: java.lang.NoClassDefFoundError: org/apache/commons/text/StringEscapeUtils
              at org.sakaiproject.tool.assessment.integration.helper.integrated.GradebookServiceHelperImpl.addToGradebook(GradebookServiceHelperImpl.java:191)
              at org.sakaiproject.tool.assessment.facade.PublishedAssessmentFacadeQueries.publishAssessment(PublishedAssessmentFacadeQueries.java:769)
              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:498)
              at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
              at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
              at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
              at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
              at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
              at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
              at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
              at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
              at com.sun.proxy.$Proxy156.publishAssessment(Unknown Source)
              at org.sakaiproject.tool.assessment.services.assessment.PublishedAssessmentService.publishAssessment(PublishedAssessmentService.java:202)
              at org.sakaiproject.tool.assessment.ui.listener.author.PublishAssessmentListener.publish(PublishAssessmentListener.java:209)
              at org.sakaiproject.tool.assessment.ui.listener.author.PublishAssessmentListener.processAction(PublishAssessmentListener.java:173)
              at javax.faces.event.ActionEvent.processListener(ActionEvent.java:96)
              at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:839)
              at javax.faces.component.UICommand.broadcast(UICommand.java:315)
              at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:870)
              at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1418)
              at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
              at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
              at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:201)
              at javax.faces.webapp.FacesServlet.service(FacesServlet.java:670)
              ... 58 more
      Caused by: java.lang.ClassNotFoundException: org.apache.commons.text.StringEscapeUtils
              at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
              at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
              ... 85 more
      

      The code triggering the stack trace seems to be in GradebookServiceHelperImpl.addToGradebook() @ line 191:

      String title = StringEscapeUtils.unescapeHtml3(publishedAssessment.getTitle());
      

        Gliffy Diagrams

          Zeplin

            Attachments

              Issue Links

                Activity

                  People

                  Assignee:
                  bjones86 Brian Jones
                  Reporter:
                  bjones86 Brian Jones
                  Votes:
                  0 Vote for this issue
                  Watchers:
                  5 Start watching this issue

                    Dates

                    Created:
                    Updated:
                    Resolved:

                      Git Integration