You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Andrew Friebel <an...@reynolds.com.au> on 2007/07/02 03:42:09 UTC

WEB.XML file parsing

I am having trouble parsing a web.xml file using SAX.  The war file will
deploy with no hassles, however, I am writing a local program that will
allow me to change the web.xml file locally before distribution.

 

My problem is the DTD definition in the web.xml file.  I require the DTD
file definition, yet when I try and parse the file with the DTD definition,
I keep getting a connection timeout error.  When I remove the DTD
definition, the file is parsed with no issues.

 

How do I get around the timeout issue when parsing the web.xml file with the
DTD definition?

 

The DTD definition is:

 

<!DOCTYPE web-app

    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

 

Regards,

Andrew


Re: WEB.XML file parsing

Posted by Johnny Kewl <jo...@kewlstuff.co.za>.
This guy has reckons you can turn off DTD checking
http://www.isocra.com/blogs/index.php?/archives/5-Making-Xerces-ignore-a-DTD.html

Tools like Xerces and Xalan are very good, but pretty heavy.
If you google you will also find some very light weight sax parsers out 
there.
Most of them dont even check DTD, probably ok if all you doing is adding a 
few parameters.

----- Original Message ----- 
From: "Andrew Friebel" <an...@reynolds.com.au>
To: <us...@tomcat.apache.org>
Sent: Monday, July 02, 2007 3:42 AM
Subject: WEB.XML file parsing


>I am having trouble parsing a web.xml file using SAX.  The war file will
> deploy with no hassles, however, I am writing a local program that will
> allow me to change the web.xml file locally before distribution.
>
>
>
> My problem is the DTD definition in the web.xml file.  I require the DTD
> file definition, yet when I try and parse the file with the DTD 
> definition,
> I keep getting a connection timeout error.  When I remove the DTD
> definition, the file is parsed with no issues.
>
>
>
> How do I get around the timeout issue when parsing the web.xml file with 
> the
> DTD definition?
>
>
>
> The DTD definition is:
>
>
>
> <!DOCTYPE web-app
>
>    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
>
>    "http://java.sun.com/dtd/web-app_2_3.dtd">
>
>
>
> Regards,
>
> Andrew
>
> 


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


RE: WEB.XML file parsing

Posted by Andrew Friebel <an...@reynolds.com.au>.
Thankyou for your assistance.  That is a winner.  The only change that needs
to occur is the getResource() method does not use leading slashes.  So to
set the URL object, it should look like:

              URL resource =
