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

remm 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 e39d54ade3 Compatibility with checked exceptions
e39d54ade3 is described below

commit e39d54ade303b8d48cce0ffa083666d6c328373a
Author: remm <r...@apache.org>
AuthorDate: Fri Nov 15 13:48:39 2024 +0100

    Compatibility with checked exceptions
    
    For example SecretKeyCredentialHandler.
    Also fix autoboxing in generated code.
---
 java/org/apache/catalina/startup/Catalina.java     | 10 +++++++---
 .../org/apache/catalina/startup/ContextConfig.java | 22 +++++++++++++++++-----
 .../catalina/startup/LocalStrings.properties       |  1 +
 .../org/apache/tomcat/util/IntrospectionUtils.java | 18 +++++++++++++++---
 webapps/docs/changelog.xml                         |  5 +++++
 5 files changed, 45 insertions(+), 11 deletions(-)

diff --git a/java/org/apache/catalina/startup/Catalina.java 
b/java/org/apache/catalina/startup/Catalina.java
index 49b8b51003..8d33f85a9c 100644
--- a/java/org/apache/catalina/startup/Catalina.java
+++ b/java/org/apache/catalina/startup/Catalina.java
@@ -585,7 +585,11 @@ public class Catalina {
         }
 
         if (serverXml != null) {
-            serverXml.load(this);
+            try {
+                serverXml.load(this);
+            } catch (Exception e) {
+                log.warn(sm.getString("catalina.configFail", "GeneratedCode"), 
e);
+            }
         } else {
             try (ConfigurationSource.Resource resource = 
ConfigFileLoader.getSource().getServerXml()) {
                 // Create and execute our Digester
@@ -926,7 +930,7 @@ public class Catalina {
         code.append(" implements ");
         code.append(ServerXml.class.getName().replace('$', '.')).append(" 
{").append(System.lineSeparator());
         code.append("public void load(").append(Catalina.class.getName());
-        code.append(' ').append(digester.toVariableName(this)).append(") 
{").append(System.lineSeparator());
+        code.append(' ').append(digester.toVariableName(this)).append(") 
throws Exception {").append(System.lineSeparator());
     }
 
 
@@ -938,7 +942,7 @@ public class Catalina {
 
 
     public interface ServerXml {
-        void load(Catalina catalina);
+        void load(Catalina catalina) throws Exception;
     }
 
 
diff --git a/java/org/apache/catalina/startup/ContextConfig.java 
b/java/org/apache/catalina/startup/ContextConfig.java
index 0c054c7f2d..3011420a21 100644
--- a/java/org/apache/catalina/startup/ContextConfig.java
+++ b/java/org/apache/catalina/startup/ContextConfig.java
@@ -513,7 +513,7 @@ public class ContextConfig implements LifecycleListener {
         code.append("public void load(");
         code.append(Context.class.getName());
         String contextArgument = digester.toVariableName(context);
-        code.append(' ').append(contextArgument).append(") 
{").append(System.lineSeparator());
+        code.append(' ').append(contextArgument).append(") throws Exception 
{").append(System.lineSeparator());
         // Create a new variable with the concrete type
         digester.setKnown(context);
         code.append(context.getClass().getName()).append(' 
').append(digester.toVariableName(context));
@@ -530,7 +530,7 @@ public class ContextConfig implements LifecycleListener {
 
 
     public interface ContextXml {
-        void load(Context context);
+        void load(Context context) throws Exception;
     }
 
 
@@ -573,7 +573,11 @@ public class ContextConfig implements LifecycleListener {
                 contextXml = (ContextXml) 
Digester.loadGeneratedClass(contextXmlClassName);
             }
             if (contextXml != null) {
-                contextXml.load(context);
+                try {
+                    contextXml.load(context);
+                } catch (Exception e) {
+                    log.warn(sm.getString("contextConfig.loadError"), e);
+                }
                 contextXml = null;
             } else if (!useGeneratedCode) {
                 try (ConfigurationSource.Resource contextXmlResource =
@@ -614,7 +618,11 @@ public class ContextConfig implements LifecycleListener {
                 contextXml = (ContextXml) 
Digester.loadGeneratedClass(contextXmlClassName);
             }
             if (contextXml != null) {
-                contextXml.load(context);
+                try {
+                    contextXml.load(context);
+                } catch (Exception e) {
+                    log.warn(sm.getString("contextConfig.loadError"), e);
+                }
                 contextXml = null;
             } else if (!useGeneratedCode) {
                 String hostContextFile = Container.getConfigPath(context, 
Constants.HostContextXml);
@@ -654,7 +662,11 @@ public class ContextConfig implements LifecycleListener {
                 contextXml = (ContextXml) 
Digester.loadGeneratedClass(contextXmlClassName);
             }
             if (contextXml != null) {
-                contextXml.load(context);
+                try {
+                    contextXml.load(context);
+                } catch (Exception e) {
+                    log.warn(sm.getString("contextConfig.loadError"), e);
+                }
                 contextXml = null;
             } else if (!useGeneratedCode) {
                 if (generateCode) {
diff --git a/java/org/apache/catalina/startup/LocalStrings.properties 
b/java/org/apache/catalina/startup/LocalStrings.properties
index d6144f9a69..37d133469d 100644
--- a/java/org/apache/catalina/startup/LocalStrings.properties
+++ b/java/org/apache/catalina/startup/LocalStrings.properties
@@ -72,6 +72,7 @@ contextConfig.invalidSciHandlesTypes=Unable to load class 
[{0}] to check against
 contextConfig.jarFile=Unable to process Jar [{0}] for annotations
 contextConfig.jspFile.error=JSP file [{0}] must start with a ''/''
 contextConfig.jspFile.warning=WARNING: JSP file [{0}] must start with a ''/'' 
in Servlet 2.4
+contextConfig.loadError=Error loading generated code
 contextConfig.missingRealm=No Realm has been configured to authenticate against
 contextConfig.noAntiLocking=The value [{0}] configured for java.io.tmpdir does 
not point to a valid directory. The antiResourceLocking setting for the web 
application [{1}] will be ignored.
 contextConfig.noJsp=Skipping JSP property group for URL [{0}], no JSP Servlet 
found for name [{1}]
diff --git a/java/org/apache/tomcat/util/IntrospectionUtils.java 
b/java/org/apache/tomcat/util/IntrospectionUtils.java
index b34bf6e6fc..dc0c17566f 100644
--- a/java/org/apache/tomcat/util/IntrospectionUtils.java
+++ b/java/org/apache/tomcat/util/IntrospectionUtils.java
@@ -105,7 +105,11 @@ public final class IntrospectionUtils {
                             ok = false;
                         }
                         if (actualMethod != null) {
-                            
actualMethod.append(method.getName()).append("(Integer.valueOf(\"").append(value).append("\"))");
+                            if 
("java.lang.Integer".equals(paramType.getName())) {
+                                
actualMethod.append(method.getName()).append("(Integer.valueOf(\"").append(value).append("\"))");
+                            } else {
+                                
actualMethod.append(method.getName()).append("(Integer.parseInt(\"").append(value).append("\"))");
+                            }
                         }
                         // Try a setFoo ( long )
                     } else if ("java.lang.Long".equals(paramType.getName())
@@ -116,14 +120,22 @@ public final class IntrospectionUtils {
                             ok = false;
                         }
                         if (actualMethod != null) {
-                            
actualMethod.append(method.getName()).append("(Long.valueOf(\"").append(value).append("\"))");
+                            if ("java.lang.Long".equals(paramType.getName())) {
+                                
actualMethod.append(method.getName()).append("(Long.valueOf(\"").append(value).append("\"))");
+                            } else {
+                                
actualMethod.append(method.getName()).append("(Long.parseLong(\"").append(value).append("\"))");
+                            }
                         }
                         // Try a setFoo ( boolean )
                     } else if ("java.lang.Boolean".equals(paramType.getName())
                             || "boolean".equals(paramType.getName())) {
                         params[0] = Boolean.valueOf(value);
                         if (actualMethod != null) {
-                            
actualMethod.append(method.getName()).append("(Boolean.valueOf(\"").append(value).append("\"))");
+                            if 
("java.lang.Boolean".equals(paramType.getName())) {
+                                
actualMethod.append(method.getName()).append("(Boolean.valueOf(\"").append(value).append("\"))");
+                            } else {
+                                
actualMethod.append(method.getName()).append("(Boolean.parseBoolean(\"").append(value).append("\"))");
+                            }
                         }
                         // Try a setFoo ( InetAddress )
                     } else if ("java.net.InetAddress".equals(paramType
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index f8f6371269..11e031fb13 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -131,6 +131,11 @@
         <bug>69442</bug>: Fix case sensitive check on <code>content-type</code>
         when parsing request parameters. (remm)
       </fix>
+      <fix>
+        Compatibility of generated embedded code with components where
+        constructors or property related methods throw a checked exception.
+        (remm)
+      </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