diff --git a/core/pom.xml b/core/pom.xml index 56865c521f0b8571e18ed8a7cbdfe0a22dde4dcb..625044594e8f249a2736c05bf52bacbf003ac4dc 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -42,7 +42,7 @@ THE SOFTWARE. true - 1.212 + 1.213 2.5.6.SEC03 diff --git a/core/src/main/java/hudson/WebAppMain.java b/core/src/main/java/hudson/WebAppMain.java index 15ba27cd4b03810919757c5b9acac6d10aa7abf7..8475fe221c07ee900ccc11fc9b7a80758a92a368 100644 --- a/core/src/main/java/hudson/WebAppMain.java +++ b/core/src/main/java/hudson/WebAppMain.java @@ -206,7 +206,7 @@ public final class WebAppMain implements ServletContextListener { context.setAttribute(APP,new HudsonIsLoading()); - initThread = new Thread("hudson initialization thread") { + initThread = new Thread("Jenkins initialization thread") { @Override public void run() { boolean success = false; diff --git a/core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java b/core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..60f34e3a7d8e93ce5391f7ff2ebcd8aaada8c7bc --- /dev/null +++ b/core/src/main/java/hudson/init/impl/InstallUncaughtExceptionHandler.java @@ -0,0 +1,30 @@ +package hudson.init.impl; + +import hudson.init.Initializer; +import jenkins.model.Jenkins; +import org.kohsuke.stapler.WebApp; +import org.kohsuke.stapler.compression.CompressionFilter; +import org.kohsuke.stapler.compression.UncaughtExceptionHandler; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author Kohsuke Kawaguchi + */ +public class InstallUncaughtExceptionHandler { + @Initializer + public static void init(final Jenkins j) throws IOException { + CompressionFilter.setUncaughtExceptionHandler(j.servletContext, new UncaughtExceptionHandler() { + @Override + public void reportException(Throwable e, ServletContext context, HttpServletRequest req, HttpServletResponse rsp) throws ServletException, IOException { + req.setAttribute("javax.servlet.error.exception",e); + WebApp.get(j.servletContext).getSomeStapler() + .invoke(req,rsp, Jenkins.getInstance(), "/oops"); + } + }); + } +} diff --git a/core/src/main/java/hudson/util/PluginServletFilter.java b/core/src/main/java/hudson/util/PluginServletFilter.java index 0decb8f541f4b7175023ea68e5678f51e4d84288..28d505a1b5477598af3e34d5fa91efb4b3f2fd18 100644 --- a/core/src/main/java/hudson/util/PluginServletFilter.java +++ b/core/src/main/java/hudson/util/PluginServletFilter.java @@ -32,6 +32,7 @@ import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.List; import java.util.Vector; diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index de2a136ca4290519236e4285508baddc9cad905b..dcd190a7e7f92ca2b50962b786aafb08d3338e2a 100755 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -3630,6 +3630,7 @@ public class Jenkins extends AbstractCIBase implements ModifiableTopLevelItemGro || rest.startsWith("/logout") || rest.startsWith("/accessDenied") || rest.startsWith("/adjuncts/") + || rest.startsWith("/oops") || rest.startsWith("/signup") || rest.startsWith("/tcpSlaveAgentListener") // TODO SlaveComputer.doSlaveAgentJnlp; there should be an annotation to request unprotected access diff --git a/core/src/main/resources/jenkins/model/Jenkins/oops.jelly b/core/src/main/resources/jenkins/model/Jenkins/oops.jelly new file mode 100644 index 0000000000000000000000000000000000000000..2a7e0910d2b879a48b8201e67e4e9daa2ad02f6d --- /dev/null +++ b/core/src/main/resources/jenkins/model/Jenkins/oops.jelly @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + +

+ ${%Oops!} +

+

+ ${%problemHappened} + ${%checkJIRA} + ${%vote} + ${%pleaseReport} + ${%stackTracePlease} + ${%checkML} +

+

${%Stack trace}

+
${h.printThrowable(request.getAttribute('javax.servlet.error.exception'))}
+
+
+
\ No newline at end of file diff --git a/core/src/main/resources/jenkins/model/Jenkins/oops.properties b/core/src/main/resources/jenkins/model/Jenkins/oops.properties new file mode 100644 index 0000000000000000000000000000000000000000..b67206fd10054484e3032a3a376d148581333cc4 --- /dev/null +++ b/core/src/main/resources/jenkins/model/Jenkins/oops.properties @@ -0,0 +1,6 @@ +problemHappened= A problem occurred while processing the request. +checkJIRA= Please check our bug tracker to see if a similar problem has already been reported. +vote= If it is already reported, please vote and put a comment on it to let us gauge the impact of the problem. +pleaseReport= If you think this is a new issue, please file a new issue. +stackTracePlease= When you file an issue, make sure to add the entire stack trace, along with the version of Jenkins and relevant plugins. +checkML= The users list might be also useful in understanding what has happened. diff --git a/war/src/main/webapp/WEB-INF/web.xml b/war/src/main/webapp/WEB-INF/web.xml index c371041d84243c155dca0d43ec920b813db12e8a..aa14977b414f0b2593b6799cef6163032f28455e 100644 --- a/war/src/main/webapp/WEB-INF/web.xml +++ b/war/src/main/webapp/WEB-INF/web.xml @@ -207,4 +207,8 @@ THE SOFTWARE. video/webm + + java.lang.Throwable + /oops + diff --git a/war/src/main/webapp/images/rage.png b/war/src/main/webapp/images/rage.png new file mode 100644 index 0000000000000000000000000000000000000000..1d6b711ddc0d25e6dec4f79b4d9a3252514f3e71 Binary files /dev/null and b/war/src/main/webapp/images/rage.png differ