diff --git a/src/main/java/org/olat/core/gui/media/ServletUtil.java b/src/main/java/org/olat/core/gui/media/ServletUtil.java index 05379379cf231fc32664b16c76a0a5a1e47f3133..0c2c5238ddfb8db8fe615cbc6dfda86c2c01bb28 100644 --- a/src/main/java/org/olat/core/gui/media/ServletUtil.java +++ b/src/main/java/org/olat/core/gui/media/ServletUtil.java @@ -518,7 +518,7 @@ public class ServletUtil { } } - public static void serveStringResource(HttpServletResponse response, StringOutput result) { + public static boolean serveStringResource(HttpServletResponse response, StringOutput result) { setStringResourceHeaders(response); // log the response headers prior to sending the output @@ -528,30 +528,32 @@ public class ServletUtil { + response.getCharacterEncoding() + "\nlocale:" + response.getLocale()); } - try { - long rstart = 0; - if (isDebug || true) { - rstart = System.currentTimeMillis(); - } + try(PrintWriter os = response.getWriter(); + Reader reader = result.getReader()) { // make a ByteArrayOutputStream to be able to determine the length. // buffer size: assume average length of a char in bytes is max 2 - int encLen = result.length(); - Reader reader = result.getReader(); - //response.setContentLength(encLen); set the number of characters, must be number of bytes - - PrintWriter os = response.getWriter(); IOUtils.copy(reader, os); - os.close(); - - if (isDebug) { - log.debug("time to serve inline-resource " + result.length() + " chars / " + encLen + " bytes: " - + (System.currentTimeMillis() - rstart)); - } + } catch (IllegalStateException e) { + debugIllegalGetOutputStream(response, result); + log.error("Illegal getWriter", e); + return false; } catch (IOException e) { if (isDebug) { log.warn("client browser abort when serving inline", e); } } + return true; + } + + private static void debugIllegalGetOutputStream(HttpServletResponse response, StringOutput result) { + try { + for(String header:response.getHeaderNames()) { + log.error("Illegal getWriter: " + header + " :: " + response.getHeader(header)); + } + } catch (Exception e) { + log.error("Illegal getWriter: ", e); + } + log.error(result.toString()); } public static void setStringResourceHeaders(HttpServletResponse response) { diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestFeedbackEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestFeedbackEditorController.java index 8b98737ccece7507a7eb225ccfae811ac6dd4b7f..5daf12c619c37b95c0ff109dfcb0072e7b94e4b2 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestFeedbackEditorController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestFeedbackEditorController.java @@ -131,24 +131,30 @@ public class AssessmentTestFeedbackEditorController extends FormBasicController String passedTitle = feedbackPassedTitleEl.getValue(); String passedText = feedbackPassedTextEl.getRawValue(); + TestFeedbackBuilder passedBuilder = testBuilder.getPassedFeedback(); if(StringHelper.containsNonWhitespace(FilterFactory.getHtmlTagsFilter().filter(passedText))) { - TestFeedbackBuilder passedBuilder = testBuilder.getPassedFeedback(); if(passedBuilder == null) { passedBuilder = testBuilder.createPassedFeedback(); } passedBuilder.setTitle(passedTitle); passedBuilder.setText(passedText); + } else if(passedBuilder != null) { + passedBuilder.setTitle(null); + passedBuilder.setText(null); } String failedTitle = feedbackFailedTitleEl.getValue(); String failedText = feedbackFailedTextEl.getRawValue(); + TestFeedbackBuilder failedBuilder = testBuilder.getFailedFeedback(); if(StringHelper.containsNonWhitespace(FilterFactory.getHtmlTagsFilter().filter(failedText))) { - TestFeedbackBuilder failedBuilder = testBuilder.getFailedFeedback(); if(failedBuilder == null) { failedBuilder = testBuilder.createFailedFeedback(); } failedBuilder.setTitle(failedTitle); failedBuilder.setText(failedText); + } else if(failedBuilder != null) { + failedBuilder.setTitle(null); + failedBuilder.setText(null); } fireEvent(ureq, AssessmentTestEvent.ASSESSMENT_TEST_CHANGED_EVENT);