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:
committed by
Tom Tromey
parent
74372bdfc6
commit
08452f4553
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user