This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/main by this push:
     new 418328a412 Refactor to enforce 1-2-1 mapping between response and 
Coyote response
418328a412 is described below

commit 418328a412008e51b0f1dd954ada6f011b5cc6f0
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Aug 9 19:41:18 2023 +0100

    Refactor to enforce 1-2-1 mapping between response and Coyote response
---
 java/org/apache/catalina/connector/Connector.java  | 12 ++--
 .../apache/catalina/connector/CoyoteAdapter.java   |  6 +-
 java/org/apache/catalina/connector/Response.java   | 70 ++++++++++------------
 .../apache/catalina/connector/TestResponse.java    | 46 +++++++-------
 .../connector/TestResponsePerformance.java         |  2 +-
 .../apache/catalina/core/TestAsyncContextImpl.java |  2 +-
 .../catalina/valves/TestRequestFilterValve.java    |  5 ++
 .../org/apache/tomcat/unittest/TesterResponse.java | 13 ++--
 8 files changed, 72 insertions(+), 84 deletions(-)

diff --git a/java/org/apache/catalina/connector/Connector.java 
b/java/org/apache/catalina/connector/Connector.java
index 190c3aa3fa..25b3df6874 100644
--- a/java/org/apache/catalina/connector/Connector.java
+++ b/java/org/apache/catalina/connector/Connector.java
@@ -902,17 +902,19 @@ public class Connector extends LifecycleMBeanBase {
 
 
     /**
-     * Create (or allocate) and return a Response object suitable for 
receiving the contents of a Response from the
-     * responsible Container.
+     * Create and return a Response object suitable for receiving the contents 
of a Response from the responsible
+     * Container.
+     *
+     * @param coyoteResponse The associated Coyote response.
      *
      * @return a new Servlet response object
      */
-    public Response createResponse() {
+    public Response createResponse(org.apache.coyote.Response coyoteResponse) {
         int size = protocolHandler.getDesiredBufferSize();
         if (size > 0) {
-            return new Response(size);
+            return new Response(coyoteResponse, size);
         } else {
-            return new Response();
+            return new Response(coyoteResponse);
         }
     }
 
diff --git a/java/org/apache/catalina/connector/CoyoteAdapter.java 
b/java/org/apache/catalina/connector/CoyoteAdapter.java
index 5ae62570a3..da8d63a66c 100644
--- a/java/org/apache/catalina/connector/CoyoteAdapter.java
+++ b/java/org/apache/catalina/connector/CoyoteAdapter.java
@@ -306,8 +306,7 @@ public class CoyoteAdapter implements Adapter {
             // Create objects
             request = connector.createRequest();
             request.setCoyoteRequest(req);
-            response = connector.createResponse();
-            response.setCoyoteResponse(res);
+            response = connector.createResponse(res);
 
             // Link objects
             request.setResponse(response);
@@ -453,8 +452,7 @@ public class CoyoteAdapter implements Adapter {
             // Create objects
             request = connector.createRequest();
             request.setCoyoteRequest(req);
-            response = connector.createResponse();
-            response.setCoyoteResponse(res);
+            response = connector.createResponse(res);
 
             // Link objects
             request.setResponse(response);
diff --git a/java/org/apache/catalina/connector/Response.java 
b/java/org/apache/catalina/connector/Response.java
index 124a5d67bc..db77a6971b 100644
--- a/java/org/apache/catalina/connector/Response.java
+++ b/java/org/apache/catalina/connector/Response.java
@@ -73,49 +73,10 @@ public class Response implements HttpServletResponse {
 
     private static final MediaTypeCache MEDIA_TYPE_CACHE = new 
MediaTypeCache(100);
 
-    // ----------------------------------------------------- Instance Variables
-
-    public Response() {
-        this(OutputBuffer.DEFAULT_BUFFER_SIZE);
-    }
-
-
-    public Response(int outputBufferSize) {
-        outputBuffer = new OutputBuffer(outputBufferSize);
-    }
-
-
-    // ------------------------------------------------------------- Properties
-
     /**
      * Coyote response.
      */
-    protected org.apache.coyote.Response coyoteResponse;
-
-    /**
-     * Set the Coyote response.
-     *
-     * @param coyoteResponse The Coyote response
-     */
-    public void setCoyoteResponse(org.apache.coyote.Response coyoteResponse) {
-        this.coyoteResponse = coyoteResponse;
-        outputBuffer.setResponse(coyoteResponse);
-    }
-
-    /**
-     * @return the Coyote response.
-     */
-    public org.apache.coyote.Response getCoyoteResponse() {
-        return this.coyoteResponse;
-    }
-
-
-    /**
-     * @return the Context within which this Request is being processed.
-     */
-    public Context getContext() {
-        return request.getContext();
-    }
+    protected final org.apache.coyote.Response coyoteResponse;
 
 
     /**
@@ -187,8 +148,37 @@ public class Response implements HttpServletResponse {
     private HttpServletResponse applicationResponse = null;
 
 
+    public Response(org.apache.coyote.Response coyoteResponse) {
+        this(coyoteResponse, OutputBuffer.DEFAULT_BUFFER_SIZE);
+    }
+
+
+    public Response(org.apache.coyote.Response coyoteResponse, int 
outputBufferSize) {
+        this.coyoteResponse = coyoteResponse;
+        outputBuffer = new OutputBuffer(outputBufferSize);
+        outputBuffer.setResponse(coyoteResponse);
+    }
+
+
+
     // --------------------------------------------------------- Public Methods
 
+    /**
+     * @return the Coyote response.
+     */
+    public org.apache.coyote.Response getCoyoteResponse() {
+        return this.coyoteResponse;
+    }
+
+
+    /**
+     * @return the Context within which this Request is being processed.
+     */
+    public Context getContext() {
+        return request.getContext();
+    }
+
+
     /**
      * Release all object references, and initialize instance variables, in 
preparation for reuse of this object.
      */
diff --git a/test/org/apache/catalina/connector/TestResponse.java 
b/test/org/apache/catalina/connector/TestResponse.java
index 56ab01bb26..13f56b6a32 100644
--- a/test/org/apache/catalina/connector/TestResponse.java
+++ b/test/org/apache/catalina/connector/TestResponse.java
@@ -163,7 +163,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062a() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("./bar.html");
@@ -176,7 +176,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062b() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute(".");
@@ -188,7 +188,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062c() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("..");
@@ -200,7 +200,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062d() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute(".././..");
@@ -212,7 +212,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test(expected=IllegalArgumentException.class)
     public void testBug53062e() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         resp.toAbsolute("../../..");
@@ -222,7 +222,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062f() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("bar.html");
@@ -235,7 +235,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062g() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("bar.html?x=/../");
@@ -248,7 +248,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062h() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("bar.html?x=/../../");
@@ -262,7 +262,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062i() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("./.?x=/../../");
@@ -275,7 +275,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062j() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("./..?x=/../../");
@@ -287,7 +287,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062k() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("./..?x=/../..");
@@ -301,7 +301,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062l() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("bar.html#/../");
@@ -314,7 +314,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062m() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("bar.html#/../../");
@@ -327,7 +327,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062n() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("./.#/../../");
@@ -340,7 +340,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062o() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("./..#/../../");
@@ -352,7 +352,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53062p() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.toAbsolute("./..#/../..");
@@ -365,7 +365,7 @@ public class TestResponse extends TomcatBaseTest {
         Request req = new TesterRequest(true);
         req.setRequestedSessionId("1234");
         req.setRequestedSessionURL(true);
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.encodeURL(location);
@@ -472,7 +472,7 @@ public class TestResponse extends TomcatBaseTest {
         Request req = new TesterRequest(true);
         req.setRequestedSessionId("1234");
         req.setRequestedSessionURL(true);
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.encodeRedirectURL(location);
@@ -599,8 +599,7 @@ public class TestResponse extends TomcatBaseTest {
         // Note: Not sufficient for testing relative -> absolute
         Connector connector = new Connector();
         org.apache.coyote.Response cResponse = new 
org.apache.coyote.Response();
-        Response response = new Response();
-        response.setCoyoteResponse(cResponse);
+        Response response = new Response(cResponse);
         Request request = new Request(connector);
         org.apache.coyote.Request cRequest = new org.apache.coyote.Request();
         request.setCoyoteRequest(cRequest);
@@ -617,7 +616,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53469a() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.encodeURL("../bar.html");
@@ -629,7 +628,7 @@ public class TestResponse extends TomcatBaseTest {
     @Test
     public void testBug53469b() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         String result = resp.encodeURL("../../../../bar.html");
@@ -963,8 +962,7 @@ public class TestResponse extends TomcatBaseTest {
     private Response setupResponse() {
         Connector connector = new Connector();
         org.apache.coyote.Response cResponse = new 
org.apache.coyote.Response();
-        Response response = new Response();
-        response.setCoyoteResponse(cResponse);
+        Response response = new Response(cResponse);
         Request request = new Request(connector);
         org.apache.coyote.Request cRequest = new org.apache.coyote.Request();
         request.setCoyoteRequest(cRequest);
diff --git a/test/org/apache/catalina/connector/TestResponsePerformance.java 
b/test/org/apache/catalina/connector/TestResponsePerformance.java
index 044fcfd3da..100a20b38f 100644
--- a/test/org/apache/catalina/connector/TestResponsePerformance.java
+++ b/test/org/apache/catalina/connector/TestResponsePerformance.java
@@ -31,7 +31,7 @@ public class TestResponsePerformance extends LoggingBaseTest {
     @Test
     public void testToAbsolutePerformance() throws Exception {
         Request req = new TesterRequest();
-        Response resp = new Response();
+        Response resp = new Response(null);
         resp.setRequest(req);
 
         // Warm up
diff --git a/test/org/apache/catalina/core/TestAsyncContextImpl.java 
b/test/org/apache/catalina/core/TestAsyncContextImpl.java
index 23f36dfb60..ae24190742 100644
--- a/test/org/apache/catalina/core/TestAsyncContextImpl.java
+++ b/test/org/apache/catalina/core/TestAsyncContextImpl.java
@@ -2551,7 +2551,7 @@ public class TestAsyncContextImpl extends TomcatBaseTest {
             }
         };
         final Context context = new TesterContext();
-        final Response response = new Response();
+        final Response response = new Response(null);
         final Request request = new Request(null);
         request.setCoyoteRequest(new org.apache.coyote.Request());
         request.getMappingData().context = context;
diff --git a/test/org/apache/catalina/valves/TestRequestFilterValve.java 
b/test/org/apache/catalina/valves/TestRequestFilterValve.java
index 2deb7db5a4..eb83ed1d9c 100644
--- a/test/org/apache/catalina/valves/TestRequestFilterValve.java
+++ b/test/org/apache/catalina/valves/TestRequestFilterValve.java
@@ -79,6 +79,11 @@ public class TestRequestFilterValve {
     }
 
     public static class MockResponse extends Response {
+
+        public MockResponse() {
+            super(null);
+        }
+
         private int status = OK;
 
         @Override
diff --git a/test/org/apache/tomcat/unittest/TesterResponse.java 
b/test/org/apache/tomcat/unittest/TesterResponse.java
index 59f79ee315..68b862d14e 100644
--- a/test/org/apache/tomcat/unittest/TesterResponse.java
+++ b/test/org/apache/tomcat/unittest/TesterResponse.java
@@ -26,6 +26,10 @@ import org.apache.catalina.connector.Response;
  */
 public class TesterResponse extends Response {
 
+    public TesterResponse() {
+        super(new org.apache.coyote.Response());
+    }
+
     @Override
     public boolean isCommitted() {
         return false;
@@ -47,15 +51,6 @@ public class TesterResponse extends Response {
         // on one being present or on this method resetting it.
     }
 
-    @Override
-    public org.apache.coyote.Response getCoyoteResponse() {
-        // Lazy init
-        if (super.getCoyoteResponse() == null) {
-            this.coyoteResponse = new org.apache.coyote.Response();
-        }
-        return super.getCoyoteResponse();
-    }
-
     @Override
     public void setSuspended(boolean suspended) {
         // NO-OP by default.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to