aboutsummaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ErrorResponseContentCreator.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ErrorResponseContentCreator.java')
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ErrorResponseContentCreator.java41
1 files changed, 41 insertions, 0 deletions
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ErrorResponseContentCreator.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ErrorResponseContentCreator.java
new file mode 100644
index 00000000000..cd21dccde0e
--- /dev/null
+++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ErrorResponseContentCreator.java
@@ -0,0 +1,41 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.jdisc.http.server.jetty;
+
+import org.eclipse.jetty.util.ByteArrayISO8859Writer;
+import org.eclipse.jetty.util.StringUtil;
+
+import java.io.IOException;
+import java.util.Optional;
+
+/**
+ * Creates HTML body having the status code, error message and request uri.
+ * The body is constructed from a template that is inspired by the default Jetty template (see {@link org.eclipse.jetty.server.Response#sendError(int, String)}).
+ * The content is written using the ISO-8859-1 charset.
+ *
+ * @author bjorncs
+ */
+public class ErrorResponseContentCreator {
+
+ private final ByteArrayISO8859Writer writer = new ByteArrayISO8859Writer(2048);
+
+ public byte[] createErrorContent(String requestUri, int statusCode, Optional<String> message) {
+ String sanitizedString = message.map(StringUtil::sanitizeXmlString).orElse("");
+ String statusCodeString = Integer.toString(statusCode);
+ writer.resetWriter();
+ try {
+ writer.write("<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=ISO-8859-1\"/>\n<title>Error ");
+ writer.write(statusCodeString);
+ writer.write("</title>\n</head>\n<body>\n<h2>HTTP ERROR: ");
+ writer.write(statusCodeString);
+ writer.write("</h2>\n<p>Problem accessing ");
+ writer.write(StringUtil.sanitizeXmlString(requestUri));
+ writer.write(". Reason:\n<pre> ");
+ writer.write(sanitizedString);
+ writer.write("</pre></p>\n<hr/>\n</body>\n</html>\n");
+ } catch (IOException e) {
+ // IOException should not be thrown unless writer is constructed using byte[] parameter
+ throw new RuntimeException(e);
+ }
+ return writer.getByteArray();
+ }
+}