diff -r 944a81a54bb9 -r fadfde5b3e55 java/alt2xml-cli/src/cz/frantovo/alt2xml/cli/CLIStarter.java --- a/java/alt2xml-cli/src/cz/frantovo/alt2xml/cli/CLIStarter.java Wed Sep 17 19:13:47 2014 +0200 +++ b/java/alt2xml-cli/src/cz/frantovo/alt2xml/cli/CLIStarter.java Wed Sep 17 21:00:32 2014 +0200 @@ -23,6 +23,8 @@ import cz.frantovo.alt2xml.out.OutputActionException; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; import java.util.ServiceLoader; import java.util.logging.Level; import java.util.logging.LogRecord; @@ -31,6 +33,8 @@ import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; /** * @@ -58,7 +62,7 @@ try { CLIParser cliParser = new CLIParser(); CLIOptions cliOptions = cliParser.parseOptions(args); - + cliOptions.validate(); Map actionFactories = new HashMap<>(); @@ -79,14 +83,17 @@ } else { ActionContext actionContext = new ActionContext(cliOptions.getOutputStream()); - + actionContext.setActionProperties(cliOptions.getActionProperties()); actionContext.setActionData(cliOptions.getActionData()); - + Action action = actionFactory.getAction(actionContext); SAXParserFactory t = SAXParserFactory.newInstance(); + parametrizeParserFactory(t, cliOptions.getReaderFeatures()); + SAXParser p = t.newSAXParser(); + paramtrizeParser(p, cliOptions.getReaderProperties()); action.run(p, cliOptions.getInputSource()); } @@ -115,4 +122,16 @@ System.exit(exitCode); } + + private static void parametrizeParserFactory(SAXParserFactory factory, Map features) throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException { + for (Entry feature : features.entrySet()) { + factory.setFeature(feature.getKey(), feature.getValue()); + } + } + + private static void paramtrizeParser(SAXParser parser, Properties readerProperties) throws SAXNotRecognizedException, SAXNotSupportedException { + for (String name : readerProperties.stringPropertyNames()) { + parser.setProperty(name, readerProperties.getProperty(name)); + } + } }