aboutsummaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2021-12-03 10:43:44 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2021-12-03 12:34:52 +0100
commite04f95504e5469ae7e30dddc7cab69fdb5973004 (patch)
treeb106f5d135b8428f915d2fb030e4359639955d6e /container-core
parent19e8b5b05b1f220164bcf89e4e43feb4db6af84b (diff)
Make DiscFilterResponse concrete and remove package-private sub-class
Make DiscFilterResponse opereate directly on a jdisc-core Response instance. Reduce use of jdisc-core types from its public API.
Diffstat (limited to 'container-core')
-rw-r--r--container-core/abi-spec.json19
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterResponse.java61
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/filter/JdiscFilterResponse.java67
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/filter/SecurityResponseFilterChain.java2
-rw-r--r--container-core/src/test/java/com/yahoo/jdisc/http/filter/DiscFilterResponseTest.java15
5 files changed, 62 insertions, 102 deletions
diff --git a/container-core/abi-spec.json b/container-core/abi-spec.json
index 467f22b95ed..412a86b203f 100644
--- a/container-core/abi-spec.json
+++ b/container-core/abi-spec.json
@@ -2247,8 +2247,7 @@
"superClass": "java.lang.Object",
"interfaces": [],
"attributes": [
- "public",
- "abstract"
+ "public"
],
"methods": [
"public void <init>(com.yahoo.jdisc.http.HttpResponse)",
@@ -2258,16 +2257,16 @@
"public void removeAttribute(java.lang.String)",
"public com.yahoo.jdisc.HeaderFields getUntreatedHeaders()",
"public java.util.List getUntreatedCookies()",
- "public abstract void setHeader(java.lang.String, java.lang.String)",
- "public abstract void removeHeaders(java.lang.String)",
- "public abstract void setHeaders(java.lang.String, java.lang.String)",
- "public abstract void setHeaders(java.lang.String, java.util.List)",
- "public abstract void addHeader(java.lang.String, java.lang.String)",
- "public abstract java.lang.String getHeader(java.lang.String)",
+ "public void setHeader(java.lang.String, java.lang.String)",
+ "public void removeHeaders(java.lang.String)",
+ "public void setHeaders(java.lang.String, java.lang.String)",
+ "public void setHeaders(java.lang.String, java.util.List)",
+ "public void addHeader(java.lang.String, java.lang.String)",
+ "public java.lang.String getHeader(java.lang.String)",
"public java.util.List getCookies()",
- "public abstract void setCookies(java.util.List)",
+ "public void setCookies(java.util.List)",
"public int getStatus()",
- "public abstract void setStatus(int)",
+ "public void setStatus(int)",
"public com.yahoo.jdisc.http.HttpResponse getParentResponse()",
"public void addCookie(com.yahoo.jdisc.http.filter.JDiscCookieWrapper)",
"public void sendError(int)",
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterResponse.java b/container-core/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterResponse.java
index c187a2f032f..af768a98d2d 100644
--- a/container-core/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterResponse.java
+++ b/container-core/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterResponse.java
@@ -2,7 +2,9 @@
package com.yahoo.jdisc.http.filter;
import com.yahoo.jdisc.HeaderFields;
+import com.yahoo.jdisc.Response;
import com.yahoo.jdisc.http.Cookie;
+import com.yahoo.jdisc.http.CookieHelper;
import com.yahoo.jdisc.http.HttpResponse;
import java.io.IOException;
@@ -13,22 +15,24 @@ import java.util.Enumeration;
import java.util.List;
/**
- * This class was made abstract from 5.27. Test cases that need
- * a concrete instance should create a {@link JdiscFilterResponse}.
+ * Response type for {@link SecurityResponseFilter}.
*
- * @author tejalk
+ * @author Tejal Knot
+ * @author bjorncs
*/
-public abstract class DiscFilterResponse {
+public class DiscFilterResponse {
- private final HttpResponse parent;
+ private final Response parent;
private final HeaderFields untreatedHeaders;
private final List<Cookie> untreatedCookies;
- public DiscFilterResponse(HttpResponse parent) {
+ public DiscFilterResponse(HttpResponse parent) { this((Response)parent); }
+
+ DiscFilterResponse(Response parent) {
this.parent = parent;
this.untreatedHeaders = new HeaderFields();
- parent.copyHeaders(untreatedHeaders);
+ untreatedHeaders.addAll(parent.headers());
this.untreatedCookies = getCookies();
}
@@ -71,48 +75,71 @@ public abstract class DiscFilterResponse {
* <p>
* If the header had already been set, the new value overwrites the previous one.
*/
- public abstract void setHeader(String name, String value);
+ public void setHeader(String name, String value) {
+ parent.headers().put(name, value);
+ }
- public abstract void removeHeaders(String name);
+ public void removeHeaders(String name) {
+ parent.headers().remove(name);
+ }
/**
* Sets a header with the given name and value.
* <p>
* If the header had already been set, the new value overwrites the previous one.
*/
- public abstract void setHeaders(String name, String value);
+ public void setHeaders(String name, String value) {
+ parent.headers().put(name, value);
+ }
/**
* Sets a header with the given name and value.
* <p>
* If the header had already been set, the new value overwrites the previous one.
*/
- public abstract void setHeaders(String name, List<String> values);
+ public void setHeaders(String name, List<String> values) {
+ parent.headers().put(name, values);
+ }
/**
* Adds a header with the given name and value
* @see com.yahoo.jdisc.HeaderFields#add
*/
- public abstract void addHeader(String name, String value);
+ public void addHeader(String name, String value) {
+ parent.headers().add(name, value);
+ }
- public abstract String getHeader(String name);
+ public String getHeader(String name) {
+ List<String> values = parent.headers().get(name);
+ if (values == null || values.isEmpty()) {
+ return null;
+ }
+ return values.get(values.size() - 1);
+ }
public List<Cookie> getCookies() {
- return parent.decodeSetCookieHeader();
+ return CookieHelper.decodeSetCookieHeader(parent.headers());
}
- public abstract void setCookies(List<Cookie> cookies);
+ public void setCookies(List<Cookie> cookies) {
+ CookieHelper.encodeSetCookieHeader(parent.headers(), cookies);
+ }
public int getStatus() {
return parent.getStatus();
}
- public abstract void setStatus(int status);
+ public void setStatus(int status) {
+ parent.setStatus(status);
+ }
/**
* Return the parent HttpResponse
+ *
+ * @deprecated Use methods on {@link DiscFilterResponse} instead
*/
- public HttpResponse getParentResponse() { return parent; }
+ @Deprecated(forRemoval = true, since = "7.511")
+ public HttpResponse getParentResponse() { return (HttpResponse) parent; }
public void addCookie(JDiscCookieWrapper cookie) {
if(cookie != null) {
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/filter/JdiscFilterResponse.java b/container-core/src/main/java/com/yahoo/jdisc/http/filter/JdiscFilterResponse.java
deleted file mode 100644
index 3b035987c8a..00000000000
--- a/container-core/src/main/java/com/yahoo/jdisc/http/filter/JdiscFilterResponse.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.jdisc.http.filter;
-
-import com.yahoo.jdisc.Response;
-import com.yahoo.jdisc.http.Cookie;
-import com.yahoo.jdisc.http.CookieHelper;
-import com.yahoo.jdisc.http.HttpResponse;
-
-import java.util.List;
-
-/**
- * JDisc implementation of a filter request.
- */
-class JdiscFilterResponse extends DiscFilterResponse {
-
- private final Response parent;
-
- JdiscFilterResponse(Response parent) {
- super((HttpResponse)parent);
- this.parent = parent;
- }
-
- @Override
- public void setStatus(int status) {
- parent.setStatus(status);
- }
-
- @Override
- public void setHeader(String name, String value) {
- parent.headers().put(name, value);
- }
-
- @Override
- public void removeHeaders(String name) {
- parent.headers().remove(name);
- }
-
- @Override
- public void setHeaders(String name, String value) {
- parent.headers().put(name, value);
- }
-
- @Override
- public void setHeaders(String name, List<String> values) {
- parent.headers().put(name, values);
- }
-
- @Override
- public void addHeader(String name, String value) {
- parent.headers().add(name, value);
- }
-
- @Override
- public String getHeader(String name) {
- List<String> values = parent.headers().get(name);
- if (values == null || values.isEmpty()) {
- return null;
- }
- return values.get(values.size() - 1);
- }
-
- @Override
- public void setCookies(List<Cookie> cookies) {
- CookieHelper.encodeSetCookieHeader(parent.headers(), cookies);
- }
-
-}
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/filter/SecurityResponseFilterChain.java b/container-core/src/main/java/com/yahoo/jdisc/http/filter/SecurityResponseFilterChain.java
index 91a1da329e5..f74b0ebb5c9 100644
--- a/container-core/src/main/java/com/yahoo/jdisc/http/filter/SecurityResponseFilterChain.java
+++ b/container-core/src/main/java/com/yahoo/jdisc/http/filter/SecurityResponseFilterChain.java
@@ -30,7 +30,7 @@ public class SecurityResponseFilterChain extends AbstractResource implements Res
@Override
public void filter(Response response, Request request) {
- DiscFilterResponse discFilterResponse = new JdiscFilterResponse(response);
+ DiscFilterResponse discFilterResponse = new DiscFilterResponse(response);
RequestView requestView = new RequestViewImpl(request);
filter(requestView, discFilterResponse);
}
diff --git a/container-core/src/test/java/com/yahoo/jdisc/http/filter/DiscFilterResponseTest.java b/container-core/src/test/java/com/yahoo/jdisc/http/filter/DiscFilterResponseTest.java
index c49a4deed4e..bbb81ae3308 100644
--- a/container-core/src/test/java/com/yahoo/jdisc/http/filter/DiscFilterResponseTest.java
+++ b/container-core/src/test/java/com/yahoo/jdisc/http/filter/DiscFilterResponseTest.java
@@ -36,7 +36,7 @@ public class DiscFilterResponseTest {
public void testGetSetStatus() {
HttpRequest request = newRequest(URI.create("http://localhost:8080/echo"),
HttpRequest.Method.GET, HttpRequest.Version.HTTP_1_1);
- DiscFilterResponse response = new JdiscFilterResponse(HttpResponse.newInstance(HttpResponse.Status.OK));
+ DiscFilterResponse response = new DiscFilterResponse(HttpResponse.newInstance(HttpResponse.Status.OK));
Assert.assertEquals(response.getStatus(), HttpResponse.Status.OK);
response.setStatus(HttpResponse.Status.REQUEST_TIMEOUT);
@@ -47,7 +47,7 @@ public class DiscFilterResponseTest {
public void testAttributes() {
HttpRequest request = newRequest(URI.create("http://localhost:8080/echo"),
HttpRequest.Method.GET, HttpRequest.Version.HTTP_1_1);
- DiscFilterResponse response = new JdiscFilterResponse(HttpResponse.newInstance(HttpResponse.Status.OK));
+ DiscFilterResponse response = new DiscFilterResponse(HttpResponse.newInstance(HttpResponse.Status.OK));
response.setAttribute("attr_1", "value1");
Assert.assertEquals(response.getAttribute("attr_1"), "value1");
List<String> list = Collections.list(response.getAttributeNames());
@@ -60,7 +60,7 @@ public class DiscFilterResponseTest {
public void testAddHeader() {
HttpRequest request = newRequest(URI.create("http://localhost:8080/echo"),
HttpRequest.Method.GET, HttpRequest.Version.HTTP_1_1);
- DiscFilterResponse response = new JdiscFilterResponse(HttpResponse.newInstance(HttpResponse.Status.OK));
+ DiscFilterResponse response = new DiscFilterResponse(HttpResponse.newInstance(HttpResponse.Status.OK));
response.addHeader("header1", "value1");
Assert.assertEquals(response.getHeader("header1"), "value1");
}
@@ -70,7 +70,7 @@ public class DiscFilterResponseTest {
URI uri = URI.create("http://example.com/test");
HttpRequest httpReq = newRequest(uri, HttpRequest.Method.GET, HttpRequest.Version.HTTP_1_1);
HttpResponse httpResp = newResponse(httpReq, 200);
- DiscFilterResponse response = new JdiscFilterResponse(httpResp);
+ DiscFilterResponse response = new DiscFilterResponse(httpResp);
response.addCookie(JDiscCookieWrapper.wrap(new Cookie("name", "value")));
List<Cookie> cookies = response.getCookies();
@@ -83,7 +83,7 @@ public class DiscFilterResponseTest {
URI uri = URI.create("http://example.com/test");
HttpRequest httpReq = newRequest(uri, HttpRequest.Method.GET, HttpRequest.Version.HTTP_1_1);
HttpResponse httpResp = newResponse(httpReq, 200);
- DiscFilterResponse response = new JdiscFilterResponse(httpResp);
+ DiscFilterResponse response = new DiscFilterResponse(httpResp);
response.setCookie("name", "value");
List<Cookie> cookies = response.getCookies();
Assert.assertEquals(cookies.size(),1);
@@ -96,17 +96,18 @@ public class DiscFilterResponseTest {
URI uri = URI.create("http://example.com/test");
HttpRequest httpReq = newRequest(uri, HttpRequest.Method.GET, HttpRequest.Version.HTTP_1_1);
HttpResponse httpResp = newResponse(httpReq, 200);
- DiscFilterResponse response = new JdiscFilterResponse(httpResp);
+ DiscFilterResponse response = new DiscFilterResponse(httpResp);
response.setHeader("name", "value");
Assert.assertEquals(response.getHeader("name"), "value");
}
@Test
+ @SuppressWarnings("removal")
public void testGetParentResponse() {
URI uri = URI.create("http://example.com/test");
HttpRequest httpReq = newRequest(uri, HttpRequest.Method.GET, HttpRequest.Version.HTTP_1_1);
HttpResponse httpResp = newResponse(httpReq, 200);
- DiscFilterResponse response = new JdiscFilterResponse(httpResp);
+ DiscFilterResponse response = new DiscFilterResponse(httpResp);
Assert.assertSame(response.getParentResponse(), httpResp);
}