tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew Friebel" <andr...@reynolds.com.au>
Subject RE: WEB.XML file parsing
Date Tue, 03 Jul 2007 00:21:47 GMT
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" <andrewf@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


Mime
View raw message