33import com .networknt .aws .lambda .LightLambdaExchange ;
44import com .networknt .aws .lambda .handler .LambdaHandler ;
55import com .networknt .aws .lambda .handler .chain .ChainLinkCallback ;
6+ import com .networknt .aws .lambda .handler .middleware .router .LambdaRouterMiddleware ;
7+ import org .slf4j .Logger ;
8+ import org .slf4j .LoggerFactory ;
69
710public class MiddlewareRunnable implements Runnable {
11+ private static final Logger LOG = LoggerFactory .getLogger (MiddlewareRunnable .class );
812
913 private final LambdaHandler middlewareHandler ;
1014 private final LightLambdaExchange exchange ;
@@ -19,7 +23,18 @@ public MiddlewareRunnable(LambdaHandler middlewareHandler, LightLambdaExchange e
1923
2024 @ Override
2125 public void run () {
26+ if (LOG .isTraceEnabled ()) LOG .trace ("Executing middleware {} isResponseMiddleware {} isRequestComplete {}" , this .middlewareHandler .getClass ().getSimpleName (), this .middlewareHandler .isResponseMiddleware (), this .exchange .isRequestComplete ());
2227 try {
28+ if (!this .middlewareHandler .isResponseMiddleware () && this .exchange .isRequestComplete ()) {
29+ // skip the request chain if the request is completed for all request middleware.
30+ if (LOG .isTraceEnabled ()) LOG .trace ("Skipping request middleware {} as request is already complete" , this .middlewareHandler .getClass ().getSimpleName ());
31+ return ;
32+ }
33+ if (this .middlewareHandler .isResponseMiddleware () && this .exchange .isResponseComplete ()) {
34+ // skip the response chain if the response is completed for all response middleware.
35+ if (LOG .isTraceEnabled ()) LOG .trace ("Skipping response middleware {} as response is already complete" , this .middlewareHandler .getClass ().getSimpleName ());
36+ return ;
37+ }
2338 var status = this .middlewareHandler .execute (this .exchange );
2439 this .callback .callback (this .exchange , status );
2540
0 commit comments