diff options
author | Morten Tokle <mortent@verizonmedia.com> | 2021-04-21 08:42:04 +0200 |
---|---|---|
committer | Morten Tokle <mortent@verizonmedia.com> | 2021-04-21 08:42:04 +0200 |
commit | f36017d3f2709e2fa3e555269a4116482129ee2e (patch) | |
tree | ee214beda7621d24717a00771e9129160e4a2a9b /container-core/src/main/java/com/yahoo/jdisc | |
parent | fe1dfc345aa85b593ba536fa2607594751bb8d51 (diff) |
Get request handler spec through delegate
Diffstat (limited to 'container-core/src/main/java/com/yahoo/jdisc')
4 files changed, 36 insertions, 7 deletions
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLoggingRequestHandler.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLoggingRequestHandler.java index 842ab75a312..5b628d73ab8 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLoggingRequestHandler.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLoggingRequestHandler.java @@ -6,6 +6,7 @@ import com.yahoo.container.logging.AccessLogEntry; import com.yahoo.jdisc.Request; import com.yahoo.jdisc.handler.AbstractRequestHandler; import com.yahoo.jdisc.handler.ContentChannel; +import com.yahoo.jdisc.handler.DelegatedRequestHandler; import com.yahoo.jdisc.handler.RequestHandler; import com.yahoo.jdisc.handler.ResponseHandler; import com.yahoo.jdisc.http.HttpRequest; @@ -23,7 +24,7 @@ import java.util.Optional; * * @author bakksjo */ -public class AccessLoggingRequestHandler extends AbstractRequestHandler { +public class AccessLoggingRequestHandler extends AbstractRequestHandler implements DelegatedRequestHandler { public static final String CONTEXT_KEY_ACCESS_LOG_ENTRY = AccessLoggingRequestHandler.class.getName() + "_access-log-entry"; @@ -56,4 +57,8 @@ public class AccessLoggingRequestHandler extends AbstractRequestHandler { } + @Override + public RequestHandler getDelegate() { + return delegate; + } } diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FilteringRequestHandler.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FilteringRequestHandler.java index 27d122bcaa2..43acbb9b096 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FilteringRequestHandler.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FilteringRequestHandler.java @@ -10,6 +10,7 @@ import com.yahoo.jdisc.handler.AbstractRequestHandler; import com.yahoo.jdisc.handler.BindingNotFoundException; import com.yahoo.jdisc.handler.CompletionHandler; import com.yahoo.jdisc.handler.ContentChannel; +import com.yahoo.jdisc.handler.DelegatedRequestHandler; import com.yahoo.jdisc.handler.RequestDeniedException; import com.yahoo.jdisc.handler.RequestHandler; import com.yahoo.jdisc.handler.ResponseHandler; @@ -19,6 +20,7 @@ import com.yahoo.jdisc.http.filter.ResponseFilter; import java.nio.ByteBuffer; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; /** @@ -67,10 +69,8 @@ class FilteringRequestHandler extends AbstractRequestHandler { throw new BindingNotFoundException(request.getUri()); } - if (resolvedRequestHandler instanceof HttpRequestHandler) { - RequestHandlerSpec requestHandlerSpec = ((HttpRequestHandler) resolvedRequestHandler).requestHandlerSpec(); - request.context().put(RequestHandlerSpec.ATTRIBUTE_NAME, requestHandlerSpec); - } + getRequestHandlerSpec(resolvedRequestHandler) + .ifPresent(requestHandlerSpec -> request.context().put(RequestHandlerSpec.ATTRIBUTE_NAME, requestHandlerSpec)); RequestHandler requestHandler = new ReferenceCountingRequestHandler(resolvedRequestHandler); @@ -96,6 +96,18 @@ class FilteringRequestHandler extends AbstractRequestHandler { return contentChannel; } + private Optional<RequestHandlerSpec> getRequestHandlerSpec(RequestHandler resolvedRequestHandler) { + RequestHandler delegate = resolvedRequestHandler; + if (delegate instanceof DelegatedRequestHandler) { + delegate = ((DelegatedRequestHandler) delegate).getDelegateRecursive(); + } + if(delegate instanceof HttpRequestHandler) { + return Optional.ofNullable(((HttpRequestHandler) delegate).requestHandlerSpec()); + } else { + return Optional.empty(); + } + } + private static class FilteringResponseHandler implements ResponseHandler { private final ResponseHandler delegate; diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FormPostRequestHandler.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FormPostRequestHandler.java index 38f84438526..57fb32f89f0 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FormPostRequestHandler.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FormPostRequestHandler.java @@ -7,6 +7,7 @@ import com.yahoo.jdisc.ResourceReference; import com.yahoo.jdisc.handler.AbstractRequestHandler; import com.yahoo.jdisc.handler.CompletionHandler; import com.yahoo.jdisc.handler.ContentChannel; +import com.yahoo.jdisc.handler.DelegatedRequestHandler; import com.yahoo.jdisc.handler.RequestHandler; import com.yahoo.jdisc.handler.ResponseHandler; import com.yahoo.jdisc.http.HttpRequest; @@ -38,7 +39,7 @@ import static com.yahoo.jdisc.http.server.jetty.CompletionHandlerUtils.NOOP_COMP * @author bakksjo * $Id$ */ -class FormPostRequestHandler extends AbstractRequestHandler implements ContentChannel { +class FormPostRequestHandler extends AbstractRequestHandler implements ContentChannel, DelegatedRequestHandler { private final ByteArrayOutputStream accumulatedRequestContent = new ByteArrayOutputStream(); private final RequestHandler delegateHandler; @@ -185,4 +186,9 @@ class FormPostRequestHandler extends AbstractRequestHandler implements ContentCh } } } + + @Override + public RequestHandler getDelegate() { + return delegateHandler; + } } diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ReferenceCountingRequestHandler.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ReferenceCountingRequestHandler.java index f2bf5b56d5c..71cca62ce9c 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ReferenceCountingRequestHandler.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ReferenceCountingRequestHandler.java @@ -7,6 +7,7 @@ import com.yahoo.jdisc.Response; import com.yahoo.jdisc.SharedResource; import com.yahoo.jdisc.handler.CompletionHandler; import com.yahoo.jdisc.handler.ContentChannel; +import com.yahoo.jdisc.handler.DelegatedRequestHandler; import com.yahoo.jdisc.handler.NullContent; import com.yahoo.jdisc.handler.RequestHandler; import com.yahoo.jdisc.handler.ResponseHandler; @@ -26,7 +27,7 @@ import java.util.logging.Logger; * @author bakksjo */ @SuppressWarnings("try") -class ReferenceCountingRequestHandler implements RequestHandler { +class ReferenceCountingRequestHandler implements DelegatedRequestHandler { private static final Logger log = Logger.getLogger(ReferenceCountingRequestHandler.class.getName()); @@ -79,6 +80,11 @@ class ReferenceCountingRequestHandler implements RequestHandler { return delegate.toString(); } + @Override + public RequestHandler getDelegate() { + return delegate; + } + private static class ReferenceCountingResponseHandler implements ResponseHandler { final SharedResource request; |