diff options
| author | Chris Burdess <dog@gnu.org> | 2007-02-07 18:22:26 +0000 |
|---|---|---|
| committer | Tom Tromey <tromey@gcc.gnu.org> | 2007-02-07 18:22:26 +0000 |
| commit | 08452f45531ca2ec479e61b9f7e37d3fadd95a7b (patch) | |
| tree | 6dc3be85930294202aea5c41b9800414ba213f20 /libjava/classpath/gnu/xml/transform | |
| parent | 74372bdfc63ac2ba2eaf540f0993b457dca69144 (diff) | |
| download | gcc-08452f45531ca2ec479e61b9f7e37d3fadd95a7b.zip gcc-08452f45531ca2ec479e61b9f7e37d3fadd95a7b.tar.gz gcc-08452f45531ca2ec479e61b9f7e37d3fadd95a7b.tar.bz2 | |
re PR classpath/30718 (TransformerException in XSLURIResolver)
2007-02-07 Chris Burdess <dog@gnu.org>
Fixes PR 30718.
* gnu/xml/dom/ls/SAXEventSink.java: Add public accessor/mutators.
* gnu/xml/transform/XSLURIResolver.java: Add support for custom
SAXSources without a backing URL or stream.
Fixes PR 27710.
* gnu/xml/dom/DomDocumentBuilderFactory.java: Fall back to synchronous
LSParser if implementation does not support asynchronous.
* gnu/xml/stream/XMLParser.java,
gnu/xml/stream/XIncludeFilter.java: Use custom code instead of
java.net.URL to resolve to an an absolute URI, to avoid nonexistent
protocol handler problems.
From-SVN: r121694
Diffstat (limited to 'libjava/classpath/gnu/xml/transform')
| -rw-r--r-- | libjava/classpath/gnu/xml/transform/XSLURIResolver.java | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/libjava/classpath/gnu/xml/transform/XSLURIResolver.java b/libjava/classpath/gnu/xml/transform/XSLURIResolver.java index 8d7e3fc..8bb8977 100644 --- a/libjava/classpath/gnu/xml/transform/XSLURIResolver.java +++ b/libjava/classpath/gnu/xml/transform/XSLURIResolver.java @@ -55,9 +55,13 @@ import javax.xml.transform.URIResolver; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.stream.StreamSource; +import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import gnu.xml.dom.DomDocument; +import gnu.xml.dom.ls.SAXEventSink; import gnu.xml.dom.ls.ReaderInputStream; /** @@ -137,17 +141,14 @@ class XSLURIResolver else if (source != null && source instanceof SAXSource) { SAXSource ss = (SAXSource) source; - if (ss.getInputSource() != null) + InputSource input = ss.getInputSource(); + if (input != null) { - in = ss.getInputSource().getByteStream(); - if (in == null) - { - Reader reader = ss.getInputSource().getCharacterStream(); - if (reader != null) - { - in = new ReaderInputStream(reader); - } - } + if (systemId == null) + systemId = input.getSystemId(); + XMLReader reader = ss.getXMLReader(); + if (reader != null) + return parse(input, reader); } } if (in == null) @@ -294,6 +295,27 @@ class XSLURIResolver throw new TransformerException(e); } } + + DOMSource parse(InputSource source, XMLReader reader) + throws SAXException, IOException + { + SAXEventSink eventSink = new SAXEventSink(); + eventSink.setReader(reader); + reader.setContentHandler(eventSink); + reader.setDTDHandler(eventSink); + reader.setProperty("http://xml.org/sax/properties/lexical-handler", + eventSink); + reader.setProperty("http://xml.org/sax/properties/declaration-handler", + eventSink); + // XXX entityResolver + // XXX errorHandler + reader.parse(source); + Document doc = eventSink.getDocument(); + String systemId = source.getSystemId(); + if (systemId != null && doc instanceof DomDocument) + ((DomDocument) doc).setDocumentURI(systemId); + return new DOMSource(doc, systemId); + } } |
