Author: remm
Date: Mon Aug 13 11:13:47 2007
New Revision: 565464
URL: http://svn.apache.org/viewvc?view=rev&rev=565464
Log:
- Experiment with reporting warnings for unmatched elements and attributes,
based on Bill's ideas.
- The NIO HTTP protocol handler does not seem very reporting friendly at the
moment.
- The change should be rather safe, if it causes problems that cannot be fixed
easily I will revert it.
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Catalina.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Embedded.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/SetAllPropertiesRule.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/SetContextPropertiesRule.java
tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpProtocol.java
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/IntrospectionUtils.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/Digester.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/SetPropertiesRule.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/SetPropertyRule.java
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java Mon
Aug 13 11:13:47 2007
@@ -318,6 +318,20 @@
if (replacements.get(name) != null) {
repl = (String) replacements.get(name);
}
+ if (!IntrospectionUtils.setProperty(protocolHandler, repl, value)) {
+ log.warn("Property " + name + " not found on the protocol
handler.");
+ }
+ }
+
+
+ /**
+ * Set a configured property.
+ */
+ public void setPropertyInternal(String name, String value) {
+ String repl = name;
+ if (replacements.get(name) != null) {
+ repl = (String) replacements.get(name);
+ }
IntrospectionUtils.setProperty(protocolHandler, repl, value);
}
@@ -388,7 +402,7 @@
public void setAllowTrace(boolean allowTrace) {
this.allowTrace = allowTrace;
- setProperty("allowTrace", String.valueOf(allowTrace));
+ setPropertyInternal("allowTrace", String.valueOf(allowTrace));
}
@@ -466,7 +480,7 @@
public void setEmptySessionPath(boolean emptySessionPath) {
this.emptySessionPath = emptySessionPath;
- setProperty("emptySessionPath", String.valueOf(emptySessionPath));
+ setPropertyInternal("emptySessionPath",
String.valueOf(emptySessionPath));
}
@@ -489,7 +503,7 @@
public void setEnableLookups(boolean enableLookups) {
this.enableLookups = enableLookups;
- setProperty("enableLookups", String.valueOf(enableLookups));
+ setPropertyInternal("enableLookups", String.valueOf(enableLookups));
}
@@ -559,7 +573,7 @@
public void setMaxSavePostSize(int maxSavePostSize) {
this.maxSavePostSize = maxSavePostSize;
- setProperty("maxSavePostSize", String.valueOf(maxSavePostSize));
+ setPropertyInternal("maxSavePostSize",
String.valueOf(maxSavePostSize));
}
@@ -581,7 +595,7 @@
public void setPort(int port) {
this.port = port;
- setProperty("port", String.valueOf(port));
+ setPropertyInternal("port", String.valueOf(port));
}
@@ -745,7 +759,7 @@
if(proxyName != null && proxyName.length() > 0) {
this.proxyName = proxyName;
- setProperty("proxyName", proxyName);
+ setPropertyInternal("proxyName", proxyName);
} else {
this.proxyName = null;
removeProperty("proxyName");
@@ -772,7 +786,7 @@
public void setProxyPort(int proxyPort) {
this.proxyPort = proxyPort;
- setProperty("proxyPort", String.valueOf(proxyPort));
+ setPropertyInternal("proxyPort", String.valueOf(proxyPort));
}
@@ -797,7 +811,7 @@
public void setRedirectPort(int redirectPort) {
this.redirectPort = redirectPort;
- setProperty("redirectPort", String.valueOf(redirectPort));
+ setPropertyInternal("redirectPort", String.valueOf(redirectPort));
}
@@ -846,7 +860,7 @@
public void setSecure(boolean secure) {
this.secure = secure;
- setProperty("secure", Boolean.toString(secure));
+ setPropertyInternal("secure", Boolean.toString(secure));
}
/**
@@ -867,7 +881,7 @@
public void setURIEncoding(String URIEncoding) {
this.URIEncoding = URIEncoding;
- setProperty("uRIEncoding", URIEncoding);
+ setPropertyInternal("uRIEncoding", URIEncoding);
}
@@ -890,7 +904,7 @@
public void setUseBodyEncodingForURI(boolean useBodyEncodingForURI) {
this.useBodyEncodingForURI = useBodyEncodingForURI;
- setProperty
+ setPropertyInternal
("useBodyEncodingForURI", String.valueOf(useBodyEncodingForURI));
}
@@ -918,7 +932,7 @@
*/
public void setXpoweredBy(boolean xpoweredBy) {
this.xpoweredBy = xpoweredBy;
- setProperty("xpoweredBy", String.valueOf(xpoweredBy));
+ setPropertyInternal("xpoweredBy", String.valueOf(xpoweredBy));
}
/**
@@ -929,7 +943,7 @@
*/
public void setUseIPVHosts(boolean useIPVHosts) {
this.useIPVHosts = useIPVHosts;
- setProperty("useIPVHosts", String.valueOf(useIPVHosts));
+ setPropertyInternal("useIPVHosts", String.valueOf(useIPVHosts));
}
/**
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Catalina.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Catalina.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Catalina.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Catalina.java Mon Aug
13 11:13:47 2007
@@ -21,10 +21,14 @@
import java.io.File;
import java.io.FileInputStream;
-import java.io.InputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
import org.apache.catalina.Container;
import org.apache.catalina.Lifecycle;
import org.apache.catalina.LifecycleException;
@@ -260,6 +264,12 @@
// Initialize the digester
Digester digester = new Digester();
digester.setValidating(false);
+ digester.setRulesValidation(true);
+ HashMap<Class, List<String>> fakeAttributes = new HashMap<Class,
List<String>>();
+ ArrayList<String> attrs = new ArrayList<String>();
+ attrs.add("className");
+ fakeAttributes.put(Object.class, attrs);
+ digester.setFakeAttributes(fakeAttributes);
digester.setClassLoader(StandardServer.class.getClassLoader());
// Configure the actions we will be using
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Embedded.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Embedded.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Embedded.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Embedded.java Mon Aug
13 11:13:47 2007
@@ -427,7 +427,7 @@
connector = new Connector();
connector.setScheme("https");
connector.setSecure(true);
- connector.setProperty("SSLEnabled","true");
+ connector.setPropertyInternal("SSLEnabled","true");
// FIXME !!!! SET SSL PROPERTIES
} else {
connector = new Connector(protocol);
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/SetAllPropertiesRule.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/SetAllPropertiesRule.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
---
tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/SetAllPropertiesRule.java
(original)
+++
tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/SetAllPropertiesRule.java
Mon Aug 13 11:13:47 2007
@@ -62,8 +62,15 @@
name = attributes.getQName(i);
}
String value = attributes.getValue(i);
- if ( !excludes.containsKey(name))
- IntrospectionUtils.setProperty(digester.peek(), name, value);
+ if ( !excludes.containsKey(name)) {
+ if (!digester.isFakeAttribute(digester.peek(), name)
+ && !IntrospectionUtils.setProperty(digester.peek(), name, value)
+ && digester.getRulesValidation()) {
+ digester.getLogger().warn("[SetAllPropertiesRule]{" +
digester.getMatch() +
+ "} Setting property '" + name + "' to '" +
+ value + "' did not find a matching property.");
+ }
+ }
}
}
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/SetContextPropertiesRule.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/SetContextPropertiesRule.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
---
tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/SetContextPropertiesRule.java
(original)
+++
tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/SetContextPropertiesRule.java
Mon Aug 13 11:13:47 2007
@@ -60,7 +60,13 @@
continue;
}
String value = attributes.getValue(i);
- IntrospectionUtils.setProperty(digester.peek(), name, value);
+ if (!digester.isFakeAttribute(digester.peek(), name)
+ && !IntrospectionUtils.setProperty(digester.peek(), name, value)
+ && digester.getRulesValidation()) {
+ digester.getLogger().warn("[SetContextPropertiesRule]{" +
digester.getMatch() +
+ "} Setting property '" + name + "' to '" +
+ value + "' did not find a matching property.");
+ }
}
}
Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java Mon Aug
13 11:13:47 2007
@@ -137,22 +137,6 @@
/**
- * Set a property.
- */
- public void setProperty(String name, String value) {
- setAttribute(name, value);
- }
-
-
- /**
- * Get a property
- */
- public String getProperty(String name) {
- return (String) getAttribute(name);
- }
-
-
- /**
* The adapter, used to call the connector
*/
public void setAdapter(Adapter adapter) {
Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpProtocol.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpProtocol.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpProtocol.java Mon Aug 13
11:13:47 2007
@@ -137,22 +137,6 @@
/**
- * Set a property.
- */
- public void setProperty(String name, String value) {
- setAttribute(name, value);
- }
-
-
- /**
- * Get a property
- */
- public String getProperty(String name) {
- return (String) getAttribute(name);
- }
-
-
- /**
* The adapter, used to call the connector
*/
public void setAdapter(Adapter adapter) {
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
Mon Aug 13 11:13:47 2007
@@ -90,20 +90,6 @@
}
/**
- * Set a property.
- */
- public void setProperty(String name, String value) {
- setAttribute(name, value);
- }
-
- /**
- * Get a property
- */
- public String getProperty(String name) {
- return (String)getAttribute(name);
- }
-
- /**
* The adapter, used to call the connector.
*/
protected Adapter adapter;
@@ -325,14 +311,9 @@
public void setRestrictedUserAgents(String valueS) { restrictedUserAgents
= valueS; }
- public String getProtocol() {
- return getProperty("protocol");
- }
-
- public void setProtocol( String k ) {
- setSecure(true);
- setAttribute("protocol", k);
- }
+ protected String protocol = null;
+ public String getProtocol() { return protocol; }
+ public void setProtocol(String protocol) { setSecure(true); this.protocol
= protocol; }
/**
* Maximum number of requests which can be performed over a keepalive
Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java Mon
Aug 13 11:13:47 2007
@@ -103,20 +103,6 @@
/**
- * Set a property.
- */
- public void setProperty(String name, String value) {
- setAttribute(name, value);
- }
-
- /**
- * Get a property
- */
- public String getProperty(String name) {
- return (String)getAttribute(name);
- }
-
- /**
* Pass config info
*/
public void setAttribute(String name, Object value) {
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/IntrospectionUtils.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/IntrospectionUtils.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/IntrospectionUtils.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/IntrospectionUtils.java
Mon Aug 13 11:13:47 2007
@@ -258,7 +258,7 @@
* int or boolean we'll convert value to the right type before) - that
means
* you can have setDebug(1).
*/
- public static void setProperty(Object o, String name, String value) {
+ public static boolean setProperty(Object o, String name, String value) {
if (dbg > 1)
d("setProperty(" + o.getClass() + " " + name + "=" + value + ")");
@@ -275,7 +275,7 @@
&& "java.lang.String".equals(paramT[0].getName())) {
methods[i].invoke(o, new Object[] { value });
- return;
+ return true;
}
}
@@ -328,7 +328,7 @@
if (ok) {
methods[i].invoke(o, params);
- return;
+ return true;
}
}
@@ -344,6 +344,7 @@
params[0] = name;
params[1] = value;
setPropertyMethod.invoke(o, params);
+ return true;
}
} catch (IllegalArgumentException ex2) {
@@ -367,6 +368,7 @@
if (dbg > 1)
ie.printStackTrace();
}
+ return false;
}
public static Object getProperty(Object o, String name) {
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/Digester.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/Digester.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/Digester.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/Digester.java Mon
Aug 13 11:13:47 2007
@@ -312,6 +312,19 @@
protected boolean validating = false;
+
+ /**
+ * Warn on missing attributes and elements.
+ */
+ protected boolean rulesValidation = false;
+
+
+ /**
+ * Fake attributes map (attributes are often used for object creation).
+ */
+ protected Map<Class, List<String>> fakeAttributes = null;
+
+
/**
* The Log to which most logging calls will be made.
*/
@@ -889,6 +902,72 @@
/**
+ * Return the rules validation flag.
+ */
+ public boolean getRulesValidation() {
+
+ return (this.rulesValidation);
+
+ }
+
+
+ /**
+ * Set the rules validation flag. This must be called before
+ * <code>parse()</code> is called the first time.
+ *
+ * @param rulesValidation The new rules validation flag.
+ */
+ public void setRulesValidation(boolean rulesValidation) {
+
+ this.rulesValidation = rulesValidation;
+
+ }
+
+
+ /**
+ * Return the fake attributes list.
+ */
+ public Map<Class, List<String>> getFakeAttributes() {
+
+ return (this.fakeAttributes);
+
+ }
+
+
+ /**
+ * Determine if an attribute is a fake attribute.
+ */
+ public boolean isFakeAttribute(Object object, String name) {
+
+ if (fakeAttributes == null) {
+ return false;
+ }
+ List<String> result = fakeAttributes.get(object.getClass());
+ if (result == null) {
+ result = fakeAttributes.get(Object.class);
+ }
+ if (result == null) {
+ return false;
+ } else {
+ return result.contains(name);
+ }
+
+ }
+
+
+ /**
+ * Set the fake attributes.
+ *
+ * @param fakeAttributes The new fake attributes.
+ */
+ public void setFakeAttributes(Map<Class, List<String>> fakeAttributes) {
+
+ this.fakeAttributes = fakeAttributes;
+
+ }
+
+
+ /**
* Return the XMLReader to be used for parsing the input document.
*
* FIX ME: there is a bug in JAXP/XERCES that prevent the use of a
@@ -1037,6 +1116,9 @@
} else {
if (debug) {
log.debug(" No rules found matching '" + match + "'.");
+ }
+ if (rulesValidation) {
+ log.warn(" No rules found matching '" + match + "'.");
}
}
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/SetPropertiesRule.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/SetPropertiesRule.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
---
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/SetPropertiesRule.java
(original)
+++
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/SetPropertiesRule.java
Mon Aug 13 11:13:47 2007
@@ -205,7 +205,13 @@
"} Setting property '" + name + "' to '" +
value + "'");
}
- IntrospectionUtils.setProperty(top, name, value);
+ if (!digester.isFakeAttribute(top, name)
+ && !IntrospectionUtils.setProperty(top, name, value)
+ && digester.getRulesValidation()) {
+ digester.log.warn("[SetPropertiesRule]{" + digester.match +
+ "} Setting property '" + name + "' to '" +
+ value + "' did not find a matching property.");
+ }
}
}
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/SetPropertyRule.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/SetPropertyRule.java?view=diff&rev=565464&r1=565463&r2=565464
==============================================================================
---
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/SetPropertyRule.java
(original)
+++
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/SetPropertyRule.java
Mon Aug 13 11:13:47 2007
@@ -125,8 +125,13 @@
}
// Set the property (with conversion as necessary)
- // FIXME: Exception if property doesn't exist ?
- IntrospectionUtils.setProperty(top, actualName, actualValue);
+ if (!digester.isFakeAttribute(top, actualName)
+ && !IntrospectionUtils.setProperty(top, actualName, actualValue)
+ && digester.getRulesValidation()) {
+ digester.log.warn("[SetPropertyRule]{" + digester.match +
+ "} Setting property '" + name + "' to '" +
+ value + "' did not find a matching property.");
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]