When Creating Matching Questions Instructors Receive IndexOutOfBoundsException: Index: 4, Size: 4 Error Message if Reusing a Question




 
When Creating Matching Questions Instructors Receive IndexOutOfBoundsException: Index: 4, Size: 4 Error Message if Reusing a Question

Date Published: Jan 11,2019 Category: Planned_First_Fix_Release:Future_Reference_Learn; Product:Course_Tools_Learn,Extensions_Learn; Version:Learn_9_1_Q4_2017,Learn_9_1_Q2_2018,Learn_9_1_Q4_2018,Learn_9_1_Q2_2019,SaaS   Article No.: 000050115

Product: Blackboard Learn

Release: 9.1;SaaS

Service Pack(s): Learn 9.1 Q4 2017 (3300.0.0), Learn 9.1 Q2 2018 (3400.0.0), Learn 9.1 Q4 2018 (3500.0.0), Learn 9.1 Q2 2019 (3700.0.0), SaaS

Issue Description: When creating matching questions, Instructors receive IndexOutOfBoundsException: Index: 4, Size: 4 error message if reuse a question.

Steps to Replicate:

  1. Login to Environment as Admin
  2. Create a new Course shell or access an existing one
  3. Enroll yourself to the Course or enroll a new or existing User as Instructor
  4. Login as test User
  5. Access test Course
  6. Go to: Course > Control Panel > Tests, Surveys, and Pools > Tests
  7. Build a new Test > Build Test > assign any name (e.g. bbsupport test)
  8. Create a new Matching type question: Create question > Matching
  9. Increase the Number of Questions to 6 and press the Update Partial Credit % (Sometimes we need to re-try this step many times)
  10. Scroll down to check if new 2 questions were added/if the percentages are correct. For our case the "Partial Credit %" was updated to 16.66667
  11. Enter questions and answers, use the "Reuse Answer Choice from" option on Question 5 and Question 6; select Answer/Question 1 to use in both ones
  12. Press submit

Expected Behavior:
Instructor would create a new question

Observed Behavior:
Instructor sees this error:

Index: 4, Size: 4
For reference, the Error ID is ad5445c4-a0e8-4dac-af6d-aa01b160b723.
Wednesday, December 26, 2018 1:43:07 PM EST

 
Symptoms:
java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
 at java.util.ArrayList.rangeCheck(ArrayList.java:657)
 at java.util.ArrayList.set(ArrayList.java:448)
 at blackboard.data.qti.asi.item.ResponseFlowBlock.setFlowStructure(ResponseFlowBlock.java:107)
 at blackboard.apis.assessment.MatchingQuestionWrapper$RightMatchList.reorderRightMatch(MatchingQuestionWrapper.java:216)
 at blackboard.webapps.assessment.MatchingQuestionOrderHelper.reorder(MatchingQuestionOrderHelper.java:122)
 at blackboard.webapps.assessment.MatchingQuestionOrderHelper.orderAnswers(MatchingQuestionOrderHelper.java:34)
 at blackboard.webapps.assessment.struts.actions.ModifyMatchingQuestionAction.orderAnswers(ModifyMatchingQuestionAction.java:479)
 at blackboard.webapps.assessment.struts.actions.ModifyMatchingQuestionAction.saveForm(ModifyMatchingQuestionAction.java:428)
 at blackboard.webapps.assessment.struts.actions.ModifyQuestionAction.execute(ModifyQuestionAction.java:178)
 at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)
 at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)
 at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
 at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
 at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
 at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
 at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
 at blackboard.struts.BbActionServlet.service(BbActionServlet.java:109)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
 at sun.reflect.GeneratedMethodAccessor637.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)
 at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)
 at java.security.AccessController.doPrivileged(Native Method)
 at javax.security.auth.Subject.doAsPrivileged(Subject.java:549)
 at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)
 at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:170)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:224)
 at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)
 at blackboard.webapps.assessment.AssessmentUpgradeFilter.doFilter(AssessmentUpgradeFilter.java:53)
 at sun.reflect.GeneratedMethodAccessor624.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)
 at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)
 at java.security.AccessController.doPrivileged(Native Method)
 at javax.security.auth.Subject.doAsPrivileged(Subject.java:549)
 at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)
 at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
 at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)
 at blackboard.platform.servlet.DevNonceFilter.doFilter(DevNonceFilter.java:68)
 at sun.reflect.GeneratedMethodAccessor624.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)
 at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)
 at java.security.AccessController.doPrivileged(Native Method)
 at javax.security.auth.Subject.doAsPrivileged(Subject.java:549)
 at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)
 at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
 at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)
 at blackboard.platform.servlet.B2ContextFilter.doFilter(B2ContextFilter.java:81)
 at sun.reflect.GeneratedMethodAccessor624.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)
 at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)
 at java.security.AccessController.doPrivileged(Native Method)
 at javax.security.auth.Subject.doAsPrivileged(Subject.java:549)
 at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)
 at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
 at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)
 at blackboard.platform.servlet.RequestSecurityFilter.doFilter(RequestSecurityFilter.java:77)
 at sun.reflect.GeneratedMethodAccessor624.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)
 at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)
 at java.security.AccessController.doPrivileged(Native Method)
 at javax.security.auth.Subject.doAsPrivileged(Subject.java:549)
 at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)
 at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
 at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
 at org.apache.catalina.valves.rewrite.RewriteValve.invoke(RewriteValve.java:580)
 at org.apache.catalina.valves.StuckThreadDetectionValve.invoke(StuckThreadDetectionValve.java:206)
 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
 at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:677)
 at blackboard.tomcat.valves.LoggingRemoteIpValve.invoke(LoggingRemoteIpValve.java:44)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
 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)




Target Release: Future Reference
Patch Available: No