diff --git a/core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java b/core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java index bec00fb5..61ab715e 100644 --- a/core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java +++ b/core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java @@ -59,11 +59,11 @@ public class WebServiceMessageReceiverHandlerAdapter extends WebServiceMessageRe handleConnection(connection, (WebServiceMessageReceiver) handler); } catch (InvalidXmlException ex) { - httpServletResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST); + handleInvalidXmlException(httpServletRequest, httpServletResponse, handler, ex); } } else { - httpServletResponse.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED); + handleNonPostMethod(httpServletRequest, httpServletResponse, handler); } return null; } @@ -72,4 +72,38 @@ public class WebServiceMessageReceiverHandlerAdapter extends WebServiceMessageRe return handler instanceof WebServiceMessageReceiver; } + /** + * Template method that is invoked when the request method is not {@code POST}. Called from {@link + * #handle(HttpServletRequest, HttpServletResponse, Object)}. + *
+ * Default implementation set the response status to 405: Method Not Allowed. Can be overridden in subclasses. + * + * @param httpServletRequest current HTTP request + * @param httpServletResponse current HTTP response + * @param handler current handler + */ + protected void handleNonPostMethod(HttpServletRequest httpServletRequest, + HttpServletResponse httpServletResponse, + Object handler) throws Exception { + httpServletResponse.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED); + } + + /** + * Template method that is invoked when parsing the request results in a {@link InvalidXmlException}. Called from + * {@link #handle(HttpServletRequest, HttpServletResponse, Object)}. + * + * Default implementation set the response status to 400: Bad Request. Can be overridden in subclasses. + * + * @param httpServletRequest current HTTP request + * @param httpServletResponse current HTTP response + * @param handler current handler + * @param ex the invalid XML exception that resulted in this method being called + */ + protected void handleInvalidXmlException(HttpServletRequest httpServletRequest, + HttpServletResponse httpServletResponse, + Object handler, + InvalidXmlException ex) throws Exception { + httpServletResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST); + } + }