diff --git a/scm-webapp/src/main/java/sonia/scm/WebResourceServlet.java b/scm-webapp/src/main/java/sonia/scm/WebResourceServlet.java index b4ce14a0c1..07e70d20cc 100644 --- a/scm-webapp/src/main/java/sonia/scm/WebResourceServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/WebResourceServlet.java @@ -47,7 +47,7 @@ public class WebResourceServlet extends HttpServlet { } @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + protected void doGet(HttpServletRequest request, HttpServletResponse response) { String uri = normalizeUri(request); LOG.trace("try to load {}", uri); @@ -55,7 +55,16 @@ public class WebResourceServlet extends HttpServlet { if (url != null) { serveResource(response, url); } else { + dispatch(request, response, uri); + } + } + + private void dispatch(HttpServletRequest request, HttpServletResponse response, String uri) { + try { pushStateDispatcher.dispatch(request, response, uri); + } catch (IOException ex) { + LOG.error("failed to dispatch: " + uri, ex); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } diff --git a/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java b/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java index 7e42afdf17..fa39239d5d 100644 --- a/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java +++ b/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java @@ -105,6 +105,14 @@ public class WebResourceServletTest { verify(response).setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } + @Test + public void testDoGetWithDispatcherException() throws IOException { + when(request.getRequestURI()).thenReturn("/scm/awesome.jpg"); + doThrow(IOException.class).when(pushStateDispatcher).dispatch(request, response, "/awesome.jpg"); + servlet.doGet(request, response); + verify(response).setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } + private static class TestingOutputServletOutputStream extends ServletOutputStream { private ByteArrayOutputStream buffer = new ByteArrayOutputStream();