Skip to content

Commit fca7c7c

Browse files
authored
Migrate com.sun.xml.bind.marshaller.NamespacePrefixMapper to org.glassfish.jaxb.runtime.marshaller.NamespacePrefixMapper (#1121)
The JAXB RI relocated `NamespacePrefixMapper` as part of the 2.x→3.x repackaging that accompanies the `javax.xml.bind` → `jakarta.xml.bind` move. Wire a declarative `ChangeType` into `JavaxXmlBindMigrationToJakartaXmlBind` so subclasses migrate alongside the rest of the Jakarta XML Binding 3.0 wave. Refs: https://github.com/moderneinc/customer-requests/issues/2462 (item 8)
1 parent 74017b2 commit fca7c7c

2 files changed

Lines changed: 63 additions & 0 deletions

File tree

src/main/resources/META-INF/rewrite/jakarta-ee-9.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,10 @@ recipeList:
986986
oldPackageName: javax.xml.bind
987987
newPackageName: jakarta.xml.bind
988988
recursive: true
989+
- org.openrewrite.java.ChangeType:
990+
oldFullyQualifiedTypeName: com.sun.xml.bind.marshaller.NamespacePrefixMapper
991+
newFullyQualifiedTypeName: org.glassfish.jaxb.runtime.marshaller.NamespacePrefixMapper
992+
ignoreDefinition: true
989993
- org.openrewrite.maven.UpgradePluginVersion:
990994
groupId: org.codehaus.mojo
991995
artifactId: jaxb2-maven-plugin

src/test/java/org/openrewrite/java/migrate/jakarta/JavaxXmlBindMigrationToJakartaXmlBindTest.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,24 @@ public void defaults(RecipeSpec spec) {
5353
public @interface XmlElement {}
5454
""";
5555

56+
@Language("java")
57+
private static final String SUN_NAMESPACE_PREFIX_MAPPER_STUB = """
58+
package com.sun.xml.bind.marshaller;
59+
public abstract class NamespacePrefixMapper {
60+
public abstract String[] getPreDeclaredNamespaceUris();
61+
public abstract String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix);
62+
}
63+
""";
64+
65+
@Language("java")
66+
private static final String GLASSFISH_NAMESPACE_PREFIX_MAPPER_STUB = """
67+
package org.glassfish.jaxb.runtime.marshaller;
68+
public abstract class NamespacePrefixMapper {
69+
public abstract String[] getPreDeclaredNamespaceUris();
70+
public abstract String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix);
71+
}
72+
""";
73+
5674
@DocumentExample
5775
@Test
5876
void dontRetainJaxbApiWhenJacksonNotPresent() {
@@ -211,4 +229,45 @@ public class Test {
211229
)
212230
);
213231
}
232+
233+
@Test
234+
void migrateNamespacePrefixMapper() {
235+
rewriteRun(
236+
spec -> spec.parser(JavaParser.fromJavaVersion()
237+
.dependsOn(SUN_NAMESPACE_PREFIX_MAPPER_STUB, GLASSFISH_NAMESPACE_PREFIX_MAPPER_STUB)),
238+
//language=java
239+
java(
240+
"""
241+
import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
242+
243+
public class MyPrefixMapper extends NamespacePrefixMapper {
244+
@Override
245+
public String[] getPreDeclaredNamespaceUris() {
246+
return new String[0];
247+
}
248+
249+
@Override
250+
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
251+
return suggestion;
252+
}
253+
}
254+
""",
255+
"""
256+
import org.glassfish.jaxb.runtime.marshaller.NamespacePrefixMapper;
257+
258+
public class MyPrefixMapper extends NamespacePrefixMapper {
259+
@Override
260+
public String[] getPreDeclaredNamespaceUris() {
261+
return new String[0];
262+
}
263+
264+
@Override
265+
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
266+
return suggestion;
267+
}
268+
}
269+
"""
270+
)
271+
);
272+
}
214273
}

0 commit comments

Comments
 (0)