From f2958524823a2b514aa5de239d264cf6a622297d Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Thu, 10 Sep 2015 19:11:12 +0200 Subject: [PATCH] WW-4545 - Setting status code in HttpHeaders will be ignored (cherry picked from commit 4cd9a74cb8efa8dc0d3c57ac267a70b0538f3bf0) --- .../rest/DefaultContentTypeHandlerManager.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java b/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java index b1bcffce7..c55f3193a 100644 --- a/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java +++ b/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java @@ -126,8 +126,12 @@ public class DefaultContentTypeHandlerManager implements ContentTypeHandlerManag */ public String handleResult(ActionConfig actionConfig, Object methodResult, Object target) throws IOException { String resultCode = readResultCode(methodResult); + Integer statusCode = readStatusCode(methodResult); HttpServletRequest req = ServletActionContext.getRequest(); HttpServletResponse res = ServletActionContext.getResponse(); + if(statusCode != null) { + res.setStatus(statusCode); + } ContentTypeHandler handler = getHandlerForResponse(req, res); if (handler != null) { @@ -143,13 +147,22 @@ public class DefaultContentTypeHandlerManager implements ContentTypeHandlerManag res.setContentLength(data.length); res.setContentType(handler.getContentType()); res.getOutputStream().write(data); - res.getOutputStream().close(); + res.getOutputStream().flush(); } } } return resultCode; } + + protected Integer readStatusCode(Object methodResult) { + if (methodResult instanceof HttpHeaders) { + return ((HttpHeaders) methodResult).getStatus(); + } else { + return null; + } + } + protected String readResultCode(Object methodResult) { if (methodResult == null) { return null;