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 572ae46478..a0ca274043 100644 --- a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml +++ b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml @@ -986,6 +986,10 @@ recipeList: oldPackageName: javax.xml.bind newPackageName: jakarta.xml.bind recursive: true + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: com.sun.xml.bind.marshaller.NamespacePrefixMapper + newFullyQualifiedTypeName: org.glassfish.jaxb.runtime.marshaller.NamespacePrefixMapper + ignoreDefinition: true - org.openrewrite.maven.UpgradePluginVersion: groupId: org.codehaus.mojo artifactId: jaxb2-maven-plugin diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxXmlBindMigrationToJakartaXmlBindTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxXmlBindMigrationToJakartaXmlBindTest.java index 8b4223e864..bebb91cf75 100644 --- a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxXmlBindMigrationToJakartaXmlBindTest.java +++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxXmlBindMigrationToJakartaXmlBindTest.java @@ -53,6 +53,24 @@ public void defaults(RecipeSpec spec) { public @interface XmlElement {} """; + @Language("java") + private static final String SUN_NAMESPACE_PREFIX_MAPPER_STUB = """ + package com.sun.xml.bind.marshaller; + public abstract class NamespacePrefixMapper { + public abstract String[] getPreDeclaredNamespaceUris(); + public abstract String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix); + } + """; + + @Language("java") + private static final String GLASSFISH_NAMESPACE_PREFIX_MAPPER_STUB = """ + package org.glassfish.jaxb.runtime.marshaller; + public abstract class NamespacePrefixMapper { + public abstract String[] getPreDeclaredNamespaceUris(); + public abstract String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix); + } + """; + @DocumentExample @Test void dontRetainJaxbApiWhenJacksonNotPresent() { @@ -211,4 +229,45 @@ public class Test { ) ); } + + @Test + void migrateNamespacePrefixMapper() { + rewriteRun( + spec -> spec.parser(JavaParser.fromJavaVersion() + .dependsOn(SUN_NAMESPACE_PREFIX_MAPPER_STUB, GLASSFISH_NAMESPACE_PREFIX_MAPPER_STUB)), + //language=java + java( + """ + import com.sun.xml.bind.marshaller.NamespacePrefixMapper; + + public class MyPrefixMapper extends NamespacePrefixMapper { + @Override + public String[] getPreDeclaredNamespaceUris() { + return new String[0]; + } + + @Override + public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) { + return suggestion; + } + } + """, + """ + import org.glassfish.jaxb.runtime.marshaller.NamespacePrefixMapper; + + public class MyPrefixMapper extends NamespacePrefixMapper { + @Override + public String[] getPreDeclaredNamespaceUris() { + return new String[0]; + } + + @Override + public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) { + return suggestion; + } + } + """ + ) + ); + } }