X-Git-Url: http://git.osdn.net/view?p=mikutoga%2FPmd2XML.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fjp%2Fsfjp%2Fmikutoga%2Fpmd2xml%2FXmlInputUtil.java;h=d17c40616947b1ad53ebd4f56c9fc34b5b74dac7;hp=91d04067c38e7216a1bf486b240e1721cb2251af;hb=91f6ac21aa8fad94b3336ba9d79ee38d9c3836de;hpb=9b83b2ab88046245489726207bf9fe2dd5db4453 diff --git a/src/main/java/jp/sfjp/mikutoga/pmd2xml/XmlInputUtil.java b/src/main/java/jp/sfjp/mikutoga/pmd2xml/XmlInputUtil.java index 91d0406..d17c406 100644 --- a/src/main/java/jp/sfjp/mikutoga/pmd2xml/XmlInputUtil.java +++ b/src/main/java/jp/sfjp/mikutoga/pmd2xml/XmlInputUtil.java @@ -7,6 +7,14 @@ package jp.sfjp.mikutoga.pmd2xml; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; +import javax.xml.XMLConstants; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; @@ -14,10 +22,12 @@ import javax.xml.validation.Schema; import jp.sfjp.mikutoga.pmd.model.xml.Schema101009; import jp.sfjp.mikutoga.pmd.model.xml.Schema130128; import jp.sfjp.mikutoga.xml.BotherHandler; -import jp.sfjp.mikutoga.xml.LocalXmlResource; +import jp.sfjp.mikutoga.xml.NoopEntityResolver; import jp.sfjp.mikutoga.xml.SchemaUtil; -import jp.sfjp.mikutoga.xml.XmlResourceResolver; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; import org.xml.sax.XMLReader; /** @@ -25,6 +35,16 @@ import org.xml.sax.XMLReader; */ final class XmlInputUtil { + private static final String F_DISALLOW_DOCTYPE_DECL = + "http://apache.org/xml/features/disallow-doctype-decl"; + private static final String F_EXTERNAL_GENERAL_ENTITIES = + "http://xml.org/sax/features/external-general-entities"; + private static final String F_EXTERNAL_PARAMETER_ENTITIES = + "http://xml.org/sax/features/external-parameter-entities"; + private static final String F_LOAD_EXTERNAL_DTD = + "http://apache.org/xml/features/nonvalidating/load-external-dtd"; + + /** * é ãã³ã³ã¹ãã©ã¯ã¿ã */ @@ -35,12 +55,71 @@ final class XmlInputUtil { /** + * å®å¨ãã¡ã¤ã«ããXMLå ¥åã½ã¼ã¹ãå¾ãã + * + * @param file å®å¨ãã¡ã¤ã« + * @return XMLå ¥åã½ã¼ã¹ + */ + static InputSource fileToSource(File file){ + assert file.exists(); + + URI uri = file.toURI(); + + URL url; + try{ + url = uri.toURL(); + }catch(MalformedURLException e){ + // å®å¨Fileç±æ¥ã®URLã§ã¯èµ·ããããªã + assert false; + throw new AssertionError(e); + } + + String systemId = url.toString(); + + InputSource source = new InputSource(systemId); + + return source; + } + + /** + * InputSourceããInputStreamãå¾ãã + * + *
å ¥åã½ã¼ã¹ã«ã¯ãå°ãªãã¨ããã¤ãã¹ããªã¼ã ã + * URLæåå(SystemId)ã®ãããããè¨å®ããã¦ããªããã°ãªããªãã + * + * @param source å ¥åã½ã¼ã¹ + * @return å ¥åãã¤ãã¹ããªã¼ã + * @throws IllegalArgumentException å ¥åã½ã¼ã¹ã®è¨å®ã足ããªãã + * @throws IOException å ¥åã½ã¼ã¹ã«ã¢ã¯ã»ã¹ä¸è½ã + */ + static InputStream openInputSource(InputSource source) + throws IllegalArgumentException, IOException{ + InputStream is; + + is = source.getByteStream(); + + if(is == null){ + String systemId = source.getSystemId(); + if(systemId == null) throw new IllegalArgumentException(); + + URL url = new URL(systemId); + is = url.openStream(); + } + + is = new BufferedInputStream(is); + + return is; + } + + /** * SAXãã¼ãµãã¡ã¯ããªãçæããã + * *
ã¨ã©ã¼ãã³ãã©ã«ã¯{@link BotherHandler}ãæå®ãããã + * * @param xmlInType å ¥åXMLç¨®å¥ * @return XMLãªã¼ã */ static XMLReader buildReader(ModelFileType xmlInType){ - XmlResourceResolver resolver = new XmlResourceResolver(); - - Schema schema = builsSchema(resolver, xmlInType); + Schema schema = buildSchema(xmlInType); SAXParser parser = buildParser(schema); @@ -137,7 +237,7 @@ final class XmlInputUtil { throw new AssertionError(e); } - reader.setEntityResolver(resolver); + reader.setEntityResolver(NoopEntityResolver.NOOP_RESOLVER); reader.setErrorHandler(BotherHandler.HANDLER); return reader;