this.getClass().getClassLoader().getResource("javax/servlet/resources/web-ap
p_2_3.dtd");

Thanks again for your assistance, it helped me greatly.

Regards,
Andrew


-----Original Message-----
From: Bill Barker [mailto:wbarker@wilshire.com] 
Sent: Tuesday, 3 July 2007 1:48 PM
To: users@tomcat.apache.org
Subject: Re: WEB.XML file parsing


"Andrew Friebel" <an...@reynolds.com.au> wrote in message 
news:005401c7bd08$25f72390$71e56ab0$@com.au...
>I apologise for my lack of information.  What you have given me has helped,
> however a new issue has arisen from it.
>
> I did turn off validation as per the other suggestion from my post.  This
> allowed me to parse the web.xml file, however, I still need to save the
> document declaration.  When you turn off validation, I was unable to 
> rebuild
> DTD reference.  Just a note for others who are watching this post.
>
> I am running Java 1.6.0, and I am writing a standalone application.  I 
> have
> inserted the code snippet as suggested into my SAX parser (using xerces):
>
>    public InputSource resolveEntity(String pubid, String sysid) throws
> IOException{
>
>        if("-//Sun Microsystems, Inc.//DTD Web Application
> 2.3//EN".equals(pubid)) {
>             InputStream is =
>
this.getClass().getClassLoader().getResourceAsStream("/javax/servlet/resourc
> es/web-app_2_3.dtd");
>             return new InputSource(is);

Looking at Tomcat's EntityResolver for parsing web.xml, it looks like this 
should probably be:
              URL resource = 
this.getClass().getClassLoader().getResource("/javax/servlet/resources/web-a
pp_2_3.dtd");
               return new InputSource(resource.toExternalForm());

>        }
>        return null;
>   }
>
> I had to add 'this.getClass().' in front of 'getClassLoader()' from your
> snippet.  If I didn't I would get a compilation error - 'Method
> getClassLoader() is undefined'
>
>
>
> My parser sets the entity resolver (note: the class WebXmlParser extends
> 'DefaultHandler'):
>
> public WebXmlParser(StringBuffer tmpIS)
> {
>
>
System.setProperty("org.xml.sax.driver","org.apache.xerces.parsers.SAXParser
> ");
>
> try {
>
>    // Create SAX 2 parser...
>    XMLReader xr = XMLReaderFactory.createXMLReader();
>
>    xr.setEntityResolver(this);
>    // Set the ContentHandler...
>    xr.setContentHandler( this );
>
>    try{
>    xr.parse(new InputSource(new
> StringReader(tmpIS.toString())));
>    }catch(Exception e){
>    e.printStackTrace();
>    strError = e.getMessage();
>    }
>
> }catch ( Exception e )
> {
> e.printStackTrace();
>    strError = e.getMessage();
> }
>
> }
>
> I now get the following stack trace:
>
>
> java.net.MalformedURLException
> at java.net.URL.<init>(Unknown Source)
> at java.net.URL.<init>(Unknown Source)
> at java.net.URL.<init>(Unknown Source)
> at
> org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
> at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown
> Source)
> at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown
> Source)
> at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown
> Source)
> at
>
org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown
> Source)
> at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
> Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
> at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
> at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
> at WebXmlParser.<init>(WebXmlParser.java:49)
> at UpdateOneSite.changeWebXml(UpdateOneSite.java:332)
> at UpdateOneSite.access$0(UpdateOneSite.java:309)
> at
> UpdateOneSite$ButtonListener.actionPerformed(UpdateOneSite.java:141)
> at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
> at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
> Source)
> at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
> Source)
> at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
> at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
> Source)
> at java.awt.Component.processMouseEvent(Unknown Source)
> at javax.swing.JComponent.processMouseEvent(Unknown Source)
> at java.awt.Component.processEvent(Unknown Source)
> at java.awt.Container.processEvent(Unknown Source)
> at java.awt.Component.dispatchEventImpl(Unknown Source)
> at java.awt.Container.dispatchEventImpl(Unknown Source)
> at java.awt.Component.dispatchEvent(Unknown Source)
> at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
> at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
> at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
> at java.awt.Container.dispatchEventImpl(Unknown Source)
> at java.awt.Window.dispatchEventImpl(Unknown Source)
> at java.awt.Component.dispatchEvent(Unknown Source)
> at java.awt.EventQueue.dispatchEvent(Unknown Source)
> at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
> Source)
> at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
> Source)
> at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.awt.EventDispatchThread.run(Unknown Source)
> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
> at UpdateOneSite.changeWebXml(UpdateOneSite.java:334)
> at UpdateOneSite.access$0(UpdateOneSite.java:309)
> at
> UpdateOneSite$ButtonListener.actionPerformed(UpdateOneSite.java:141)
> at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
> at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
> Source)
> at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
> Source)
> at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
> at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
> Source)
> at java.awt.Component.processMouseEvent(Unknown Source)
> at javax.swing.JComponent.processMouseEvent(Unknown Source)
> at java.awt.Component.processEvent(Unknown Source)
> at java.awt.Container.processEvent(Unknown Source)
> at java.awt.Component.dispatchEventImpl(Unknown Source)
> at java.awt.Container.dispatchEventImpl(Unknown Source)
> at java.awt.Component.dispatchEvent(Unknown Source)
> at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
> at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
> at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
> at java.awt.Container.dispatchEventImpl(Unknown Source)
> at java.awt.Window.dispatchEventImpl(Unknown Source)
> at java.awt.Component.dispatchEvent(Unknown Source)
> at java.awt.EventQueue.dispatchEvent(Unknown Source)
> at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
> Source)
> at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
> Source)
> at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.awt.EventDispatchThread.run(Unknown Source)
>
>
>
> I tried using the 'sysid' from the method to get the 'InputStream', but 
> this
> didn't work either.  I am presuming it is the 'InputStream' assignment 
> that
> is throwing the error, but I am not 100% sure.
>
> Has anyone got any ideas on how to get around this?
>
> Regards,
> Andrew
>
> -----Original Message-----
> From: Bill Barker [mailto:wbarker@wilshire.com]
> Sent: Monday, 2 July 2007 12:28 PM
> To: users@tomcat.apache.org
> Subject: Re: WEB.XML file parsing
>
>
> "Andrew Friebel" <an...@reynolds.com.au> wrote in message
> news:007d01c7bc4a$34a83870$9df8a950$@com.au...
>>I am having trouble parsing a web.xml file using SAX.  The war file will
>> deploy with no hassles, however, I am writing a local program that will
>> allow me to change the web.xml file locally before distribution.
>>
>>
>>
>> My problem is the DTD definition in the web.xml file.  I require the DTD
>> file definition, yet when I try and parse the file with the DTD
>> definition,
>> I keep getting a connection timeout error.  When I remove the DTD
>> definition, the file is parsed with no issues.
>>
>>
>
> You are a bit sparse on details for how you are doing this and versions, 
> but
>
> assuming that you are using SAX, you need to set and EntityResolver that
> does something like (for 5.5):
>
>    public ImputSource resolveEntity(String pubid, String sysid) throws
> IOException{
>         if("-//Sun Microsystems, Inc.//DTD Web Application
> 2.3//EN".equals(pubid)) {
>              InputStream is =
>
getClassloader().getResourceAsStream("/javax/servlet/resources/web-app_2_3.d
> td");
>              return new InputSource(is);
>         }
>         return null;
>    }
>
>
>
>>
>> How do I get around the timeout issue when parsing the web.xml file with
>> the
>> DTD definition?
>>
>>
>>
>> The DTD definition is:
>>
>>
>>
>> <!DOCTYPE web-app
>>
>>    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
>>
>>    "http://java.sun.com/dtd/web-app_2_3.dtd">
>>
>>
>>
>> Regards,
>>
>> Andrew
>>
>>
>
>
>
>
>
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
> 






---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: WEB.XML file parsing

Posted by Bill Barker <wb...@wilshire.com>.
"Andrew Friebel" <an...@reynolds.com.au> wrote in message 
news:005401c7bd08$25f72390$71e56ab0$@com.au...
>I apologise for my lack of information.  What you have given me has helped,
> however a new issue has arisen from it.
>
> I did turn off validation as per the other suggestion from my post.  This
> allowed me to parse the web.xml file, however, I still need to save the
> document declaration.  When you turn off validation, I was unable to 
> rebuild
> DTD reference.  Just a note for others who are watching this post.
>
> I am running Java 1.6.0, and I am writing a standalone application.  I 
> have
> inserted the code snippet as suggested into my SAX parser (using xerces):
>
>    public InputSource resolveEntity(String pubid, String sysid) throws
> IOException{
>
>        if("-//Sun Microsystems, Inc.//DTD Web Application
> 2.3//EN".equals(pubid)) {
>             InputStream is =
> this.getClass().getClassLoader().getResourceAsStream("/javax/servlet/resourc
> es/web-app_2_3.dtd");
>             return new InputSource(is);

Looking at Tomcat's EntityResolver for parsing web.xml, it looks like this 
should probably be:
              URL resource = 
this.getClass().getClassLoader().getResource("/javax/servlet/resources/web-app_2_3.dtd");
               return new InputSource(resource.toExternalForm());

>        }
>        return null;
>   }
>
> I had to add 'this.getClass().' in front of 'getClassLoader()' from your
> snippet.  If I didn't I would get a compilation error - 'Method
> getClassLoader() is undefined'
>
>
>
> My parser sets the entity resolver (note: the class WebXmlParser extends
> 'DefaultHandler'):
>
> public WebXmlParser(StringBuffer tmpIS)
> {
>
> System.setProperty("org.xml.sax.driver","org.apache.xerces.parsers.SAXParser
> ");
>
> try {
>
>    // Create SAX 2 parser...
>    XMLReader xr = XMLReaderFactory.createXMLReader();
>
>    xr.setEntityResolver(this);
>    // Set the ContentHandler...
>    xr.setContentHandler( this );
>
>    try{
>    xr.parse(new InputSource(new
> StringReader(tmpIS.toString())));
>    }catch(Exception e){
>    e.printStackTrace();
>    strError = e.getMessage();
>    }
>
> }catch ( Exception e )
> {
> e.printStackTrace();
>    strError = e.getMessage();
> }
>
> }
>
> I now get the following stack trace:
>
>
> java.net.MalformedURLException
> at java.net.URL.<init>(Unknown Source)
> at java.net.URL.<init>(Unknown Source)
> at java.net.URL.<init>(Unknown Source)
> at
> org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
> at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown
> Source)
> at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown
> Source)
> at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown
> Source)
> at
> org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown
> Source)
> at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
> Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
> at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
> at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
> at WebXmlParser.<init>(WebXmlParser.java:49)
> at UpdateOneSite.changeWebXml(UpdateOneSite.java:332)
> at UpdateOneSite.access$0(UpdateOneSite.java:309)
> at
> UpdateOneSite$ButtonListener.actionPerformed(UpdateOneSite.java:141)
> at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
> at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
> Source)
> at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
> Source)
> at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
> at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
> Source)
> at java.awt.Component.processMouseEvent(Unknown Source)
> at javax.swing.JComponent.processMouseEvent(Unknown Source)
> at java.awt.Component.processEvent(Unknown Source)
> at java.awt.Container.processEvent(Unknown Source)
> at java.awt.Component.dispatchEventImpl(Unknown Source)
> at java.awt.Container.dispatchEventImpl(Unknown Source)
> at java.awt.Component.dispatchEvent(Unknown Source)
> at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
> at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
> at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
> at java.awt.Container.dispatchEventImpl(Unknown Source)
> at java.awt.Window.dispatchEventImpl(Unknown Source)
> at java.awt.Component.dispatchEvent(Unknown Source)
> at java.awt.EventQueue.dispatchEvent(Unknown Source)
> at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
> Source)
> at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
> Source)
> at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.awt.EventDispatchThread.run(Unknown Source)
> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
> at UpdateOneSite.changeWebXml(UpdateOneSite.java:334)
> at UpdateOneSite.access$0(UpdateOneSite.java:309)
> at
> UpdateOneSite$ButtonListener.actionPerformed(UpdateOneSite.java:141)
> at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
> at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
> Source)
> at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
> Source)
> at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
> at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
> Source)
> at java.awt.Component.processMouseEvent(Unknown Source)
> at javax.swing.JComponent.processMouseEvent(Unknown Source)
> at java.awt.Component.processEvent(Unknown Source)
> at java.awt.Container.processEvent(Unknown Source)
> at java.awt.Component.dispatchEventImpl(Unknown Source)
> at java.awt.Container.dispatchEventImpl(Unknown Source)
> at java.awt.Component.dispatchEvent(Unknown Source)
> at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
> at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
> at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
> at java.awt.Container.dispatchEventImpl(Unknown Source)
> at java.awt.Window.dispatchEventImpl(Unknown Source)
> at java.awt.Component.dispatchEvent(Unknown Source)
> at java.awt.EventQueue.dispatchEvent(Unknown Source)
> at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
> Source)
> at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
> Source)
> at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.awt.EventDispatchThread.run(Unknown Source)
>
>
>
> I tried using the 'sysid' from the method to get the 'InputStream', but 
> this
> didn't work either.  I am presuming it is the 'InputStream' assignment 
> that
> is throwing the error, but I am not 100% sure.
>
> Has anyone got any ideas on how to get around this?
>
> Regards,
> Andrew
>
> -----Original Message-----
> From: Bill Barker [mailto:wbarker@wilshire.com]
> Sent: Monday, 2 July 2007 12:28 PM
> To: users@tomcat.apache.org
> Subject: Re: WEB.XML file parsing
>
>
> "Andrew Friebel" <an...@reynolds.com.au> wrote in message
> news:007d01c7bc4a$34a83870$9df8a950$@com.au...
>>I am having trouble parsing a web.xml file using SAX.  The war file will
>> deploy with no hassles, however, I am writing a local program that will
>> allow me to change the web.xml file locally before distribution.
>>
>>
>>
>> My problem is the DTD definition in the web.xml file.  I require the DTD
>> file definition, yet when I try and parse the file with the DTD
>> definition,
>> I keep getting a connection timeout error.  When I remove the DTD
>> definition, the file is parsed with no issues.
>>
>>
>
> You are a bit sparse on details for how you are doing this and versions, 
> but
>
> assuming that you are using SAX, you need to set and EntityResolver that
> does something like (for 5.5):
>
>    public ImputSource resolveEntity(String pubid, String sysid) throws
> IOException{
>         if("-//Sun Microsystems, Inc.//DTD Web Application
> 2.3//EN".equals(pubid)) {
>              InputStream is =
> getClassloader().getResourceAsStream("/javax/servlet/resources/web-app_2_3.d
> td");
>              return new InputSource(is);
>         }
>         return null;
>    }
>
>
>
>>
>> How do I get around the timeout issue when parsing the web.xml file with
>> the
>> DTD definition?
>>
>>
>>
>> The DTD definition is:
>>
>>
>>
>> <!DOCTYPE web-app
>>
>>    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
>>
>>    "http://java.sun.com/dtd/web-app_2_3.dtd">
>>
>>
>>
>> Regards,
>>
>> Andrew
>>
>>
>
>
>
>
>
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
> 




---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


RE: WEB.XML file parsing

Posted by Andrew Friebel <an...@reynolds.com.au>.
I apologise for my lack of information.  What you have given me has helped,
however a new issue has arisen from it.

I did turn off validation as per the other suggestion from my post.  This
allowed me to parse the web.xml file, however, I still need to save the
document declaration.  When you turn off validation, I was unable to rebuild
DTD reference.  Just a note for others who are watching this post.

I am running Java 1.6.0, and I am writing a standalone application.  I have
inserted the code snippet as suggested into my SAX parser (using xerces):

    public InputSource resolveEntity(String pubid, String sysid) throws
IOException{
    	
        if("-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN".equals(pubid)) {
             InputStream is =
this.getClass().getClassLoader().getResourceAsStream("/javax/servlet/resourc
es/web-app_2_3.dtd");
             return new InputSource(is);
        }
        return null;
   }

I had to add 'this.getClass().' in front of 'getClassLoader()' from your
snippet.  If I didn't I would get a compilation error - 'Method
getClassLoader() is undefined'



My parser sets the entity resolver (note: the class WebXmlParser extends
'DefaultHandler'):

	public WebXmlParser(StringBuffer tmpIS)
	{
	
System.setProperty("org.xml.sax.driver","org.apache.xerces.parsers.SAXParser
");
		
		try {

		   // Create SAX 2 parser...
		   XMLReader xr = XMLReaderFactory.createXMLReader();
		   
		   xr.setEntityResolver(this);
		   // Set the ContentHandler...
		   xr.setContentHandler( this );
		   		      
		   try{
			   xr.parse(new InputSource(new
StringReader(tmpIS.toString())));
		   }catch(Exception e){
			   e.printStackTrace();
			   strError = e.getMessage();
		   }
	   
		}catch ( Exception e )
		{
			e.printStackTrace();
		   strError = e.getMessage();
		}
		  
	}

I now get the following stack trace:


java.net.MalformedURLException
	at java.net.URL.<init>(Unknown Source)
	at java.net.URL.<init>(Unknown Source)
	at java.net.URL.<init>(Unknown Source)
	at
org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
	at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown
Source)
	at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown
Source)
	at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown
Source)
	at
