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