You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2020/07/20 09:46:36 UTC
[tomcat] branch 9.0.x updated: Add missing code generation for
remaining digester rules
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 09b8bea Add missing code generation for remaining digester rules
09b8bea is described below
commit 09b8beabed15572431863dd65bd08ed2dab86c7c
Author: remm <re...@apache.org>
AuthorDate: Mon Jul 20 11:30:44 2020 +0200
Add missing code generation for remaining digester rules
A quick test with the web.xml files from Tomcat looks rather decent. I
don't know yet if it will be used by at least the functionality is more
complete this way.
Another item that can be added is generating a static loader as at the
moment each individual generated class is dynamically loaded, even
though the full list is known.
---
.../tomcat/util/descriptor/web/WebRuleSet.java | 150 +++++++++++++++++++--
.../tomcat/util/digester/CallMethodRule.java | 4 +-
webapps/docs/changelog.xml | 3 +
3 files changed, 143 insertions(+), 14 deletions(-)
diff --git a/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java b/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java
index 237d1c1..6bb972f 100644
--- a/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java
+++ b/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java
@@ -799,6 +799,13 @@ final class SetAuthConstraintRule extends Rule {
digester.getLogger()
.debug("Calling SecurityConstraint.setAuthConstraint(true)");
}
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(securityConstraint)).append(".setAuthConstraint(true);");
+ code.append(System.lineSeparator());
+ }
}
}
@@ -823,6 +830,13 @@ final class SetDistributableRule extends Rule {
digester.getLogger().debug
(webXml.getClass().getName() + ".setDistributable(true)");
}
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(webXml)).append(".setDistributable(true);");
+ code.append(System.lineSeparator());
+ }
}
}
@@ -846,6 +860,13 @@ final class SetDenyUncoveredHttpMethodsRule extends Rule {
digester.getLogger().debug(webXml.getClass().getName() +
".setDenyUncoveredHttpMethods(true)");
}
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(webXml)).append(".setDenyUncoveredHttpMethods(true);");
+ code.append(System.lineSeparator());
+ }
}
}
@@ -887,6 +908,13 @@ final class SetPublicIdRule extends Rule {
digester.getLogger().debug("" + top.getClass().getName() + "."
+ method + "(" + paramValues[0] + ")");
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(top)).append(".").append(method).append("(\"");
+ code.append(digester.getPublicId()).append("\");");
+ code.append(System.lineSeparator());
+ }
}
}
@@ -910,6 +938,13 @@ final class ServletDefCreateRule extends Rule {
digester.push(servletDef);
if (digester.getLogger().isDebugEnabled())
digester.getLogger().debug("new " + servletDef.getClass().getName());
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(ServletDef.class.getName()).append(' ').append(digester.toVariableName(servletDef)).append(" = new ");
+ code.append(ServletDef.class.getName()).append("();").append(System.lineSeparator());
+ }
}
@Override
@@ -918,6 +953,11 @@ final class ServletDefCreateRule extends Rule {
ServletDef servletDef = (ServletDef) digester.pop();
if (digester.getLogger().isDebugEnabled())
digester.getLogger().debug("pop " + servletDef.getClass().getName());
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ }
}
}
@@ -1043,6 +1083,24 @@ final class CallMethodMultiRule extends CallMethodRule {
}
IntrospectionUtils.callMethodN(target, methodName, paramValues,
paramTypes);
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(digester.toVariableName(target)).append('.').append(methodName);
+ code.append('(');
+ for (int i = 0; i < paramValues.length; i++) {
+ if (i > 0) {
+ code.append(", ");
+ }
+ if (paramValues[i] instanceof String) {
+ code.append("\"").append(paramValues[i].toString()).append("\"");
+ } else {
+ code.append(digester.toVariableName(paramValues[i]));
+ }
+ }
+ code.append(");");
+ code.append(System.lineSeparator());
+ }
}
}
@@ -1065,17 +1123,27 @@ final class IgnoreAnnotationsRule extends Rule {
@Override
public void begin(String namespace, String name, Attributes attributes)
throws Exception {
- WebXml webxml = (WebXml) digester.peek(digester.getCount() - 1);
+ WebXml webXml = (WebXml) digester.peek(digester.getCount() - 1);
String value = attributes.getValue("metadata-complete");
if ("true".equals(value)) {
- webxml.setMetadataComplete(true);
+ webXml.setMetadataComplete(true);
} else if ("false".equals(value)) {
- webxml.setMetadataComplete(false);
+ webXml.setMetadataComplete(false);
+ } else {
+ value = null;
}
if (digester.getLogger().isDebugEnabled()) {
digester.getLogger().debug
- (webxml.getClass().getName() + ".setMetadataComplete( " +
- webxml.isMetadataComplete() + ")");
+ (webXml.getClass().getName() + ".setMetadataComplete( " +
+ webXml.isMetadataComplete() + ")");
+ }
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (value != null && code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(webXml)).append(".setMetadataComplete(");
+ code.append(value).append(");");
+ code.append(System.lineSeparator());
}
}
@@ -1095,13 +1163,21 @@ final class VersionRule extends Rule {
@Override
public void begin(String namespace, String name, Attributes attributes)
throws Exception {
- WebXml webxml = (WebXml) digester.peek(digester.getCount() - 1);
- webxml.setVersion(attributes.getValue("version"));
+ WebXml webXml = (WebXml) digester.peek(digester.getCount() - 1);
+ webXml.setVersion(attributes.getValue("version"));
if (digester.getLogger().isDebugEnabled()) {
digester.getLogger().debug
- (webxml.getClass().getName() + ".setVersion( " +
- webxml.getVersion() + ")");
+ (webXml.getClass().getName() + ".setVersion( " +
+ webXml.getVersion() + ")");
+ }
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(webXml)).append(".setVersion(\"");
+ code.append(attributes.getValue("version")).append("\");");
+ code.append(System.lineSeparator());
}
}
@@ -1132,8 +1208,15 @@ final class NameRule extends Rule {
@Override
public void body(String namespace, String name, String text)
throws Exception {
- super.body(namespace, name, text);
((WebXml) digester.peek()).setName(text);
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(digester.peek())).append(".setName(\"");
+ code.append(text).append("\");");
+ code.append(System.lineSeparator());
+ }
}
}
@@ -1169,6 +1252,13 @@ final class AbsoluteOrderingRule extends Rule {
digester.getLogger().debug(
webXml.getClass().getName() + ".setAbsoluteOrdering()");
}
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(webXml)).append(".createAbsoluteOrdering();");
+ code.append(System.lineSeparator());
+ }
}
}
}
@@ -1232,8 +1322,16 @@ final class SoapHeaderRule extends Rule {
namespaceuri = digester.findNamespaceURI(prefix);
localpart = text.substring(colon+1);
}
- ContextHandler contextHandler = (ContextHandler)digester.peek();
- contextHandler.addSoapHeaders(localpart,namespaceuri);
+ ContextHandler contextHandler = (ContextHandler) digester.peek();
+ contextHandler.addSoapHeaders(localpart, namespaceuri);
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(contextHandler)).append(".addSoapHeaders(\"");
+ code.append(localpart).append("\", \"").append(namespaceuri).append("\");");
+ code.append(System.lineSeparator());
+ }
}
}
@@ -1268,9 +1366,20 @@ final class ServiceQnameRule extends Rule {
namespaceuri = digester.findNamespaceURI(prefix);
localpart = text.substring(colon+1);
}
- ContextService contextService = (ContextService)digester.peek();
+ ContextService contextService = (ContextService) digester.peek();
contextService.setServiceqnameLocalpart(localpart);
contextService.setServiceqnameNamespaceURI(namespaceuri);
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(contextService)).append(".setServiceqnameLocalpart(\"");
+ code.append(localpart).append("\");");
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(contextService)).append(".setServiceqnameNamespaceURI(\"");
+ code.append(namespaceuri).append("\");");
+ code.append(System.lineSeparator());
+ }
}
}
@@ -1324,6 +1433,14 @@ final class MappedNameRule extends Rule {
throws Exception {
ResourceBase resourceBase = (ResourceBase) digester.peek();
resourceBase.setProperty("mappedName", text.trim());
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(resourceBase));
+ code.append(".setProperty(\"mappedName\", \"").append(text.trim()).append("\");");
+ code.append(System.lineSeparator());
+ }
}
}
@@ -1375,5 +1492,12 @@ final class SetOverrideRule extends Rule {
if (digester.getLogger().isDebugEnabled()) {
digester.getLogger().debug(envEntry.getClass().getName() + ".setOverride(false)");
}
+
+ StringBuilder code = digester.getGeneratedCode();
+ if (code != null) {
+ code.append(System.lineSeparator());
+ code.append(digester.toVariableName(envEntry)).append(".setOverride(false);");
+ code.append(System.lineSeparator());
+ }
}
}
diff --git a/java/org/apache/tomcat/util/digester/CallMethodRule.java b/java/org/apache/tomcat/util/digester/CallMethodRule.java
index 9310011..0a521a9 100644
--- a/java/org/apache/tomcat/util/digester/CallMethodRule.java
+++ b/java/org/apache/tomcat/util/digester/CallMethodRule.java
@@ -390,10 +390,12 @@ public class CallMethodRule extends Rule {
code.append('(');
for (int i = 0; i < paramValues.length; i++) {
if (i > 0) {
- code.append(',');
+ code.append(", ");
}
if (bodyText != null) {
code.append("\"").append(bodyText).append("\"");
+ } else if (paramValues[i] instanceof String) {
+ code.append("\"").append(paramValues[i].toString()).append("\"");
} else {
code.append(digester.toVariableName(paramValues[i]));
}
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 1637975..11916b2 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -62,6 +62,9 @@
conflict with default host name on case insensitive filesystems.
(remm)
</fix>
+ <fix>
+ Add missing code generation for remaining digester rules. (remm)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org