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

remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new 21caf6ccbe Compatibility with checked exceptions
21caf6ccbe is described below

commit 21caf6ccbea5852d7c54342999eb4dead3ed0304
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 ebc1a11f53..2a83d50636 100644
--- a/java/org/apache/catalina/startup/Catalina.java
+++ b/java/org/apache/catalina/startup/Catalina.java
@@ -563,7 +563,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
@@ -924,7 +928,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());
     }
 
 
@@ -936,7 +940,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 0060a97871..563d663eb9 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 d2c10b0f78..a11fd3e763 100644
--- a/java/org/apache/catalina/startup/LocalStrings.properties
+++ b/java/org/apache/catalina/startup/LocalStrings.properties
@@ -75,6 +75,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 4c2fe1b880..645b8a1d82 100644
--- a/java/org/apache/tomcat/util/IntrospectionUtils.java
+++ b/java/org/apache/tomcat/util/IntrospectionUtils.java
@@ -106,7 +106,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())
@@ -117,14 +121,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 99d7e64c7a..b4b5d0711a 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -123,6 +123,11 @@
         Refactor duplicate code for extracting media type and subtype from
         <code>content-type</code> into a single method. (markt)
       </scode>
+      <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