aboutsummaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com/yahoo/jdisc
diff options
context:
space:
mode:
authorMorten Tokle <mortent@verizonmedia.com>2021-04-21 08:42:04 +0200
committerMorten Tokle <mortent@verizonmedia.com>2021-04-21 08:42:04 +0200
commitf36017d3f2709e2fa3e555269a4116482129ee2e (patch)
treeee214beda7621d24717a00771e9129160e4a2a9b /container-core/src/main/java/com/yahoo/jdisc
parentfe1dfc345aa85b593ba536fa2607594751bb8d51 (diff)
Get request handler spec through delegate
Diffstat (limited to 'container-core/src/main/java/com/yahoo/jdisc')
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLoggingRequestHandler.java7
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FilteringRequestHandler.java20
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/FormPostRequestHandler.java8
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ReferenceCountingRequestHandler.java8
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;