org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown
Source)
	at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
Source)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at WebXmlParser.<init>(WebXmlParser.java:49)
	at UpdateOneSite.changeWebXml(UpdateOneSite.java:332)
	at UpdateOneSite.access$0(UpdateOneSite.java:309)
	at
UpdateOneSite$ButtonListener.actionPerformed(UpdateOneSite.java:141)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at UpdateOneSite.changeWebXml(UpdateOneSite.java:334)
	at UpdateOneSite.access$0(UpdateOneSite.java:309)
	at
UpdateOneSite$ButtonListener.actionPerformed(UpdateOneSite.java:141)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)



I tried using the 'sysid' from the method to get the 'InputStream', but this
didn't work either.  I am presuming it is the 'InputStream' assignment that
is throwing the error, but I am not 100% sure.

Has anyone got any ideas on how to get around this?

Regards,
Andrew

-----Original Message-----
From: Bill Barker [mailto:wbarker@wilshire.com] 
Sent: Monday, 2 July 2007 12:28 PM
To: users@tomcat.apache.org
Subject: Re: WEB.XML file parsing


"Andrew Friebel" <an...@reynolds.com.au> wrote in message 
news:007d01c7bc4a$34a83870$9df8a950$@com.au...
>I am having trouble parsing a web.xml file using SAX.  The war file will
> deploy with no hassles, however, I am writing a local program that will
> allow me to change the web.xml file locally before distribution.
>
>
>
> My problem is the DTD definition in the web.xml file.  I require the DTD
> file definition, yet when I try and parse the file with the DTD 
> definition,
> I keep getting a connection timeout error.  When I remove the DTD
> definition, the file is parsed with no issues.
>
>

