diff options
| author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-07 18:22:26 +0000 |
|---|---|---|
| committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-07 18:22:26 +0000 |
| commit | 7ff59ae90b930096347695fb5ed51d87663749da (patch) | |
| tree | 6dc3be85930294202aea5c41b9800414ba213f20 /libjava/classpath/gnu/xml/transform | |
| parent | e911c3bee65890c840bbfa91c0c64b7de448ad99 (diff) | |
| download | ppe42-gcc-7ff59ae90b930096347695fb5ed51d87663749da.tar.gz ppe42-gcc-7ff59ae90b930096347695fb5ed51d87663749da.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121694 138bc75d-0d04-0410-961f-82ee72b054a4
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 8d7e3fcb485..8bb8977315e 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); + } } |

