diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-12-03 10:43:44 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-12-03 12:34:52 +0100 |
commit | e04f95504e5469ae7e30dddc7cab69fdb5973004 (patch) | |
tree | b106f5d135b8428f915d2fb030e4359639955d6e /container-core/src | |
parent | 19e8b5b05b1f220164bcf89e4e43feb4db6af84b (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/src')
4 files changed, 53 insertions, 92 deletions
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); } |