Skip to content

Commit 40f623c

Browse files
committed
Fix latest dep tests
1 parent 805ce0a commit 40f623c

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingCodeAttributesGetter.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,46 @@
66
package io.opentelemetry.javaagent.instrumentation.spring.scheduling.v3_1;
77

88
import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesGetter;
9+
import java.lang.reflect.Field;
910
import org.springframework.scheduling.support.ScheduledMethodRunnable;
1011

1112
public class SpringSchedulingCodeAttributesGetter implements CodeAttributesGetter<Runnable> {
13+
private static final Class<?> outcomeTrackingRunnableClass = getOutcomeTrackingRunnableClass();
14+
private static final Field outcomeTrackingRunnableField = getOutcomeTrackingRunnableField(outcomeTrackingRunnableClass);
15+
16+
private static Class<?> getOutcomeTrackingRunnableClass() {
17+
try {
18+
return Class.forName("org.springframework.scheduling.config.Task$OutcomeTrackingRunnable");
19+
} catch (ClassNotFoundException exception) {
20+
return null;
21+
}
22+
}
23+
24+
private static Field getOutcomeTrackingRunnableField(Class<?> clazz) {
25+
try {
26+
Field field = clazz.getDeclaredField("runnable");
27+
field.setAccessible(true);
28+
return field;
29+
} catch (Exception exception) {
30+
return null;
31+
}
32+
}
33+
34+
private static Runnable unwrap(Runnable runnable) {
35+
if (outcomeTrackingRunnableClass != null && outcomeTrackingRunnableField != null && outcomeTrackingRunnableClass.isAssignableFrom(runnable.getClass())) {
36+
try {
37+
// task may be wrapped multiple times so
38+
return unwrap((Runnable) outcomeTrackingRunnableField.get(runnable));
39+
} catch (IllegalAccessException ignore) {
40+
// should not happen because setAccessible was called
41+
}
42+
}
43+
return runnable;
44+
}
1245

1346
@Override
1447
public Class<?> getCodeClass(Runnable runnable) {
48+
runnable = unwrap(runnable);
1549
if (runnable instanceof ScheduledMethodRunnable) {
1650
ScheduledMethodRunnable scheduledMethodRunnable = (ScheduledMethodRunnable) runnable;
1751
return scheduledMethodRunnable.getMethod().getDeclaringClass();
@@ -22,6 +56,7 @@ public Class<?> getCodeClass(Runnable runnable) {
2256

2357
@Override
2458
public String getMethodName(Runnable runnable) {
59+
runnable = unwrap(runnable);
2560
if (runnable instanceof ScheduledMethodRunnable) {
2661
ScheduledMethodRunnable scheduledMethodRunnable = (ScheduledMethodRunnable) runnable;
2762
return scheduledMethodRunnable.getMethod().getName();

instrumentation/spring/spring-security-config-6.0/javaagent/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ dependencies {
2222
library("io.projectreactor:reactor-core:3.5.0")
2323

2424
testLibrary("org.springframework:spring-test:6.0.0")
25+
testLibrary("org.springframework:spring-context:6.0.0")
2526
testLibrary("jakarta.servlet:jakarta.servlet-api:6.0.0")
2627
}
2728

0 commit comments

Comments
 (0)