tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <cmanola...@yahoo.com>
Subject Re: [PATCH] TC 3.3 WebXmlReader.java
Date Fri, 02 Nov 2001 16:33:23 GMT
On Fri, 2 Nov 2001, Bojan Smojver wrote:

> Notice that here, only the second time around things go bad (at context
> reload) and that's only sometimes. Normally, there is nothing in the
> logs. Weird...
>
> I'll have to dig into it to find out what it really is. I might apply
> this patch to my local build, just to see if it makes any difference.

The patch seems ok to me ( thanks David !) - I was planning to check it
in. If you find any problem let me know.

I added this 'validation mark' to avoid the expensive validation if the
file was already validated before. Since tomcat can ( or should be able to
) tolerate some errors in web.xml everything should still work - but you
get the warning that the file have errors like bad ordering of elements.

Without the patch you get the warning only once ( or after each
modification of web.xml ). With the patch you'll be warned on each server
startup and the startup time will be longer until you fix web.xml -
which should give time to read the warnings and be the punishment.


Costin



> > Some people I work with noticed that Tomcat was spitting out a web.xml
> > validation error for their app, but only the first time they started up.
> > This gave them the impression that everything was ok the second time.
> >
> > Well, I looked around a bit and found that WebXmlReader writes out a
> > "validation mark" (webxmlval.txt) in the work directory.  The timestamp of
> > the validation mark is used as part of deciding whether to validate.  The
> > thing is, this mark is written out even if web.xml was not valid so next
> > time through validation is skipped.
> >
> > I'm not sure if this was done on purpose and I can even imagine an argument
> > about not nagging more than once.  Still, in our case the disappearance of
> > the validation errors brought about false confidence.
> >
> > In case this seems like a problem to anyone else, here's a patch that only
> > writes out the validation mark if the XML parsed without errors.  That way
> > you keep seeing the validation errors until you a) disable validation or b)
> > fix the offending xml.
> >
> > Interestingly, this patch takes advantage of an unused boolean field in the
> > error handler.  Makes me wonder if somebody already thought of this but
> > decided not to deal with it.  Perhaps there was a good reason.
> >
> > Regards,
> >
> > -David
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> > --- WebXmlReader.java.orig	Wed Oct 31 13:00:07 2001
> > +++ WebXmlReader.java	Wed Oct 31 12:12:55 2001
> > @@ -99,7 +99,7 @@
> >      static class WebXmlErrorHandler implements ErrorHandler{
> >  	Context ctx;
> >  	XmlMapper xm;
> > -	boolean ok;
> > +	boolean ok = true;
> >  	WebXmlErrorHandler( XmlMapper xm,Context ctx ) {
> >  	    this.ctx=ctx;
> >  	    this.xm=xm;
> > @@ -113,16 +113,21 @@
> >  	public void error (SAXParseException exception)
> >  	    throws SAXException
> >  	{
> > +	    ok = false;
> >  	    ctx.log("web.xml: Error " + exception );
> >  	    ctx.log(xm.positionToString());
> >  	}
> >  	public void fatalError (SAXParseException exception)
> >  	    throws SAXException
> >  	{
> > +	    ok = false;
> >  	    ctx.log("web.xml: Fatal error " + exception );
> >  	    ctx.log(xm.positionToString());
> >  	    throw new SAXException( "Fatal error " + exception );
> >  	}
> > +	public boolean isOk() {
> > +	    return ok;
> > +	}
> >      }
> >
> >      void processWebXmlFile( Context ctx, String file) {
> > @@ -134,13 +139,15 @@
> >  	    }
> >  	    if( ctx.getDebug() > 0 ) ctx.log("Reading " + file );
> >  	    XmlMapper xh=new XmlMapper();
> > +	    WebXmlErrorHandler xeh = null;
> >  	    File v=new File( ctx.getWorkDir(), "webxmlval.txt" );
> >  	    if( validate ) {
> >  		if( ! v.exists() ||
> >  		    v.lastModified() < f.lastModified() ) {
> >  		    ctx.log("Validating web.xml");
> >  		    xh.setValidating(true);
> > -		    xh.setErrorHandler( new WebXmlErrorHandler( xh, ctx ) );
> > +		    xeh = new WebXmlErrorHandler( xh, ctx );
> > +		    xh.setErrorHandler( xeh );
> >  		}
> >  	    }
> >
> > @@ -230,7 +237,8 @@
> >
> >  	    Object ctx1=xh.readXml(f, ctx);
> >
> > -	    if( validate ) {
> > +	    if( validate && xeh.isOk()) {
> > +		// don't create/update the validation mark if an error was detected
> >  		try {
> >  		    FileOutputStream fos=new FileOutputStream( v );
> >  		    fos.write( 1 );
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> > --
> > To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
> > For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>
> >
>
>
>
> --
> To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>
>



--
To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>


Mime
View raw message