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

bonampak pushed a commit to branch feature/jakarta-jetty-upgrade
in repository https://gitbox.apache.org/repos/asf/knox.git

commit 8c177f44bf11faf0321a45d7a4cda36162072a24
Author: bonampak <[email protected]>
AuthorDate: Thu Mar 12 15:21:10 2026 +0100

    KNOX-3238: correcting CorrelationHandler (thread context will not work in 
Jetty 12, as Jetty will use 1...n threads for a request / response exchange).
---
 .../knox/gateway/filter/CorrelationHandler.java    | 31 +++++++++++-----------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/filter/CorrelationHandler.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/filter/CorrelationHandler.java
index 01b34cc49..6b732f8c1 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/filter/CorrelationHandler.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/filter/CorrelationHandler.java
@@ -17,41 +17,40 @@
  */
 package org.apache.knox.gateway.filter;
 
-import java.io.IOException;
 import java.util.UUID;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.knox.gateway.audit.api.CorrelationContext;
 import org.apache.knox.gateway.audit.api.CorrelationService;
 import org.apache.knox.gateway.audit.api.CorrelationServiceFactory;
 import org.apache.knox.gateway.audit.log4j.correlation.Log4jCorrelationContext;
 import org.apache.logging.log4j.CloseableThreadContext;
+import org.eclipse.jetty.server.Handler;
 import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.handler.HandlerWrapper;
+import org.eclipse.jetty.server.Response;
+import org.eclipse.jetty.util.Callback;
 
-public class CorrelationHandler extends HandlerWrapper {
+public class CorrelationHandler extends Handler.Wrapper {
   public static final String REQUEST_ID_HEADER_NAME = "X-Request-Id";
   public static final String TRACE_ID = "trace_id";
 
   @Override
-  public void handle( String target, Request baseRequest, HttpServletRequest 
request, HttpServletResponse response )
-      throws IOException, ServletException {
+  public boolean handle(Request request, Response response, Callback callback) 
throws Exception {
     CorrelationService correlationService = 
CorrelationServiceFactory.getCorrelationService();
     /* If request contains X-Request-Id header use it else use random uuid as 
correlation id */
-    final String reqID =
-        StringUtils.isBlank(request.getHeader(REQUEST_ID_HEADER_NAME)) ?
-            UUID.randomUUID().toString() :
-            request.getHeader(REQUEST_ID_HEADER_NAME);
+    final String requestIdHeaderValue = 
request.getHeaders().get(REQUEST_ID_HEADER_NAME);
+    final String reqID = StringUtils.isBlank(requestIdHeaderValue) ?
+        UUID.randomUUID().toString() :
+        requestIdHeaderValue;
 
-    correlationService.attachContext(
-            new Log4jCorrelationContext(reqID,
-                null, null));
+    CorrelationContext context = new Log4jCorrelationContext(reqID, null, 
null);
+
+    correlationService.attachContext(context);
     try(CloseableThreadContext.Instance ctc = 
CloseableThreadContext.put(TRACE_ID, reqID)) {
-      super.handle( target, baseRequest, request, response );
+      return super.handle(request, response, callback);
     } finally {
       correlationService.detachContext();
     }
   }
+
 }

Reply via email to