You are a bit sparse on details for how you are doing this and versions, but

assuming that you are using SAX, you need to set and EntityResolver that 
does something like (for 5.5):

    public ImputSource resolveEntity(String pubid, String sysid) throws 
IOException{
         if("-//Sun Microsystems, Inc.//DTD Web Application 
2.3//EN".equals(pubid)) {
              InputStream is = 
getClassloader().getResourceAsStream("/javax/servlet/resources/web-app_2_3.d
td");
              return new InputSource(is);
         }
         return null;
    }



>
> How do I get around the timeout issue when parsing the web.xml file with 
> the
> DTD definition?
>
>
>
> The DTD definition is:
>
>
>
> <!DOCTYPE web-app
>
>    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
>
>    "http://java.sun.com/dtd/web-app_2_3.dtd">
>
>
>
> Regards,
>
> Andrew
>
> 






---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: WEB.XML file parsing

Posted by Bill Barker <wb...@wilshire.com>.
"Andrew Friebel" <an...@reynolds.com.au> wrote in message 
news:007d01c7bc4a$34a83870$9df8a950$@com.au...
>I am having trouble parsing a web.xml file using SAX.  The war file will
> deploy with no hassles, however, I am writing a local program that will
> allow me to change the web.xml file locally before distribution.
>
>
>
> My problem is the DTD definition in the web.xml file.  I require the DTD
> file definition, yet when I try and parse the file with the DTD 
> definition,
> I keep getting a connection timeout error.  When I remove the DTD
> definition, the file is parsed with no issues.
>
>

You are a bit sparse on details for how you are doing this and versions, but 
assuming that you are using SAX, you need to set and EntityResolver that 
does something like (for 5.5):

    public ImputSource resolveEntity(String pubid, String sysid) throws 
IOException{
         if("-//Sun Microsystems, Inc.//DTD Web Application 
2.3//EN".equals(pubid)) {
              InputStream is = 
getClassloader().getResourceAsStream("/javax/servlet/resources/web-app_2_3.dtd");
              return new InputSource(is);
         }
         return null;
    }



>
> How do I get around the timeout issue when parsing the web.xml file with 
> the
> DTD definition?
>
>
>
> The DTD definition is:
>
>
>
> <!DOCTYPE web-app
>
>    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
>
>    "http://java.sun.com/dtd/web-app_2_3.dtd">
>
>
>
> Regards,
>
> Andrew
>
> 




---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org