Issue #2936 - Allow Dispatcher.error() to work for BadMessageException
Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
This commit is contained in:
parent
b3739f42b8
commit
fe66e3d0cb
|
@ -31,6 +31,7 @@ import javax.servlet.ServletResponse;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.eclipse.jetty.http.BadMessageException;
|
||||
import org.eclipse.jetty.http.HttpURI;
|
||||
import org.eclipse.jetty.server.handler.ContextHandler;
|
||||
import org.eclipse.jetty.util.Attributes;
|
||||
|
@ -195,8 +196,24 @@ public class Dispatcher implements RequestDispatcher
|
|||
baseRequest.setContextPath(_contextHandler.getContextPath());
|
||||
baseRequest.setServletPath(null);
|
||||
baseRequest.setPathInfo(_pathInContext);
|
||||
if (_uri.getQuery()!=null || old_uri.getQuery()!=null)
|
||||
baseRequest.mergeQueryParameters(old_uri.getQuery(),_uri.getQuery(), true);
|
||||
|
||||
if (_uri.getQuery() != null || old_uri.getQuery() != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
baseRequest.mergeQueryParameters(old_uri.getQuery(), _uri.getQuery(), true);
|
||||
}
|
||||
catch (BadMessageException e)
|
||||
{
|
||||
// Only throw BME if not in Error Dispatch Mode
|
||||
// This allows application ErrorPageErrorHandler to handle BME messages
|
||||
Boolean inErrorDispatch = (Boolean) request.getAttribute(__ERROR_DISPATCH);
|
||||
if(inErrorDispatch == null || !inErrorDispatch)
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
baseRequest.setAttributes(attr);
|
||||
|
||||
|
|
|
@ -167,11 +167,11 @@ public class ErrorPageTest
|
|||
public void testBadMessage() throws Exception
|
||||
{
|
||||
String response = _connector.getResponse("GET /app?baa=%88%A4 HTTP/1.0\r\n\r\n");
|
||||
assertThat(response, Matchers.containsString("HTTP/1.1 400 Bad Request"));
|
||||
assertThat(response, Matchers.containsString("HTTP/1.1 400 Bad query encoding"));
|
||||
assertThat(response, Matchers.containsString("ERROR_PAGE: /BadMessageException"));
|
||||
assertThat(response, Matchers.containsString("ERROR_MESSAGE: Unable to parse URI query"));
|
||||
assertThat(response, Matchers.containsString("ERROR_MESSAGE: Bad query encoding"));
|
||||
assertThat(response, Matchers.containsString("ERROR_CODE: 400"));
|
||||
assertThat(response, Matchers.containsString("ERROR_EXCEPTION: org.eclipse.jetty.http.BadMessageException: 400: Unable to parse URI query"));
|
||||
assertThat(response, Matchers.containsString("ERROR_EXCEPTION: org.eclipse.jetty.http.BadMessageException: 400: Bad query encoding"));
|
||||
assertThat(response, Matchers.containsString("ERROR_EXCEPTION_TYPE: class org.eclipse.jetty.http.BadMessageException"));
|
||||
assertThat(response, Matchers.containsString("ERROR_SERVLET: org.eclipse.jetty.servlet.ErrorPageTest$AppServlet-"));
|
||||
assertThat(response, Matchers.containsString("ERROR_REQUEST_URI: /app"));
|
||||
|
|
Loading…
Reference in New Issue