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
This commit is contained in:
Chris Burdess
2007-02-07 18:22:26 +00:00
committed by Tom Tromey
parent 74372bdfc6
commit 08452f4553
24 changed files with 155 additions and 29 deletions
@@ -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);
}
}