Re: [Classpathx-xml] Unwanted SAXParseException

Ito Kazumitsu <[email protected]>
Newsgroups gmane.comp.java.vm.kaffe.general,gmane.comp.java.classpath.extensions.xml
Message-ID <[email protected]>
>>>>> ":" == David Brownell <[email protected]> writes:

:> Ito Kazumitsu wrote:
>> private static class MyResolver implements EntityResolver {
>> public InputSource resolveEntity (String publicId, String systemId) {
>> try {
>> return new InputSource((new URL(systemId)).openStream());

:> This is the bug right here ... you're creating an InputSource
:> without a System ID, which is why you get a later complaint
:> about an InputSource that's missing such an ID!

Yes, I knew about it and deliberately made such an incomplete
program.

The problem is that Sun's JAXP or Xerces does not throw
an exception about this.

:> It's unhealthy to have infrastructure guessing about such
:> things, since it doesn't really have the facts to guess right.
:> For example, the resolver is allowed to change the system ID
:> based on the public ID, in which case the (local) system ID
:> would clearly be wrong.

I think so, too.

As for the patch to gnu/xml/aelfred2/SAXDriver.java,  I think
it should be removed.

Then occurs another question.  Is it correct that 
gnu/xml/aelfred2/XmlParser.java does this in pushURL()?

            systemId = source.getSystemId ();
            if (systemId == null) {
                handler.warn ("missing system ID, using " + ids [1]);
                systemId = ids [1];
            }

Giving the warning of "missing system ID" should be postponed
until the system ID is really needed.

And here is my patch:

bash-2.05b$ diff -u gnu/xml/aelfred2/XmlParser.java.orig gnu/xml/aelfred2/XmlParser.java
--- gnu/xml/aelfred2/XmlParser.java.orig	Sun Sep 14 07:32:02 2003
+++ gnu/xml/aelfred2/XmlParser.java	Sun Oct 19 10:07:50 2003
@@ -3424,6 +3424,7 @@
     ) throws SAXException, IOException
     {
 	boolean		ignoreEncoding;
+	boolean		systemIdGuessed = false;
 	String		systemId;
 	InputSource	source;
 
@@ -3450,8 +3451,8 @@
 	    // we might be using alternate IDs/encoding
 	    systemId = source.getSystemId ();
 	    if (systemId == null) {
-		handler.warn ("missing system ID, using " + ids [1]);
 		systemId = ids [1];
+		systemIdGuessed = true;
 	    }
 	} else {
 	    // "[document]", or "[dtd]" via getExternalSubset()
@@ -3480,8 +3481,11 @@
 	    } catch (IOException e) {
 		stream = source.getByteStream ();
 	    }
-	} else if (systemId == null)
+	} else if (systemId == null) {
 	    error ("InputSource has no URI!");
+	} else if (systemIdGuessed) {
+	    handler.warn ("missing system ID, using " + systemId);
+	}
 	scratch.setCharacterStream (null);
 	scratch.setByteStream (null);
 	scratch.setEncoding (null);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.