diff --git a/src/helma/framework/ResponseTrans.java b/src/helma/framework/ResponseTrans.java index 0e03f0a8..54887222 100644 --- a/src/helma/framework/ResponseTrans.java +++ b/src/helma/framework/ResponseTrans.java @@ -462,6 +462,13 @@ public final class ResponseTrans implements Serializable { * web server. Transforms the string buffer into a char array to minimize size. */ public synchronized void close(String cset) throws UnsupportedEncodingException { + // if the response was already written and committed by the application + // there's no point in closing the response buffer + HttpServletResponse res = reqtrans.getServletResponse(); + if (res != null && res.isCommitted()) { + return; + } + // only use default charset if not explicitly set for this response. if (charset == null) { charset = cset; diff --git a/src/helma/servlet/AbstractServletClient.java b/src/helma/servlet/AbstractServletClient.java index 4c32377a..8f361ff3 100644 --- a/src/helma/servlet/AbstractServletClient.java +++ b/src/helma/servlet/AbstractServletClient.java @@ -253,6 +253,12 @@ public abstract class AbstractServletClient extends HttpServlet { ResponseTrans restrans = getApplication().execute(reqtrans); + // if the response was already written and committed by the application + // we can skip this part and return + if (response.isCommitted()) { + return; + } + // set cookies if (restrans.countCookies() > 0) { CookieTrans[] resCookies = restrans.getCookies();