From 60865c638f479d0321eb39b099f61d05d7c969c8 Mon Sep 17 00:00:00 2001 From: Steve Elliott Date: Mon, 25 Aug 2025 15:54:08 -0400 Subject: [PATCH 1/2] Adding `jakarta.servlet:jakarta.servlet-api` explicitly when the `javax.servlet:javax.servlet-api` it is trying to migrate from was only available transitively. --- build.gradle.kts | 1 + .../META-INF/rewrite/jakarta-ee-9.yml | 5 + .../jakarta/JavaxMailToJakartaMailTest.java | 74 +++++- .../JavaxServletToJakartaServletTest.java | 212 ++++++++++++++++++ 4 files changed, 287 insertions(+), 5 deletions(-) create mode 100644 src/test/java/org/openrewrite/java/migrate/jakarta/JavaxServletToJakartaServletTest.java diff --git a/build.gradle.kts b/build.gradle.kts index 491d130ea4..0da963c0cd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -79,6 +79,7 @@ dependencies { testRuntimeOnly("com.google.code.findbugs:jsr305:3.0.2") testRuntimeOnly("javax.mail:mail:1.4.7") testRuntimeOnly("javax.mail:javax.mail-api:1.6.2") + testRuntimeOnly("javax.servlet:javax.servlet-api:4.0.1") testRuntimeOnly("javax.ws.rs:javax.ws.rs-api:2.1.1") testRuntimeOnly(gradleApi()) } diff --git a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml index c35dc25498..51e34d0e43 100644 --- a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml +++ b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml @@ -638,6 +638,11 @@ recipeList: groupId: jakarta.servlet artifactId: jakarta.servlet-api newVersion: 5.0.x + - org.openrewrite.java.dependencies.AddDependency: + groupId: jakarta.servlet + artifactId: jakarta.servlet-api + version: 5.0.x + onlyIfUsing: javax.servlet.* - org.openrewrite.java.ChangePackage: oldPackageName: javax.servlet newPackageName: jakarta.servlet diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxMailToJakartaMailTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxMailToJakartaMailTest.java index d0f9c15599..42ebf0ff4f 100644 --- a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxMailToJakartaMailTest.java +++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxMailToJakartaMailTest.java @@ -59,7 +59,11 @@ void switchesJavaxMailApiDependencyToJakartaMailApiDependency() { """, spec -> spec.after(pom -> assertThat(pom) - .contains("jakarta.mail-api") + .contains("jakarta.mail") + .contains("jakarta.mail-api") + .containsPattern("2.0.\\d+") + .doesNotContain("javax.mail") + .doesNotContain("javax.mail-api") .actual()) ) ), @@ -106,7 +110,11 @@ void switchesJavaxMailDependencyToJakartaMailApiDependency() { """, spec -> spec.after(pom -> assertThat(pom) - .contains("jakarta.mail-api") + .contains("jakarta.mail") + .contains("jakarta.mail-api") + .containsPattern("2.0.\\d+") + .doesNotContain("javax.mail") + .doesNotContain("mail") .actual()) ) ), @@ -129,7 +137,7 @@ public class TestApplication { } @Test - void addsJakartaMailDependencyIfExistingInTransitive() { + void addsJakartaMailApiDependencyIfJavaxMailApiOnlyExistingInTransitive() { rewriteRun( mavenProject( "Sample", @@ -158,10 +166,51 @@ public class TestApplication { com.example demo 0.0.1-SNAPSHOT + + + org.springframework.boot + spring-boot-autoconfigure + 2.1.0.RELEASE + + + + """, + spec -> spec.after(pom -> assertThat(pom) + .contains("jakarta.mail") + .contains("jakarta.mail-api") + .containsPattern("2.0.\\d+") + .actual()) + ) + ) + ); + } + + @Test + void upgradesJakartaMailApiDependencyIfAlreadyExistingAtALowerVersion() { + rewriteRun( + mavenProject( + "Sample", + //language=xml + pomXml( + """ + + + 4.0.0 + com.example + demo + 0.0.1-SNAPSHOT + + + jakarta.mail + jakarta.mail-api + 1.6.8 + + """, spec -> spec.after(pom -> assertThat(pom) - .contains("jakarta.mail-api") + .containsPattern("2.0.\\d+") .actual()) ) ) @@ -169,10 +218,25 @@ public class TestApplication { } @Test - void ignoresJakartaMailDependencyIfAlreadyExisting() { + void ignoresJakartaMailApiDependencyIfAlreadyExisting() { rewriteRun( mavenProject( "Sample", + srcMainJava( + //language=java + java( + """ + import javax.mail.Session; + public class TestApplication { + } + """, + """ + import jakarta.mail.Session; + public class TestApplication { + } + """ + ) + ), //language=xml pomXml( """ diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxServletToJakartaServletTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxServletToJakartaServletTest.java new file mode 100644 index 0000000000..7fc081168a --- /dev/null +++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxServletToJakartaServletTest.java @@ -0,0 +1,212 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.migrate.jakarta; + +import org.junit.jupiter.api.Test; +import org.openrewrite.java.JavaParser; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.openrewrite.java.Assertions.*; +import static org.openrewrite.maven.Assertions.pomXml; + +class JavaxServletToJakartaServletTest implements RewriteTest { + @Override + public void defaults(RecipeSpec spec) { + spec.parser(JavaParser.fromJavaVersion() + .classpath("javax.servlet-api-4.0.1")) + .recipeFromResource( + "/META-INF/rewrite/jakarta-ee-9.yml", + "org.openrewrite.java.migrate.jakarta.JavaxServletToJakartaServlet"); + } + + @Test + void switchesJavaxServletApiDependencyToJakartaServletApiDependency() { + rewriteRun( + mavenProject( + "Sample", + //language=xml + pomXml( + """ + + + 4.0.0 + com.example + demo + 0.0.1-SNAPSHOT + + + javax.servlet + javax.servlet-api + 4.0.1 + + + + """, + spec -> spec.after(pom -> assertThat(pom) + .contains("jakarta.servlet") + .contains("jakarta.servlet-api") + .containsPattern("5.0.\\d+") + .doesNotContain("javax.servlet") + .doesNotContain("javax.servlet-api") + .actual()) + ) + ), + srcMainJava( + //language=java + java( + """ + import javax.servlet.Filter; + public class TestApplication { + } + """, + """ + import jakarta.servlet.Filter; + public class TestApplication { + } + """ + ) + ) + ); + } + + @Test + void addsJakartaServletApiDependencyIfJavaxServletApiOnlyExistsInTransitive() { + rewriteRun( + mavenProject( + "Sample", + srcMainJava( + //language=java + java( + """ + import javax.servlet.Filter; + public class TestApplication { + } + """, + """ + import jakarta.servlet.Filter; + public class TestApplication { + } + """ + ) + ), + //language=xml + pomXml( + """ + + + 4.0.0 + com.example + demo + 0.0.1-SNAPSHOT + + + org.springframework.boot + spring-boot + 2.1.9.RELEASE + + + + """, + spec -> spec.after(pom -> assertThat(pom) + .contains("jakarta.servlet") + .contains("jakarta.servlet-api") + .containsPattern("5.0.\\d+") + .actual()) + ) + ) + ); + } + + @Test + void upgradesJakartaServletApiDependencyIfAlreadyExistingAtLowerVersion() { + rewriteRun( + mavenProject( + "Sample", + //language=xml + pomXml( + """ + + + 4.0.0 + com.example + demo + 0.0.1-SNAPSHOT + + + jakarta.servlet + jakarta.servlet-api + 4.0.4 + + + + """, + spec -> spec.after(pom -> assertThat(pom) + .containsPattern("5.0.\\d+") + .actual()) + ) + ) + ); + } + + @Test + void ignoresJakartaServletApiDependencyIfAlreadyExisting() { + rewriteRun( + mavenProject( + "Sample", + srcMainJava( + //language=java + java( + """ + import javax.servlet.Filter; + public class TestApplication { + } + """, + """ + import jakarta.servlet.Filter; + public class TestApplication { + } + """ + ) + ), + //language=xml + pomXml( + """ + + + 4.0.0 + com.example + demo + 0.0.1-SNAPSHOT + + + jakarta.servlet + jakarta.servlet-api + 5.0.0 + + + + """ + ) + ) + ); + } +} From 52191bdbf6bdcd4c0c7bb9e2298da58dfee8d501 Mon Sep 17 00:00:00 2001 From: Steve Elliott Date: Mon, 25 Aug 2025 17:30:17 -0400 Subject: [PATCH 2/2] Removing unnecessary DTDs and XML tags --- .../jakarta/JavaxMailToJakartaMailTest.java | 20 +++++-------------- .../JavaxServletToJakartaServletTest.java | 16 ++++----------- 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxMailToJakartaMailTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxMailToJakartaMailTest.java index 42ebf0ff4f..ac0c536aa0 100644 --- a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxMailToJakartaMailTest.java +++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxMailToJakartaMailTest.java @@ -42,9 +42,7 @@ void switchesJavaxMailApiDependencyToJakartaMailApiDependency() { //language=xml pomXml( """ - - + 4.0.0 com.example demo @@ -93,9 +91,7 @@ void switchesJavaxMailDependencyToJakartaMailApiDependency() { //language=xml pomXml( """ - - + 4.0.0 com.example demo @@ -159,9 +155,7 @@ public class TestApplication { //language=xml pomXml( """ - - + 4.0.0 com.example demo @@ -193,9 +187,7 @@ void upgradesJakartaMailApiDependencyIfAlreadyExistingAtALowerVersion() { //language=xml pomXml( """ - - + 4.0.0 com.example demo @@ -240,9 +232,7 @@ public class TestApplication { //language=xml pomXml( """ - - + 4.0.0 com.example demo diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxServletToJakartaServletTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxServletToJakartaServletTest.java index 7fc081168a..6e2ccc090e 100644 --- a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxServletToJakartaServletTest.java +++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxServletToJakartaServletTest.java @@ -42,9 +42,7 @@ void switchesJavaxServletApiDependencyToJakartaServletApiDependency() { //language=xml pomXml( """ - - + 4.0.0 com.example demo @@ -108,9 +106,7 @@ public class TestApplication { //language=xml pomXml( """ - - + 4.0.0 com.example demo @@ -142,9 +138,7 @@ void upgradesJakartaServletApiDependencyIfAlreadyExistingAtLowerVersion() { //language=xml pomXml( """ - - + 4.0.0 com.example demo @@ -189,9 +183,7 @@ public class TestApplication { //language=xml pomXml( """ - - + 4.0.0 com.example demo