You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2010/05/17 00:29:30 UTC
svn commit: r944928 - in /tomcat/trunk/java/org/apache/catalina/startup:
ContextConfig.java LocalStrings.properties TldConfig.java
XmlErrorHandler.java
Author: markt
Date: Sun May 16 22:29:29 2010
New Revision: 944928
URL: http://svn.apache.org/viewvc?rev=944928&view=rev
Log:
Refactor XML validation error handling. Error reporting in web.xml and web-fragment.xml now includes source info.
Added:
tomcat/trunk/java/org/apache/catalina/startup/XmlErrorHandler.java (with props)
Modified:
tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties
tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java
Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=944928&r1=944927&r2=944928&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Sun May 16 22:29:29 2010
@@ -90,7 +90,6 @@ import org.apache.tomcat.JarScannerCallb
import org.apache.tomcat.util.res.StringManager;
import org.apache.tomcat.util.digester.Digester;
import org.apache.tomcat.util.digester.RuleSet;
-import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;
@@ -611,10 +610,12 @@ public class ContextConfig
contextDigester.setUseContextClassLoader(false);
contextDigester.push(context.getParent());
contextDigester.push(context);
- ContextErrorHandler errorHandler = new ContextErrorHandler();
+ XmlErrorHandler errorHandler = new XmlErrorHandler();
contextDigester.setErrorHandler(errorHandler);
contextDigester.parse(source);
- if (errorHandler.parseException != null) {
+ if (errorHandler.getWarnings().size() > 0 ||
+ errorHandler.getErrors().size() > 0) {
+ errorHandler.logFindings(log, contextXml.toString());
ok = false;
}
if (log.isDebugEnabled())
@@ -1590,7 +1591,7 @@ public class ContextConfig
if (source == null) return;
- ContextErrorHandler handler = new ContextErrorHandler();
+ XmlErrorHandler handler = new XmlErrorHandler();
// Web digesters and rulesets are shared between contexts but are not
// thread safe. Whilst there should only be one thread at a time
@@ -1615,8 +1616,10 @@ public class ContextConfig
try {
digester.parse(source);
- if (handler.getParseException() != null) {
+ if (handler.getWarnings().size() > 0 ||
+ handler.getErrors().size() > 0) {
ok = false;
+ handler.logFindings(log, source.getSystemId());
}
} catch (SAXParseException e) {
log.error(sm.getString("contextConfig.applicationParse",
@@ -2228,7 +2231,7 @@ public class ContextConfig
stream = jarFile.getInputStream(fragmentEntry);
InputSource source = new InputSource(
urlConn.getJarFileURL().toString() +
- File.separatorChar + FRAGMENT_LOCATION);
+ "!/" + FRAGMENT_LOCATION);
source.setByteStream(stream);
parseWebXml(source, fragment, true);
}
@@ -2295,29 +2298,4 @@ public class ContextConfig
return fragments;
}
}
-
-
- protected static class ContextErrorHandler
- implements ErrorHandler {
-
- private SAXParseException parseException = null;
-
- public void error(SAXParseException exception) {
- parseException = exception;
- }
-
- public void fatalError(SAXParseException exception) {
- parseException = exception;
- }
-
- public void warning(SAXParseException exception) {
- parseException = exception;
- }
-
- public SAXParseException getParseException() {
- return parseException;
- }
- }
-
-
}
Modified: tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties?rev=944928&r1=944927&r2=944928&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties Sun May 16 22:29:29 2010
@@ -105,8 +105,6 @@ tldConfig.cce=Lifecycle event data objec
tldConfig.dirFail=Failed to process directory [{0}] for TLD files
tldConfig.dirScan=Scanning for TLD files in directory [{0}]
tldConfig.execute=Error processing TLD files for context path {0}
-tldConfig.handlerError=Non-fatal error [{0}] reported processing [{1}].
-tldConfig.handlerWarning=Warning [{0}] reported processing [{1}].
tldConfig.jarFail=Failed to process JAR [{0}] for TLD files
tldConfig.webinfFail=Failed to process TLD found at [{0}]
tldConfig.webinfScan=Scanning WEB-INF for TLD files in [{0}]
@@ -122,4 +120,5 @@ userConfig.start=UserConfig: Processing
userConfig.stop=UserConfig: Processing STOP
webRuleSet.absoluteOrdering=<absolute-ordering> element not valid in web-fragment.xml and will be ignored
webRuleSet.relativeOrdering=<ordering> element not valid in web.xml and will be ignored
-
+xmlErrorHandler.error=Non-fatal error [{0}] reported processing [{1}].
+xmlErrorHandler.warning=Warning [{0}] reported processing [{1}].
Modified: tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java?rev=944928&r1=944927&r2=944928&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java Sun May 16 22:29:29 2010
@@ -14,11 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-
package org.apache.catalina.startup;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -47,10 +44,8 @@ import org.apache.tomcat.JarScannerCallb
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.res.StringManager;
import org.apache.tomcat.util.digester.Digester;
-import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
/**
@@ -346,43 +341,6 @@ public final class TldConfig implements
}
}
- private static class TldErrorHandler implements ErrorHandler {
-
- private Set<SAXParseException> errors =
- new HashSet<SAXParseException>();
-
- private Set<SAXParseException> warnings =
- new HashSet<SAXParseException>();
-
- @Override
- public void error(SAXParseException exception) throws SAXException {
- // Collect non-fatal errors
- errors.add(exception);
- }
-
- @Override
- public void fatalError(SAXParseException exception) throws SAXException {
- // Re-throw fatal errors
- throw exception;
- }
-
- @Override
- public void warning(SAXParseException exception) throws SAXException {
- // Collect warnings
- warnings.add(exception);
- }
-
- public Set<SAXParseException> getErrors() {
- // Internal use only - don't worry about immutability
- return errors;
- }
-
- public Set<SAXParseException> getWarnings() {
- // Internal use only - don't worry about immutability
- return warnings;
- }
- }
-
// -------------------------------------------------------- Private Methods
@@ -422,8 +380,8 @@ public final class TldConfig implements
try {
InputStream stream = context.getServletContext(
).getResourceAsStream(resourcePath);
- TldErrorHandler handler = tldScanStream(stream);
- processErrorHandler(handler, resourcePath);
+ XmlErrorHandler handler = tldScanStream(stream);
+ handler.logFindings(log, resourcePath);
taglibUris.add(descriptor.getTaglibURI());
webxmlTaglibUris.add(descriptor.getTaglibURI());
} catch (IOException ioe) {
@@ -469,8 +427,8 @@ public final class TldConfig implements
}
InputStream stream = ctxt.getResourceAsStream(path);
try {
- TldErrorHandler handler = tldScanStream(stream);
- processErrorHandler(handler, path);
+ XmlErrorHandler handler = tldScanStream(stream);
+ handler.logFindings(log, path);
} catch (IOException ioe) {
log.warn(sm.getString("tldConfig.webinfFail", path),
ioe);
@@ -512,9 +470,8 @@ public final class TldConfig implements
InputStream stream = null;
try {
stream = new FileInputStream(fileList[i]);
- TldErrorHandler handler = tldScanStream(stream);
- processErrorHandler(handler,
- fileList[i].getAbsolutePath());
+ XmlErrorHandler handler = tldScanStream(stream);
+ handler.logFindings(log, fileList[i].getAbsolutePath());
} catch (IOException ioe) {
log.warn(sm.getString("tldConfig.dirFail",
fileList[i].getAbsolutePath()),
@@ -555,8 +512,8 @@ public final class TldConfig implements
if (!name.startsWith("META-INF/")) continue;
if (!name.endsWith(".tld")) continue;
InputStream stream = jarFile.getInputStream(entry);
- TldErrorHandler handler = tldScanStream(stream);
- processErrorHandler(handler, conn.getURL() + name);
+ XmlErrorHandler handler = tldScanStream(stream);
+ handler.logFindings(log, conn.getURL() + name);
}
} catch (IOException ioe) {
log.warn(sm.getString("tldConfig.jarFail", conn.getURL() + name),
@@ -574,21 +531,6 @@ public final class TldConfig implements
/*
- * Log the non-fatal errors and warnings
- */
- private void processErrorHandler(TldErrorHandler handler, String source) {
- for (SAXParseException e : handler.getWarnings()) {
- log.warn(sm.getString(
- "tldConfig.handlerWarning", e.getMessage(), source));
- }
- for (SAXParseException e : handler.getErrors()) {
- log.warn(sm.getString(
- "tldConfig.handlerError", e.getMessage(), source));
- }
- }
-
-
- /*
* Scan the TLD contents in the specified input stream, and register
* any application event listeners found there. <b>NOTE</b> - This
* method ensure that the InputStream is correctly closed.
@@ -597,12 +539,12 @@ public final class TldConfig implements
*
* @throws IOException If the file cannot be read
*/
- private TldErrorHandler tldScanStream(InputStream resourceStream)
+ private XmlErrorHandler tldScanStream(InputStream resourceStream)
throws IOException {
InputSource source = new InputSource(resourceStream);
- TldErrorHandler result = new TldErrorHandler();
+ XmlErrorHandler result = new XmlErrorHandler();
synchronized (tldDigester) {
try {
Added: tomcat/trunk/java/org/apache/catalina/startup/XmlErrorHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/XmlErrorHandler.java?rev=944928&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/XmlErrorHandler.java (added)
+++ tomcat/trunk/java/org/apache/catalina/startup/XmlErrorHandler.java Sun May 16 22:29:29 2010
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.catalina.startup;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.juli.logging.Log;
+import org.apache.tomcat.util.res.StringManager;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+public class XmlErrorHandler implements ErrorHandler {
+
+ private static final StringManager sm =
+ StringManager.getManager(Constants.Package);
+
+ private Set<SAXParseException> errors =
+ new HashSet<SAXParseException>();
+
+ private Set<SAXParseException> warnings =
+ new HashSet<SAXParseException>();
+
+ @Override
+ public void error(SAXParseException exception) throws SAXException {
+ // Collect non-fatal errors
+ errors.add(exception);
+ }
+
+ @Override
+ public void fatalError(SAXParseException exception) throws SAXException {
+ // Re-throw fatal errors
+ throw exception;
+ }
+
+ @Override
+ public void warning(SAXParseException exception) throws SAXException {
+ // Collect warnings
+ warnings.add(exception);
+ }
+
+ public Set<SAXParseException> getErrors() {
+ // Internal use only - don't worry about immutability
+ return errors;
+ }
+
+ public Set<SAXParseException> getWarnings() {
+ // Internal use only - don't worry about immutability
+ return warnings;
+ }
+
+ public void logFindings(Log log, String source) {
+ for (SAXParseException e : getWarnings()) {
+ log.warn(sm.getString(
+ "xmlErrorHandler.warning", e.getMessage(), source));
+ }
+ for (SAXParseException e : getErrors()) {
+ log.warn(sm.getString(
+ "xmlErrorHandler.error", e.getMessage(), source));
+ }
+ }
+}
Propchange: tomcat/trunk/java/org/apache/catalina/startup/XmlErrorHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org