X-Git-Url: http://git.osdn.net/view?p=mikutoga%2FTogaGem.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fjp%2Fsfjp%2Fmikutoga%2Fxml%2FSchemaUtil.java;h=a8dbadfe1f5fc2ce415bf813e58b15eb4f3f93c9;hp=2b824fffe2d352299e01fa28db5591e4ab90f71b;hb=f9b9e3018b46180c0e88812c25211e8630137a8c;hpb=ebefb7ebac603e37d03d067fce4c5537171faaf4 diff --git a/src/main/java/jp/sfjp/mikutoga/xml/SchemaUtil.java b/src/main/java/jp/sfjp/mikutoga/xml/SchemaUtil.java index 2b824ff..a8dbadf 100644 --- a/src/main/java/jp/sfjp/mikutoga/xml/SchemaUtil.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/SchemaUtil.java @@ -26,15 +26,43 @@ import org.xml.sax.SAXNotRecognizedException; import org.xml.sax.SAXNotSupportedException; /** - * XMLスキーマの各種ビルダ。 + * XML schema (XSD) utilities. */ public final class SchemaUtil { + + /** XML Schema. */ + public static final String SCHEMA_XML = + "http://www.w3.org/2001/xml.xsd"; + + /** XSD namespace. */ + public static final String NS_XSD = + "http://www.w3.org/2001/XMLSchema-instance"; + + private static final String LOCAL_SCHEMA_XML = + "resources/xmlspace.xsd"; + + private static final URI URI_XSD_ORIG; + private static final URI URI_XSD_LOCAL; + private static final String ALLOWED_USCHEMA = "http"; + private static final Class THISCLASS = SchemaUtil.class; + + + static{ + URL redirectRes = THISCLASS.getResource(LOCAL_SCHEMA_XML); + String redirectResName = redirectRes.toString(); + + URI_XSD_ORIG = URI.create(SCHEMA_XML); + URI_XSD_LOCAL = URI.create(redirectResName); + + assert ALLOWED_USCHEMA.equalsIgnoreCase(URI_XSD_ORIG.getScheme()); + } + /** - * 隠しコンストラクタ。 + * Hidden constructor. */ private SchemaUtil(){ assert false; @@ -43,6 +71,17 @@ public final class SchemaUtil { /** + * build xml.xsd redirection info. + * + * @return resolver + */ + public static XmlResourceResolver buildXmlXsdResolver(){ + XmlResourceResolver result = new XmlResourceResolver(); + result.putRedirected(URI_XSD_ORIG, URI_XSD_LOCAL); + return result; + } + + /** * Build SchemaFactory for XML Schema but safety. * *

Includes some considerations for XXE vulnerabilities. @@ -145,10 +184,14 @@ public final class SchemaUtil { * @param resArray ローカルスキーマ情報並び * @return スキーマ */ - public static Schema newSchema(XmlResourceResolver resolver, - LocalXmlResource... resArray ){ + public static Schema newSchema( + XmlResourceResolver resolver, + LocalXmlResource... resArray){ + XmlResourceResolver totalResolver = buildXmlXsdResolver(); + totalResolver.putRedirected(resolver); + for(LocalXmlResource resource : resArray){ - resolver.putRedirected(resource); + totalResolver.putRedirected(resource); } Source[] sources; @@ -159,7 +202,7 @@ public final class SchemaUtil { throw new AssertionError(e); } - SchemaFactory schemaFactory = newSchemaFactory(resolver); + SchemaFactory schemaFactory = newSchemaFactory(totalResolver); Schema result; try{