From 52fb1c24ae43ca6e86ba2827caa62dee96e3d249 Mon Sep 17 00:00:00 2001 From: Juan Manuel Leflet Estrada Date: Thu, 21 Nov 2024 11:42:49 +0100 Subject: [PATCH 1/4] Add rule for SourceHttpMessageConverter Signed-off-by: Juan Manuel Leflet Estrada --- ...framework-5.x-to-6.0-web-applications.yaml | 31 ++++++++++++++++ .../konveyor/controller/XmlController.java | 37 +++++++++++++++++++ ...work-5.x-to-6.0-web-applications.test.yaml | 8 ++++ 3 files changed, 76 insertions(+) create mode 100644 default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/controller/XmlController.java diff --git a/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml b/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml index e1845182..00152c5b 100644 --- a/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml +++ b/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml @@ -49,3 +49,34 @@ url: https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-6.0-Release-Notes#web-applications - title: 'Specific Spring Framwork change' url: https://github.com/spring-projects/spring-framework/issues/28552 + +- ruleID: spring-framework-5.x-to-6.0-web-applications-00030 + category: mandatory + effort: 1 + labels: + - konveyor.io/source=spring5 + - konveyor.io/target=spring6+ + when: + or: + - java.referenced: + pattern: org.springframework.stereotype.Controller + location: ANNOTATION + as: class + ignore: true + - java.referenced: + pattern: '* javax.xml.transform.Source' + location: METHOD + filepaths: "{{class.Filepaths}}" + from: class + description: "SourceHttpMessageConverter is not configured by default anymore in Spring MVC and RestTemplate" + message: | + `SourceHttpMessageConverter` is not configured by default anymore in Spring MVC and `RestTemplate`. + As a consequence, Spring web applications using `javax.xml.transform.Source` now need to configure + `SourceHttpMessageConverter` explicitly. Note that the order of converter registration is important, + and `SourceHttpMessageConverter` should typically be registered before "catch-all" converters like + `MappingJackson2HttpMessageConverter` for example. + links: + - title: 'Spring 6.0 migration guide' + url: https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-6.0-Release-Notes#web-applications + - title: 'GitHub issue: Make SourceHttpMessageConverter optional' + url: https://github.com/spring-projects/spring-framework/issues/29535 diff --git a/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/controller/XmlController.java b/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/controller/XmlController.java new file mode 100644 index 00000000..87179e55 --- /dev/null +++ b/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/controller/XmlController.java @@ -0,0 +1,37 @@ +package org.konveyor.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; +import java.io.StringReader; + +@Controller +public class XmlController { + + @PostMapping("/process-xml") + @ResponseBody + public Source processXml(@RequestBody String xmlInput) { + // For example, log the input or perform some processing here + System.out.println("Received XML: " + xmlInput); + + // Assuming we want to respond with a modified version of the XML + String responseXml = "Success%s"; + + // Return the new XML wrapped in a StreamSource + return new StreamSource(new StringReader(responseXml)); + } + + @GetMapping(value = "/xml/", produces = "application/xml") + public Source getXmlData() { + // Predefined XML string + String xmlContent = "Hello, World!%s"; + + // Return as Source + return new StreamSource(new StringReader(xmlContent)); + } +} diff --git a/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml b/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml index 114eb706..fbbaf1d1 100644 --- a/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml +++ b/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml @@ -10,3 +10,11 @@ tests: mode: "source-only" hasIncidents: exactly: 1 + +- ruleID: spring-framework-5.x-to-6.0-web-applications-00030 + testCases: + - name: tc-1 + analysisParams: + mode: "source-only" + hasIncidents: + exactly: 2 From 9b91b6616b9cfd6b04b44531acb5607fbca0b51c Mon Sep 17 00:00:00 2001 From: Juan Manuel Leflet Estrada Date: Mon, 25 Nov 2024 11:51:03 +0100 Subject: [PATCH 2/4] Improve rule Signed-off-by: Juan Manuel Leflet Estrada --- ...framework-5.x-to-6.0-web-applications.yaml | 29 ++++++++++++------- .../src/main/java/org/konveyor/Main.java | 10 +++++-- .../controller/XmlRestController.java | 25 ++++++++++++++++ ...work-5.x-to-6.0-web-applications.test.yaml | 2 +- 4 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/controller/XmlRestController.java diff --git a/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml b/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml index 00152c5b..49f1adf9 100644 --- a/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml +++ b/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml @@ -58,16 +58,25 @@ - konveyor.io/target=spring6+ when: or: - - java.referenced: - pattern: org.springframework.stereotype.Controller - location: ANNOTATION - as: class - ignore: true - - java.referenced: - pattern: '* javax.xml.transform.Source' - location: METHOD - filepaths: "{{class.Filepaths}}" - from: class + - and: + - or: + - java.referenced: + pattern: org.springframework.stereotype.Controller + location: ANNOTATION + - java.referenced: + pattern: org.springframework.web.bind.annotation.RestController + location: ANNOTATION + as: class + ignore: true + - java.referenced: + pattern: '* javax.xml.transform.Source' + location: METHOD + filepaths: "{{class.Filepaths}}" + from: class + # TODO: not working atm - fix test cases when working + - java.referenced: + pattern: 'getForObject()' + location: METHOD_CALL description: "SourceHttpMessageConverter is not configured by default anymore in Spring MVC and RestTemplate" message: | `SourceHttpMessageConverter` is not configured by default anymore in Spring MVC and `RestTemplate`. diff --git a/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java b/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java index 5224b76e..22f7ee92 100644 --- a/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java +++ b/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java @@ -1,11 +1,17 @@ package org.konveyor; +import org.springframework.web.client.RestTemplate; + +import javax.xml.transform.Source; import java.beans.IntrospectionException; +import java.net.URI; +import java.net.URISyntaxException; public class Main { - public static void main(String[] args) throws IntrospectionException { - + public static void main(String[] args) throws IntrospectionException, URISyntaxException { + RestTemplate rest = new RestTemplate(); + rest.getForObject(new URI("http://www.example.com/"), Source.class); } } diff --git a/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/controller/XmlRestController.java b/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/controller/XmlRestController.java new file mode 100644 index 00000000..92907494 --- /dev/null +++ b/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/controller/XmlRestController.java @@ -0,0 +1,25 @@ +package org.konveyor.controller; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; +import java.io.StringReader; + +@RestController +public class XmlRestController { + + public Source method(@RequestBody String xmlInput) { + // For example, log the input or perform some processing here + System.out.println("Received XML: " + xmlInput); + + // Assuming we want to respond with a modified version of the XML + String responseXml = "Success%s"; + + // Return the new XML wrapped in a StreamSource + return new StreamSource(new StringReader(responseXml)); + } + + +} diff --git a/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml b/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml index fbbaf1d1..9bec10ee 100644 --- a/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml +++ b/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml @@ -17,4 +17,4 @@ tests: analysisParams: mode: "source-only" hasIncidents: - exactly: 2 + exactly: 3 From 2878e3757bde6c236ed9395ee3fba568907bc78f Mon Sep 17 00:00:00 2001 From: Juan Manuel Leflet Estrada Date: Fri, 29 Nov 2024 11:42:44 +0100 Subject: [PATCH 3/4] Add search for getForObject Signed-off-by: Juan Manuel Leflet Estrada --- .../spring-framework-5.x-to-6.0-web-applications.yaml | 11 +++++++---- .../src/main/java/org/konveyor/Main.java | 4 ++++ ...ng-framework-5.x-to-6.0-web-applications.test.yaml | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml b/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml index 49f1adf9..807954f8 100644 --- a/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml +++ b/default/generated/spring-framework/spring-framework-5.x-to-6.0-web-applications.yaml @@ -73,10 +73,13 @@ location: METHOD filepaths: "{{class.Filepaths}}" from: class - # TODO: not working atm - fix test cases when working - - java.referenced: - pattern: 'getForObject()' - location: METHOD_CALL + - or: + - java.referenced: + pattern: 'getForObject(URI,Class)' + location: METHOD_CALL + - java.referenced: + pattern: 'getForObject(String,Class,*)' + location: METHOD_CALL description: "SourceHttpMessageConverter is not configured by default anymore in Spring MVC and RestTemplate" message: | `SourceHttpMessageConverter` is not configured by default anymore in Spring MVC and `RestTemplate`. diff --git a/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java b/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java index 22f7ee92..b952bcb3 100644 --- a/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java +++ b/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java @@ -12,6 +12,10 @@ public class Main { public static void main(String[] args) throws IntrospectionException, URISyntaxException { RestTemplate rest = new RestTemplate(); rest.getForObject(new URI("http://www.example.com/"), Source.class); + rest.getForObject("http://www.example.com/", Source.class); + rest.getForObject("http://www.example.com/", Source.class, "Hey"); + + java.lang.System.getenv(); } } diff --git a/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml b/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml index 9bec10ee..4150db86 100644 --- a/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml +++ b/default/generated/spring-framework/tests/spring-framework-5.x-to-6.0-web-applications.test.yaml @@ -17,4 +17,4 @@ tests: analysisParams: mode: "source-only" hasIncidents: - exactly: 3 + exactly: 6 From 90f2f64af770c4dbf509b2c057c09d08cba51deb Mon Sep 17 00:00:00 2001 From: Juan Manuel Leflet Estrada Date: Fri, 29 Nov 2024 11:49:14 +0100 Subject: [PATCH 4/4] Test data fix Signed-off-by: Juan Manuel Leflet Estrada --- .../data/web-applications/src/main/java/org/konveyor/Main.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java b/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java index b952bcb3..fe30da79 100644 --- a/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java +++ b/default/generated/spring-framework/tests/data/web-applications/src/main/java/org/konveyor/Main.java @@ -3,13 +3,12 @@ import org.springframework.web.client.RestTemplate; import javax.xml.transform.Source; -import java.beans.IntrospectionException; import java.net.URI; import java.net.URISyntaxException; public class Main { - public static void main(String[] args) throws IntrospectionException, URISyntaxException { + public static void main(String[] args) throws URISyntaxException { RestTemplate rest = new RestTemplate(); rest.getForObject(new URI("http://www.example.com/"), Source.class); rest.getForObject("http://www.example.com/", Source.class);