diff --git a/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/SpringBootActuatorInstrumentationModule.java b/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/SpringBootActuatorInstrumentationModule.java index 1aa98998b3..f32dfe21b5 100644 --- a/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/SpringBootActuatorInstrumentationModule.java +++ b/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/SpringBootActuatorInstrumentationModule.java @@ -32,7 +32,7 @@ public class SpringBootActuatorInstrumentationModule extends InstrumentationModu public void registerHelperResources(HelperResourceBuilder helperResourceBuilder) { // autoconfigure classes are loaded as resources using ClassPathResource // this line will make OpenTelemetryMeterRegistryAutoConfiguration available to all - // classloaders, so that the bean class loader (different than the instrumented class loader) + // classloaders, so that the bean class loader (different from the instrumented class loader) // can load it helperResourceBuilder.registerForAllClassLoaders( "io/opentelemetry/javaagent/instrumentation/spring/actuator/OpenTelemetryMeterRegistryAutoConfiguration.class"); diff --git a/instrumentation/spring/spring-web/spring-web-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springweb/v3_1/SpringWebInstrumentationModule.java b/instrumentation/spring/spring-web/spring-web-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springweb/v3_1/SpringWebInstrumentationModule.java index 7d38d406f5..53e67dcd6e 100644 --- a/instrumentation/spring/spring-web/spring-web-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springweb/v3_1/SpringWebInstrumentationModule.java +++ b/instrumentation/spring/spring-web/spring-web-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springweb/v3_1/SpringWebInstrumentationModule.java @@ -10,6 +10,7 @@ import static java.util.Collections.singletonList; import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; +import io.opentelemetry.javaagent.extension.instrumentation.HelperResourceBuilder; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import java.util.List; @@ -29,6 +30,16 @@ public class SpringWebInstrumentationModule extends InstrumentationModule { .and(not(hasClassesNamed("org.springframework.web.ErrorResponse"))); } + @Override + public void registerHelperResources(HelperResourceBuilder helperResourceBuilder) { + // make the filter class file loadable by ClassPathResource - in some cases (e.g. spring-guice, + // see https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7428) Spring + // might want to read the class file metadata; this line will make the filter class file visible + // to the bean class loader + helperResourceBuilder.register( + "org/springframework/web/servlet/v3_1/OpenTelemetryHandlerMappingFilter.class"); + } + @Override public List typeInstrumentations() { return singletonList(new WebApplicationContextInstrumentation()); diff --git a/instrumentation/spring/spring-web/spring-web-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/web/v6_0/SpringWebInstrumentationModule.java b/instrumentation/spring/spring-web/spring-web-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/web/v6_0/SpringWebInstrumentationModule.java index 24833c31c0..f246e678c3 100644 --- a/instrumentation/spring/spring-web/spring-web-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/web/v6_0/SpringWebInstrumentationModule.java +++ b/instrumentation/spring/spring-web/spring-web-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/web/v6_0/SpringWebInstrumentationModule.java @@ -9,6 +9,7 @@ import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers. import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; +import io.opentelemetry.javaagent.extension.instrumentation.HelperResourceBuilder; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import java.util.List; @@ -27,6 +28,16 @@ public class SpringWebInstrumentationModule extends InstrumentationModule { return hasClassesNamed("org.springframework.web.ErrorResponse"); } + @Override + public void registerHelperResources(HelperResourceBuilder helperResourceBuilder) { + // make the filter class file loadable by ClassPathResource - in some cases (e.g. spring-guice, + // see https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7428) Spring + // might want to read the class file metadata; this line will make the filter class file visible + // to the bean class loader + helperResourceBuilder.register( + "org/springframework/web/servlet/v6_0/OpenTelemetryHandlerMappingFilter.class"); + } + @Override public List typeInstrumentations() { return singletonList(new WebApplicationContextInstrumentation());