Thanks.

As you can see from my example, I am using JAXP API.  Setting the parer feature 
using the way you desribed doesn't seem to affect the DocumentBuilder.parse() 
method.  From the DOMParser, how do I get a 'Document' that my other part of 
code use?

-----Original Message-----
From: Jeffrey Rodriguez [mailto:[EMAIL PROTECTED]
Sent: September 10, 2003 1:38 PM
To: [EMAIL PROTECTED]
Subject: Re: DOM parser problem with handling Windows UNC path for XML
and DTD file


Janlin,

Most answers to your question are in the FAQ and documentation.

You need to set a parser property to being able to parse UNC.

set the following property to false.

http://apache.org/xml/features/standard-uri-conformant


The DocumentBuilderFactory interface contains a setAttribute(String,Object) 
method which may provide a means to set features and properties on the 
underyling parser. However, it cannot be relied upon. Therefore, you must 
use the Xerces DOMParser object directly. For example:


import org.apache.xerces.parsers.DOMParser;
import org.xml.sax.SAXException;

DOMParser parser = new DOMParser();

try {
    
parser.setFeature(http://apache.org/xml/features/standard-uri-conformant,
                      false);


}
catch (SAXException e) {
    System.err.println("could not set parser feature");
}

>
>It looks that there are problems with handling Windows UNC path (a path in 
>the format of \\computer\share\filename).  I would like to seek help on how 
>to solve the problem.
>

Set the feature to false to process non conformant URI.


>For the DocumentBuilder.parse() method, if a UNC path name is specified as 
>the parameter, it will fail will error 'java.net.MalformedURLException: no 
>protocol'.

Of course because it is not standard.

>I tried two approaches.  1. set validating to false, but it looks that it 
>still try to find the DTD file.  2. Using EntityResolver to resolve the DTD 
>file, but it looks that the EntityResolver is never called (the print 
>statement doesn't print anything).  Why is this not called?
>

+ No setting validation to false won't work, because the parser needs to get 
the DTD even
when it does not validate to resolve entities.

+Entity Resolver gets called after finding non standard URI, by then you 
already have a
MalformedURL Exception.

Try what I said at beggining of note of setting parser feature.


Another possibility is to write a method that converts your non-conformant 
URI into a conformant one.
Notice that in your program the MalformedURL exception if probably thrown by 
Java when you
pass the path to URI class.


Regards,

Jeffrey Rodriguez
Silicon Valley



>From: "Jianlin Chang" <[EMAIL PROTECTED]>
>Reply-To: [EMAIL PROTECTED]
>To: <[email protected]>, <[EMAIL PROTECTED]>
>Subject: DOM parser problem with handling Windows UNC path for XML and DTD 
>file
>Date: Wed, 10 Sep 2003 12:31:36 -0400
>
>It looks that there are problems with handling Windows UNC path (a path in 
>the format of \\computer\share\filename).  I would like to seek help on how 
>to solve the problem.
>
>For the DocumentBuilder.parse() method, if a UNC path name is specified as 
>the parameter, it will fail will error 'java.net.MalformedURLException: no 
>protocol'.
>I have to use 'DocumentBuilder.parse(new File(uncPath))'.  Then it got 
>problems with find DTD file that the XML file uses:
><!DOCTYPE Users SYSTEM "Users.dtd">
>The error is:
>'Connection refused: connect'.  From the stack trace, it looks that it trys 
>to find the DTD file using FTP.
>
>I tried two approaches.  1. set validating to false, but it looks that it 
>still try to find the DTD file.  2. Using EntityResolver to resolve the DTD 
>file, but it looks that the EntityResolver is never called (the print 
>statement doesn't print anything).  Why is this not called?
>
>How can I solve the problem?
>
>The sample code is enclosed.
>
>xerces-j version I used is 2.0.2.
>
>Thanks.
>
>
>import javax.xml.parsers.*;
>import org.w3c.dom.*;
>import org.xml.sax.*;
>import org.apache.xml.serialize.OutputFormat;
>import org.apache.xml.serialize.Serializer;
>import org.apache.xml.serialize.SerializerFactory;
>import org.apache.xml.serialize.XMLSerializer;
>
>public class TestDOM {
>     static public void main(String args[])
>     {
>       try {
>           DocumentBuilderFactory docBuilderFactory = 
>DocumentBuilderFactory.newInstance();
>           docBuilderFactory.setValidating(false);
>           DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
>           docBuilder.setEntityResolver(new MyEntityResolver());
>//         Document m_domDocument = docBuilder.parse(args[0]);
>           Document m_domDocument = docBuilder.parse(new 
> java.io.File(args[0]));
>       } catch (ParserConfigurationException exn) {
>           System.err.println("Got ParserConfigurationException: " + 
>exn.getMessage());
>       } catch (SAXException exn) {
>           System.err.println("Got SAXException: " + exn.getMessage());
>       } catch (java.io.IOException exn) {
>           System.err.println("Got IOException: " + exn.getMessage());
>           exn.printStackTrace();
>       }
>     }
>}
>
>class MyEntityResolver implements EntityResolver {
>    public InputSource resolveEntity(String publicId, String systemId)
>        throws SAXException, java.io.IOException
>    {
>        System.out.println("MyEntityResolver: " + systemId);
>        java.io.FileInputStream fs = new java.io.FileInputStream(systemId);
>        return new InputSource(fs);
>    }
>}
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>

_________________________________________________________________
Need more e-mail storage? Get 10MB with Hotmail Extra Storage.   
http://join.msn.com/?PAGE=features/es


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to