@@ -108,7 +108,16 @@ index 9341bf6f79..f719c1ea93 100644
108108 import java.util.Map;
109109 import javax.annotation.Nullable;
110110
111- @@ -47,8 +46,8 @@ public class AwsLambdaFunctionInstrumenter {
111+ @@ -22,8 +21,6 @@ import javax.annotation.Nullable;
112+ */
113+ public class AwsLambdaFunctionInstrumenter {
114+
115+ - private static final MapGetter mapGetter = new MapGetter();
116+ -
117+ private final OpenTelemetry openTelemetry;
118+ final Instrumenter<AwsLambdaRequest, Object> instrumenter;
119+
120+ @@ -49,8 +46,8 @@ public class AwsLambdaFunctionInstrumenter {
112121 instrumenter.end(context, input, response, error);
113122 }
114123
@@ -119,36 +128,39 @@ index 9341bf6f79..f719c1ea93 100644
119128 // Look in both the http headers and the custom client context
120129 Map<String, String> headers = input.getHeaders();
121130 if (input.getAwsContext() != null && input.getAwsContext().getClientContext() != null) {
122- @@ -59,23 +58,15 @@ public class AwsLambdaFunctionInstrumenter {
131+ @@ -61,26 +58,15 @@ public class AwsLambdaFunctionInstrumenter {
123132 }
124133 }
125134
126- - return openTelemetry
127- - .getPropagators()
128- - .getTextMapPropagator()
129- - .extract(Context.root(), headers, MapGetter.INSTANCE);
130135+ return ParentContextExtractor.extract(headers, this, lambdaContext);
136+ + }
137+ +
138+ + public Context extract(Map<String, String> headers, TextMapGetter<Map<String, String>> getter) {
139+ + ContextPropagationDebug.debugContextLeakIfEnabled();
140+ +
141+ return openTelemetry
142+ .getPropagators()
143+ .getTextMapPropagator()
144+ - .extract(Context.root(), headers, mapGetter);
145+ + .extract(Context.root(), headers, getter);
131146 }
132-
133- - private enum MapGetter implements TextMapGetter<Map<String, String>> {
134- - INSTANCE;
147+ -
148+ - private static class MapGetter implements TextMapGetter<Map<String, String>> {
135149-
136150- @Override
137151- public Iterable<String> keys(Map<String, String> map) {
138152- return map.keySet();
139153- }
140- + public Context extract(Map<String, String> headers, TextMapGetter<Map<String, String>> getter) {
141- + ContextPropagationDebug.debugContextLeakIfEnabled();
142-
154+ -
143155- @Override
144- - public String get(Map<String, String> map, String s) {
156+ - @Nullable
157+ - public String get(@Nullable Map<String, String> map, String s) {
158+ - if (map == null) {
159+ - return null;
160+ - }
145161- return map.get(s.toLowerCase(Locale.ROOT));
146162- }
147- + return openTelemetry
148- + .getPropagators()
149- + .getTextMapPropagator()
150- + .extract(Context.root(), headers, getter);
151- }
163+ - }
152164 }
153165diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java
154166new file mode 100644
@@ -678,10 +690,10 @@ index a46c2d24de..71a2264042 100644
678690--- a/version.gradle.kts
679691+++ b/version.gradle.kts
680692@@ -1,5 +1,5 @@
681- - val stableVersion = "2.26 .1"
682- - val alphaVersion = "2.26 .1-alpha"
683- + val stableVersion = "2.26 .1-adot-lambda1"
684- + val alphaVersion = "2.26 .1-adot-lambda1-alpha"
693+ - val stableVersion = "2.28 .1"
694+ - val alphaVersion = "2.28 .1-alpha"
695+ + val stableVersion = "2.28 .1-adot-lambda1"
696+ + val alphaVersion = "2.28 .1-adot-lambda1-alpha"
685697
686698 allprojects {
687699 if (findProperty("otel.stable") != "true") {
0 commit comments