This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/main by this push:
     new dc5cab83ae Avoid runtime dependency on the migration tool unless it is 
being used
dc5cab83ae is described below

commit dc5cab83ae13804152b3d1bab90fafb9582764da
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Nov 14 22:37:54 2022 +0000

    Avoid runtime dependency on the migration tool unless it is being used
---
 java/org/apache/catalina/loader/WebappLoader.java | 29 ++++++++++++++++-------
 webapps/docs/changelog.xml                        |  5 ++++
 2 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/java/org/apache/catalina/loader/WebappLoader.java 
b/java/org/apache/catalina/loader/WebappLoader.java
index a8fe3cf806..ae4f58523d 100644
--- a/java/org/apache/catalina/loader/WebappLoader.java
+++ b/java/org/apache/catalina/loader/WebappLoader.java
@@ -367,14 +367,7 @@ public class WebappLoader extends LifecycleMBeanBase 
implements Loader{
 
             // Set Jakarta class converter
             if (getJakartaConverter() != null) {
-                EESpecProfile profile = null;
-                try {
-                    profile = EESpecProfiles.valueOf(getJakartaConverter());
-                } catch (IllegalArgumentException ignored) {
-                    // Use default value
-                    log.warn(sm.getString("webappLoader.unknownProfile", 
getJakartaConverter()));
-                }
-                classLoader.addTransformer((profile != null) ? new 
ClassConverter(profile) : new ClassConverter());
+                MigrationUtil.addJakartaEETransformer(classLoader, 
getJakartaConverter());
             }
 
             // Configure our repositories
@@ -631,4 +624,24 @@ public class WebappLoader extends LifecycleMBeanBase 
implements Loader{
 
         return name.toString();
     }
+
+
+    /*
+     * Implemented in a sub-class so EESpecProfile and EESpecProfiles are not
+     * loaded unless a profile is configured. Otherwise, tomcat-embed-core.jar
+     * has a runtime dependency on the migration tool whether it is used or 
not.
+     */
+    private static class MigrationUtil {
+
+        public static void addJakartaEETransformer(WebappClassLoaderBase 
webappClassLoader, String profileName) {
+            EESpecProfile profile = null;
+            try {
+                profile = EESpecProfiles.valueOf(profileName);
+            } catch (IllegalArgumentException ignored) {
+                // Use default value
+                log.warn(sm.getString("webappLoader.unknownProfile", 
profileName));
+            }
+            webappClassLoader.addTransformer((profile != null) ? new 
ClassConverter(profile) : new ClassConverter());
+        }
+    }
 }
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index cbf01a7ebb..ddf984a862 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -152,6 +152,11 @@
         <code>HttpServletRequest.getTrailerFields()</code> and with the Servlet
         API provided by the Jakarta EE project. (markt)
       </fix>
+      <fix>
+        Refactor <code>WebappLoader</code> so it only has a runtime dependency
+        on the migration tool for Jakarta EE if configured to use the converter
+        as classes are loaded. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to