diff -r 471c0cda94c3 -r b890783e4043 java/alt2xml-bin/src/cz/frantovo/alt2xml/SAXTovarna.java --- a/java/alt2xml-bin/src/cz/frantovo/alt2xml/SAXTovarna.java Thu Jun 05 23:45:24 2014 +0200 +++ b/java/alt2xml-bin/src/cz/frantovo/alt2xml/SAXTovarna.java Sat Jun 07 10:38:31 2014 +0200 @@ -18,6 +18,9 @@ package cz.frantovo.alt2xml; import cz.frantovo.alt2xml.vstup.SuperReader; +import java.util.Deque; +import java.util.LinkedList; +import java.util.ServiceLoader; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; @@ -31,11 +34,31 @@ * * @author fiki */ -public class SAXTovarna extends SAXParserFactory { +public class SAXTovarna extends SAXParserFactory implements ReaderFinder { + + private final Deque readerFactories = new LinkedList(); + + public SAXTovarna() { + super(); + for (Alt2XmlReaderFactory f : ServiceLoader.load(Alt2XmlReaderFactory.class)) { + readerFactories.add(f); + } + + } + + @Override + public XMLReader findReader(String systemId) throws SAXException { + for (Alt2XmlReaderFactory f : readerFactories) { + if (f.canRead(systemId)) { + return f.getReader(); + } + } + throw new SAXException("Iterated over " + readerFactories.size() + " and was unable to find XMLReader for SystemId: " + systemId); + } @Override public SAXParser newSAXParser() throws ParserConfigurationException, SAXException { - return new AltSAXParser(new SuperReader()); + return new AltSAXParser(new SuperReader(this)); } @Override @@ -87,4 +110,4 @@ return xmlReader.getProperty(name); } } -} \ No newline at end of file +}