Skip to content

Commit 6967db1

Browse files
authored
Fix Spring detection (#10740)
Fix Spring detection MethodParameters attribute is mandatory since Spring 6.1 and not 6.0 Changed the class to be detected, on a 6.1 only class: Restclient Co-authored-by: jean-philippe.bempel <jean-philippe.bempel@datadoghq.com>
1 parent 9ab4514 commit 6967db1

File tree

5 files changed

+6
-13
lines changed

5 files changed

+6
-13
lines changed

dd-java-agent/agent-debugger/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ dependencies {
6767

6868
testRuntimeOnly group: 'org.scala-lang', name: 'scala-compiler', version: libs.versions.scala213.get()
6969
testRuntimeOnly group: 'antlr', name: 'antlr', version: '2.7.7'
70-
testRuntimeOnly group: 'org.springframework', name: 'spring-web', version: '6.0.0'
70+
testRuntimeOnly group: 'org.springframework', name: 'spring-web', version: '6.1.0'
7171
}
7272

7373
tasks.named("shadowJar", ShadowJar) {

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/SpringHelper.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ public class SpringHelper {
66

77
public static boolean isSpringUsingOnlyMethodParameters(Instrumentation inst) {
88
for (Class<?> clazz : inst.getAllLoadedClasses()) {
9-
if ("org.springframework.web.bind.annotation.ControllerMappingReflectiveProcessor"
10-
.equals(clazz.getName())) {
11-
// If this class (coming from Spring web since version 6) is found loaded it means Spring
9+
if ("org.springframework.web.client.RestClient".equals(clazz.getName())) {
10+
// If this class (coming from Spring web since version 6.1) is found loaded it means Spring
1211
// supports only getting parameter names from the MethodParameter attribute
1312
return true;
1413
}

dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3019,9 +3019,7 @@ public void methodParametersAttribute() throws Exception {
30193019
Instrumentation inst = mock(Instrumentation.class);
30203020
if (JavaVirtualMachine.isJavaVersion(17)) {
30213021
// on JDK 17 introduced Spring6 class
3022-
Class<?> springClass =
3023-
Class.forName(
3024-
"org.springframework.web.bind.annotation.ControllerMappingReflectiveProcessor");
3022+
Class<?> springClass = Class.forName("org.springframework.web.client.RestClient");
30253023
when(inst.getAllLoadedClasses()).thenReturn(new Class[] {springClass});
30263024
} else {
30273025
when(inst.getAllLoadedClasses()).thenReturn(new Class[0]);

dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ConfigurationUpdaterTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -639,9 +639,7 @@ public void methodParametersAttribute() throws Exception {
639639
Class<?> testClass = loadClass(CLASS_NAME, buffers);
640640
if (JavaVirtualMachine.isJavaVersion(17)) {
641641
// on JDK 17 introduced Spring6 class
642-
Class<?> springClass =
643-
Class.forName(
644-
"org.springframework.web.bind.annotation.ControllerMappingReflectiveProcessor");
642+
Class<?> springClass = Class.forName("org.springframework.web.client.RestClient");
645643
when(inst.getAllLoadedClasses()).thenReturn(new Class[] {testClass, springClass});
646644
} else {
647645
when(inst.getAllLoadedClasses()).thenReturn(new Class[] {testClass});

dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/util/SpringHelperTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ class SpringHelperTest {
1414
@Test
1515
@EnabledForJreRange(min = JRE.JAVA_17)
1616
void isSpringUsingOnlyMethodParametersTrue() throws Exception {
17-
Class<?> clazz =
18-
Class.forName(
19-
"org.springframework.web.bind.annotation.ControllerMappingReflectiveProcessor");
17+
Class<?> clazz = Class.forName("org.springframework.web.client.RestClient");
2018
Instrumentation inst = mock(Instrumentation.class);
2119
when(inst.getAllLoadedClasses()).thenReturn(new Class[] {clazz});
2220
assertTrue(SpringHelper.isSpringUsingOnlyMethodParameters(inst));

0 commit comments

Comments
 (0)