Improve on the load check
getResource should be a good alternative.
Also account for generics.
diff --git a/src/main/java/org/apache/tomcat/jakartaee/ClassConverter.java b/src/main/java/org/apache/tomcat/jakartaee/ClassConverter.java
index 1ef8993..9b3cbd9 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/ClassConverter.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/ClassConverter.java
@@ -118,16 +118,14 @@
if (newString != str) {
// Since this is runtime conversion, the idea is to only convert to
// Jakarta EE specification classes that exist in the container
- String[] split = newString.split(";");
+ String[] split = newString.split(";|<");
for (String current : split) {
int pos = current.indexOf("jakarta/");
if (pos >= 0) {
- boolean found = false;
- try {
- loader.loadClass(current.substring(pos).replace('/', '.'));
- found = true;
- } catch (Exception e) {}
- if (!found) {
+ if (loader.getResource(current.substring(pos) + ".class") == null) {
+ if (logger.isLoggable(Level.FINE)) {
+ logger.log(Level.FINE, sm.getString("classConverter.skipName", current.substring(pos)));
+ }
// Cancel the replacement as the replacement does not exist
String originalFragment = current.replace("jakarta/", "javax/");
newString = newString.replace(current, originalFragment);
diff --git a/src/main/resources/org/apache/tomcat/jakartaee/LocalStrings.properties b/src/main/resources/org/apache/tomcat/jakartaee/LocalStrings.properties
index 3614cfc..e46a8d8 100644
--- a/src/main/resources/org/apache/tomcat/jakartaee/LocalStrings.properties
+++ b/src/main/resources/org/apache/tomcat/jakartaee/LocalStrings.properties
@@ -15,6 +15,7 @@
classConverter.converted=Migrated class [{0}]
classConverter.noConversion=No conversion necessary for [{0}]
+classConverter.skipName=Skip conversion of class [{0}] as it is not accessible to the classloader
migration.archive.complete=Migration finished for archive [{0}]
migration.archive.memory=Migration starting for archive [{0}] using in memory copy