4 * License : The MIT License
5 * Copyright(c) 2013 MikuToga Partners
8 package jp.sfjp.mikutoga.pmd2xml;
10 import javax.xml.parsers.ParserConfigurationException;
11 import javax.xml.parsers.SAXParser;
12 import javax.xml.parsers.SAXParserFactory;
13 import javax.xml.validation.Schema;
14 import jp.sfjp.mikutoga.pmd.model.xml.Schema101009;
15 import jp.sfjp.mikutoga.pmd.model.xml.Schema130128;
16 import jp.sfjp.mikutoga.xml.BotherHandler;
17 import jp.sfjp.mikutoga.xml.LocalXmlResource;
18 import jp.sfjp.mikutoga.xml.SchemaUtil;
19 import jp.sfjp.mikutoga.xml.XmlResourceResolver;
20 import org.xml.sax.SAXException;
21 import org.xml.sax.XMLReader;
26 final class XmlInputUtil {
31 private XmlInputUtil(){
33 throw new AssertionError();
40 * <li>XML名前空間機能は有効になる。
41 * <li>DTDによる形式検証は無効となる。
42 * <li>XIncludeによる差し込み機能は無効となる。
47 private static SAXParserFactory buildFactory(Schema schema){
48 SAXParserFactory factory = SAXParserFactory.newInstance();
50 factory.setNamespaceAware(true);
51 factory.setValidating(false);
52 factory.setXIncludeAware(false);
53 // factory.setFeature(name, value);
55 factory.setSchema(schema);
65 private static SAXParser buildParser(Schema schema){
66 SAXParserFactory factory = buildFactory(schema);
70 parser = factory.newSAXParser();
71 }catch(ParserConfigurationException e){
73 throw new AssertionError(e);
74 }catch(SAXException e){
76 throw new AssertionError(e);
79 // parser.setProperty(name, value);
86 * @param resolver リゾルバ
87 * @param xmlInType 入力XML種別
90 private static Schema builsSchema(XmlResourceResolver resolver,
91 ModelFileType xmlInType ){
92 LocalXmlResource[] schemaArray;
95 schemaArray = new LocalXmlResource[]{
96 Schema101009.SINGLETON,
100 schemaArray = new LocalXmlResource[]{
101 Schema130128.SINGLETON,
105 schemaArray = new LocalXmlResource[]{
106 Schema101009.SINGLETON,
107 Schema130128.SINGLETON,
111 throw new IllegalStateException();
114 Schema schema = SchemaUtil.newSchema(resolver, schemaArray);
121 * <p>エラーハンドラには{@link BotherHandler}が指定される。
122 * @param xmlInType 入力XML種別
125 static XMLReader buildReader(ModelFileType xmlInType){
126 XmlResourceResolver resolver = new XmlResourceResolver();
128 Schema schema = builsSchema(resolver, xmlInType);
130 SAXParser parser = buildParser(schema);
134 reader = parser.getXMLReader();
135 }catch(SAXException e){
137 throw new AssertionError(e);
140 reader.setEntityResolver(resolver);
141 reader.setErrorHandler(BotherHandler.HANDLER);