Index: lams_central/src/java/org/lamsfoundation/lams/web/qb/ImsQtiController.java =================================================================== diff -u -rc6f5e5e1aeb31463657f9fe739fc889d2d7e196d -r970744e51617c0614313597e042767b43f5a7326 --- lams_central/src/java/org/lamsfoundation/lams/web/qb/ImsQtiController.java (.../ImsQtiController.java) (revision c6f5e5e1aeb31463657f9fe739fc889d2d7e196d) +++ lams_central/src/java/org/lamsfoundation/lams/web/qb/ImsQtiController.java (.../ImsQtiController.java) (revision 970744e51617c0614313597e042767b43f5a7326) @@ -153,6 +153,15 @@ } else if (isVsaType) { qbQuestion.setType(QbQuestion.TYPE_VERY_SHORT_ANSWERS); qbQuestion.setCaseSensitive(false); + + if (question.getAnswers().size() == 1) { + // add missing incorrect answer + // as the correct answer always has to be present + Answer incorrectAnswer = new Answer(); + incorrectAnswer.setDisplayOrder(2); + incorrectAnswer.setScore(0f); + question.getAnswers().add(incorrectAnswer); + } } String correctAnswer = null; @@ -167,7 +176,7 @@ continue; } QbOption option = new QbOption(); - if (isVsaType) { + if (isVsaType && answerText != null) { // convert comma-separated answers to ones accepted by QB VSA questions answerText = Stream.of(answerText.split(",")).map(String::strip) .collect(Collectors.joining("\r\n")); Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java =================================================================== diff -u -r9068235792fd34bbfc26c2114bd89fbba76c20d3 -r970744e51617c0614313597e042767b43f5a7326 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 9068235792fd34bbfc26c2114bd89fbba76c20d3) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 970744e51617c0614313597e042767b43f5a7326) @@ -928,7 +928,7 @@ if ((questionType == QbQuestion.TYPE_MULTIPLE_CHOICE) || (questionType == QbQuestion.TYPE_VERY_SHORT_ANSWERS)) { String name = paramMap.get(QbConstants.ATTR_OPTION_NAME_PREFIX + i); - if ((name == null) && isForSaving) { + if (name == null && isForSaving && !(questionType == QbQuestion.TYPE_VERY_SHORT_ANSWERS && i < 2)) { continue; } Index: lams_common/src/java/org/lamsfoundation/lams/questions/QuestionWordParser.java =================================================================== diff -u -rff94b77bb014d41283f431f1b3a1bf77f59f4c3f -r970744e51617c0614313597e042767b43f5a7326 --- lams_common/src/java/org/lamsfoundation/lams/questions/QuestionWordParser.java (.../QuestionWordParser.java) (revision ff94b77bb014d41283f431f1b3a1bf77f59f4c3f) +++ lams_common/src/java/org/lamsfoundation/lams/questions/QuestionWordParser.java (.../QuestionWordParser.java) (revision 970744e51617c0614313597e042767b43f5a7326) @@ -342,7 +342,9 @@ continue; } answers.add(correctVsaAnswer); - answers.add(incorrectVsaAnswer); + if (incorrectVsaAnswer != null) { + answers.add(incorrectVsaAnswer); + } question.setAnswers(answers); } else if (answers.isEmpty()) { if (!QuestionParser.isQuestionTypeAcceptable(Question.QUESTION_TYPE_ESSAY, limitType, question)) { Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentEscapeUtils.java =================================================================== diff -u -rcf0eebcaab1317079c30cb1d4e056ba9dd4ec048 -r970744e51617c0614313597e042767b43f5a7326 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentEscapeUtils.java (.../AssessmentEscapeUtils.java) (revision cf0eebcaab1317079c30cb1d4e056ba9dd4ec048) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentEscapeUtils.java (.../AssessmentEscapeUtils.java) (revision 970744e51617c0614313597e042767b43f5a7326) @@ -373,7 +373,8 @@ } public static Set normaliseVSOption(String option) { - return Stream.of(option.split("\r\n")).collect( - Collectors.mapping(answer -> AssessmentEscapeUtils.normaliseVSAnswer(answer), Collectors.toSet())); + return option == null ? Set.of() + : Stream.of(option.split("\r\n")).collect(Collectors + .mapping(answer -> AssessmentEscapeUtils.normaliseVSAnswer(answer), Collectors.toSet())); } } \ No newline at end of file