You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2001/09/29 06:28:22 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/util/xml XmlMapper.java
costin 01/09/28 21:28:22
Modified: src/facade22/org/apache/tomcat/facade WebXmlReader.java
src/share/org/apache/tomcat/util/xml XmlMapper.java
Log:
3870: add error handler, error messages for validation problems.
Revision Changes Path
1.14 +36 -33 jakarta-tomcat/src/facade22/org/apache/tomcat/facade/WebXmlReader.java
Index: WebXmlReader.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/facade22/org/apache/tomcat/facade/WebXmlReader.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- WebXmlReader.java 2001/08/03 02:37:13 1.13
+++ WebXmlReader.java 2001/09/29 04:28:22 1.14
@@ -38,37 +38,6 @@
validate=b;
}
-// private Handler addServlet( Context ctx, String name, String classN )
-// throws TomcatException
-// {
-// ServletInfo sw=new ServletInfo(); // ctx.createHandler();
-// sw.setContext(ctx);
-// sw.setServletName( name );
-// sw.setServletClassName( classN);
-// ctx.addServlet( sw.getHandler() );
-// sw.setLoadOnStartUp( -2147483646 );
-// return sw.getHandler();
-// }
-
-// private void setDefaults( Context ctx )
-// throws TomcatException
-// {
-// // addServlet( ctx, "default", "org.apache.tomcat.servlets.DefaultServlet");
-// // addServlet( ctx, "invoker", "org.apache.tomcat.servlets.InvokerServlet");
-// // Handler sw=addServlet( ctx, "jsp", "org.apache.jasper.servlet.JspServlet");
-// // sw.addInitParam("jspCompilerPlugin", "org.apache.jasper.compiler.JikesJavaCompiler");
-
-// // ctx.addServletMapping( "/servlet/*", "invoker");
-// ctx.addServletMapping( "*.jsp", "jsp");
-
-// ctx.setSessionTimeOut( 30 );
-
-// // mime-mapping - are build into MimeMap.
-// // Note that default mappings are based on existing registered types.
-
-// }
-
-
private void readDefaultWebXml( Context ctx ) throws TomcatException {
ContextManager cm=ctx.getContextManager();
String home = cm.getHome();
@@ -127,6 +96,35 @@
}
+ static class WebXmlErrorHandler implements ErrorHandler{
+ Context ctx;
+ XmlMapper xm;
+ boolean ok;
+ WebXmlErrorHandler( XmlMapper xm,Context ctx ) {
+ this.ctx=ctx;
+ this.xm=xm;
+ }
+
+ public void warning (SAXParseException exception)
+ throws SAXException {
+ ctx.log("web.xml: Warning " + exception );
+ ctx.log(xm.positionToString());
+ }
+ public void error (SAXParseException exception)
+ throws SAXException
+ {
+ ctx.log("web.xml: Error " + exception );
+ ctx.log(xm.positionToString());
+ }
+ public void fatalError (SAXParseException exception)
+ throws SAXException
+ {
+ ctx.log("web.xml: Fatal error " + exception );
+ ctx.log(xm.positionToString());
+ throw new SAXException( "Fatal error " + exception );
+ }
+ }
+
void processWebXmlFile( Context ctx, String file) {
try {
File f=new File(FileUtil.patch(file));
@@ -142,8 +140,8 @@
v.lastModified() < f.lastModified() ) {
ctx.log("Validating web.xml");
xh.setValidating(true);
+ xh.setErrorHandler( new WebXmlErrorHandler( xh, ctx ) );
}
- // if( ctx.getDebug() > 5 ) xh.setDebug( 3 );
}
// By using dtdURL you brake most parsers ( at least xerces )
@@ -242,7 +240,12 @@
}
}
} catch(Exception ex ) {
- log("ERROR reading " + file, ex);
+ log("ERROR initializing " + file, ex);
+ try {
+ ctx.setState( Context.STATE_DISABLED );
+ } catch(Exception ex1 ) {
+ ex1.printStackTrace();
+ }
// XXX we should invalidate the context and un-load it !!!
}
}
1.37 +27 -7 jakarta-tomcat/src/share/org/apache/tomcat/util/xml/XmlMapper.java
Index: XmlMapper.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/xml/XmlMapper.java,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- XmlMapper.java 2001/08/03 02:54:53 1.36
+++ XmlMapper.java 2001/09/29 04:28:22 1.37
@@ -21,10 +21,8 @@
*
* @author costin@dnt.ro
*/
-public class XmlMapper
- extends HandlerBase
- implements SaxContext {
-
+public class XmlMapper extends HandlerBase implements SaxContext
+{
Locator locator;
/**
@@ -42,7 +40,8 @@
String tagStack[];
int oSp;
int sp;
-
+ ErrorHandler errorHandler;
+
String body;
int debug=0;
@@ -61,6 +60,10 @@
this.locator = locator;
}
+ public Locator getLocator() {
+ return locator;
+ }
+
public void startDocument () throws SAXException
{
sp = 0;
@@ -89,7 +92,7 @@
}
}
- private String positionToString() {
+ public String positionToString() {
StringBuffer sb=new StringBuffer();
if( locator!=null ) sb.append("Line ").append(locator.getLineNumber()).append(" ");
sb.append("/");
@@ -258,6 +261,10 @@
return this;
}
+ public void setErrorHandler( ErrorHandler eh ) {
+ errorHandler=eh;
+ }
+
boolean useLocalLoader=true;
public void useLocalLoader(boolean b ) {
@@ -287,7 +294,20 @@
factory.setNamespaceAware(false);
factory.setValidating(validating);
parser = factory.newSAXParser();
- parser.parse(xmlFile, this);
+ Parser saxParser=parser.getParser();
+ saxParser.setDocumentHandler( this );
+ saxParser.setEntityResolver( this );
+ if( errorHandler!=null ) {
+ saxParser.setErrorHandler( errorHandler );
+ }
+
+ String uri = "file:" + xmlFile.getAbsolutePath();
+ if (File.separatorChar == '\\') {
+ uri = uri.replace('\\', '/');
+ }
+ InputSource input = new InputSource(uri);
+
+ saxParser.parse(input);
if( useLocalLoader && cl!= null ) {
jdk11Compat.setContextClassLoader(cl);