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);