summaryrefslogtreecommitdiffstats
path: root/libjava/classpath/gnu/xml/transform
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2007-02-07 18:22:26 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2007-02-07 18:22:26 +0000
commit7ff59ae90b930096347695fb5ed51d87663749da (patch)
tree6dc3be85930294202aea5c41b9800414ba213f20 /libjava/classpath/gnu/xml/transform
parente911c3bee65890c840bbfa91c0c64b7de448ad99 (diff)
downloadppe42-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.java42
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);
+ }
}
OpenPOWER on IntegriCloud