diff options
Diffstat (limited to 'libjava/classpath/gnu/xml')
| -rw-r--r-- | libjava/classpath/gnu/xml/dom/DomDocumentBuilder.java | 55 | ||||
| -rw-r--r-- | libjava/classpath/gnu/xml/dom/ls/DomLSParser.java | 11 | ||||
| -rw-r--r-- | libjava/classpath/gnu/xml/pipeline/DomConsumer.java | 2 | ||||
| -rw-r--r-- | libjava/classpath/gnu/xml/stream/SAXParser.java | 4 | ||||
| -rw-r--r-- | libjava/classpath/gnu/xml/stream/XMLParser.java | 18 | ||||
| -rw-r--r-- | libjava/classpath/gnu/xml/util/XCat.java | 2 |
6 files changed, 82 insertions, 10 deletions
diff --git a/libjava/classpath/gnu/xml/dom/DomDocumentBuilder.java b/libjava/classpath/gnu/xml/dom/DomDocumentBuilder.java index 343f48c13fd..e62ce207639 100644 --- a/libjava/classpath/gnu/xml/dom/DomDocumentBuilder.java +++ b/libjava/classpath/gnu/xml/dom/DomDocumentBuilder.java @@ -1,5 +1,5 @@ /* DomDocumentBuilder.java -- - Copyright (C) 2004,2006 Free Software Foundation, Inc. + Copyright (C) 2004,2006,2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -48,6 +48,7 @@ import org.w3c.dom.Document; import org.w3c.dom.DOMConfiguration; import org.w3c.dom.DOMImplementation; import org.w3c.dom.ls.DOMImplementationLS; +import org.w3c.dom.ls.LSException; import org.w3c.dom.ls.LSInput; import org.w3c.dom.ls.LSParser; import org.xml.sax.EntityResolver; @@ -122,7 +123,18 @@ class DomDocumentBuilder { LSInput input = ls.createLSInput(); input.setByteStream(in); - return parser.parse(input); + try + { + return parser.parse(input); + } + catch (LSException e) + { + Throwable e2 = e.getCause(); + if (e2 instanceof IOException) + throw (IOException) e2; + else + throw e; + } } public Document parse(InputStream in, String systemId) @@ -131,13 +143,35 @@ class DomDocumentBuilder LSInput input = ls.createLSInput(); input.setByteStream(in); input.setSystemId(systemId); - return parser.parse(input); + try + { + return parser.parse(input); + } + catch (LSException e) + { + Throwable e2 = e.getCause(); + if (e2 instanceof IOException) + throw (IOException) e2; + else + throw e; + } } public Document parse(String systemId) throws SAXException, IOException { - return parser.parseURI(systemId); + try + { + return parser.parseURI(systemId); + } + catch (LSException e) + { + Throwable e2 = e.getCause(); + if (e2 instanceof IOException) + throw (IOException) e2; + else + throw e; + } } public Document parse(InputSource is) @@ -176,7 +210,18 @@ class DomDocumentBuilder input.setPublicId(is.getPublicId()); input.setSystemId(systemId); input.setEncoding(is.getEncoding()); - return parser.parse(input); + try + { + return parser.parse(input); + } + catch (LSException e) + { + Throwable e2 = e.getCause(); + if (e2 instanceof IOException) + throw (IOException) e2; + else + throw e; + } } } diff --git a/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java b/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java index 6bc069d3201..88f9bae23fe 100644 --- a/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java +++ b/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java @@ -1,5 +1,5 @@ /* DomLSParser.java -- - Copyright (C) 1999,2000,2001 Free Software Foundation, Inc. + Copyright (C) 1999,2000,2001,2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -277,6 +277,15 @@ public class DomLSParser validating); try { + reader.setFeature("http://gnu.org/sax/features/coalescing", + coalescing); + } + catch (SAXNotRecognizedException e) + { + // ignore + } + try + { reader.setFeature("http://xml.org/sax/features/use-attributes2", true); } diff --git a/libjava/classpath/gnu/xml/pipeline/DomConsumer.java b/libjava/classpath/gnu/xml/pipeline/DomConsumer.java index bdbf9281880..da527b96587 100644 --- a/libjava/classpath/gnu/xml/pipeline/DomConsumer.java +++ b/libjava/classpath/gnu/xml/pipeline/DomConsumer.java @@ -365,7 +365,7 @@ public class DomConsumer implements EventConsumer throws SAXException { SAXParseException e; - ErrorHandler errHandler = consumer.getErrorHandler ();; + ErrorHandler errHandler = consumer.getErrorHandler (); if (locator == null) e = new SAXParseException (message, null, null, -1, -1, x); diff --git a/libjava/classpath/gnu/xml/stream/SAXParser.java b/libjava/classpath/gnu/xml/stream/SAXParser.java index 1329ab2971c..af4a6af4217 100644 --- a/libjava/classpath/gnu/xml/stream/SAXParser.java +++ b/libjava/classpath/gnu/xml/stream/SAXParser.java @@ -1,5 +1,5 @@ /* SAXParser.java -- - Copyright (C) 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -187,6 +187,8 @@ public class SAXParser lexicalHandler = (LexicalHandler) value; else if ((GNU_FEATURES + "xml-base").equals(name)) baseAware = Boolean.TRUE.equals(value); + else if ((GNU_FEATURES + "coalescing").equals(name)) + coalescing = Boolean.TRUE.equals(value); else throw new SAXNotSupportedException(name); } diff --git a/libjava/classpath/gnu/xml/stream/XMLParser.java b/libjava/classpath/gnu/xml/stream/XMLParser.java index 663a300f88c..fae4afec808 100644 --- a/libjava/classpath/gnu/xml/stream/XMLParser.java +++ b/libjava/classpath/gnu/xml/stream/XMLParser.java @@ -439,6 +439,7 @@ public class XMLParser throw e2; } } + systemId = canonicalize(systemId); pushInput(new Input(in, null, null, systemId, null, null, false, true)); } @@ -513,6 +514,7 @@ public class XMLParser throw e2; } } + systemId = canonicalize(systemId); pushInput(new Input(null, reader, null, systemId, null, null, false, true)); } @@ -1540,7 +1542,7 @@ public class XMLParser { if (!externalEntities) return; - String url = absolutize(input.systemId, ids.systemId); + String url = canonicalize(absolutize(input.systemId, ids.systemId)); // Check for recursion for (Iterator i = inputStack.iterator(); i.hasNext(); ) { @@ -1587,6 +1589,20 @@ public class XMLParser } /** + * Returns a canonicalized version of the specified URL. + * This is largely to work around a problem with the specification of + * file URLs. + */ + static String canonicalize(String url) + { + if (url == null) + return null; + if (url.startsWith("file:") && !url.startsWith("file://")) + url = "file://" + url.substring(5); + return url; + } + + /** * "Absolutize" a URL. This resolves a relative URL into an absolute one. * @param base the current base URL * @param href the (absolute or relative) URL to resolve diff --git a/libjava/classpath/gnu/xml/util/XCat.java b/libjava/classpath/gnu/xml/util/XCat.java index 0f163387081..f3704cd25c7 100644 --- a/libjava/classpath/gnu/xml/util/XCat.java +++ b/libjava/classpath/gnu/xml/util/XCat.java @@ -274,7 +274,7 @@ public class XCat implements EntityResolver2 InputSource retval; retval = catalogs [i].resolve (usingPublic, publicId, systemId); if (retval != null) - return retval;; + return retval; } } catch (DoneDelegation x) { // done! |

