OSDN Git Service

Move out xml-xsd info from resolver.
authorOlyutorskii <olyutorskii@users.osdn.me>
Sun, 23 Jun 2019 15:06:06 +0000 (00:06 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Sun, 23 Jun 2019 15:06:06 +0000 (00:06 +0900)
CHANGELOG.txt
src/main/java/jp/sfjp/mikutoga/xml/SchemaUtil.java
src/main/java/jp/sfjp/mikutoga/xml/XmlResourceResolver.java

index c8f960d..0850023 100644 (file)
@@ -7,6 +7,7 @@ TogaGem 変更履歴
 X.XXX.X (XXXX-XX-XX)
     * Split entity resolver from resource resolver to prevent XXE vulnerability.
     * Make Schema-factory safe to prevent XXE vulnerability.
 X.XXX.X (XXXX-XX-XX)
     * Split entity resolver from resource resolver to prevent XXE vulnerability.
     * Make Schema-factory safe to prevent XXE vulnerability.
+    * Move out xml-xsd info from resolver.
 
 3.121.2 (2019-06-06)
     ・DatatypeIo is public now, for replacing JAXB.
 
 3.121.2 (2019-06-06)
     ・DatatypeIo is public now, for replacing JAXB.
index 2b824ff..c2de190 100644 (file)
@@ -30,8 +30,36 @@ import org.xml.sax.SAXNotSupportedException;
  */
 public final class SchemaUtil {
 
  */
 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 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());
+    }
+
 
     /**
      * 隠しコンストラクタ。
 
     /**
      * 隠しコンストラクタ。
@@ -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.
      *
      * <p>Includes some considerations for XXE vulnerabilities.
      * Build SchemaFactory for XML Schema but safety.
      *
      * <p>Includes some considerations for XXE vulnerabilities.
index e3c5a53..8e91ca0 100644 (file)
@@ -27,21 +27,8 @@ import org.w3c.dom.ls.LSResourceResolver;
 public class XmlResourceResolver
         implements LSResourceResolver{
 
 public class XmlResourceResolver
         implements LSResourceResolver{
 
-    /** XML Schema. */
-    public static final String SCHEMA_XML =
-            "http://www.w3.org/2001/xml.xsd";
-
-    /** XSD名前空間。 */
-    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 EMPTY_URI = URI.create("");
 
     private static final URI EMPTY_URI = URI.create("");
 
-    private static final Class<?> THISCLASS = XmlResourceResolver.class;
-
 
     private final Map<URI, URI> uriMap;
 
 
     private final Map<URI, URI> uriMap;
 
@@ -52,21 +39,11 @@ public class XmlResourceResolver
     public XmlResourceResolver(){
         super();
 
     public XmlResourceResolver(){
         super();
 
-        assert this.getClass().equals(THISCLASS);
-
         Map<URI, URI> map;
         map = new HashMap<>();
         map = Collections.synchronizedMap(map);
         this.uriMap = map;
 
         Map<URI, URI> map;
         map = new HashMap<>();
         map = Collections.synchronizedMap(map);
         this.uriMap = map;
 
-        URL redirectRes = THISCLASS.getResource(LOCAL_SCHEMA_XML);
-        String redirectResName = redirectRes.toString();
-
-        URI originalURI = URI.create(SCHEMA_XML);
-        URI redirectURI = URI.create(redirectResName);
-
-        putRedirectedImpl(originalURI, redirectURI);
-
         return;
     }
 
         return;
     }