This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new 086d579a04 Compatibility with checked exceptions
086d579a04 is described below
commit 086d579a0461dc45f974360a722fe0b4c8226a97
Author: remm <[email protected]>
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 01d7d3cbb9..3d5ddabbcf 100644
--- a/java/org/apache/catalina/startup/Catalina.java
+++ b/java/org/apache/catalina/startup/Catalina.java
@@ -587,7 +587,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
@@ -938,7 +942,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());
}
@@ -950,7 +954,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 8b2e3de8c6..d24b88d276 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 b3c53f8c19..b9b000407c 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 89a459f692..e93a77d2a9 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 79f33e5371..9c162c5c6e 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: [email protected]
For additional commands, e-mail: [email protected]