[XMLBEANS-648] issue with compiling XSDs when using modularized runtimes. Thanks to Rodrigo Merino. This closes #13

git-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1916370 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/xmlbeans/impl/common/DefaultClassLoaderResourceLoader.java b/src/main/java/org/apache/xmlbeans/impl/common/DefaultClassLoaderResourceLoader.java
index f11cd49..f31767b 100755
--- a/src/main/java/org/apache/xmlbeans/impl/common/DefaultClassLoaderResourceLoader.java
+++ b/src/main/java/org/apache/xmlbeans/impl/common/DefaultClassLoaderResourceLoader.java
@@ -30,7 +30,7 @@
             in = getResourceAsStream(DefaultClassLoaderResourceLoader.class.getClassLoader(), resourceName);
         }
         if (in == null) {
-            in = DefaultClassLoaderResourceLoader.class.getResourceAsStream(resourceName);
+            in = DefaultClassLoaderResourceLoader.class.getResourceAsStream("/" + resourceName);
         }
         return in;
     }
diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeLoaderImpl.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeLoaderImpl.java
index f59e922..aebe6a8 100644
--- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeLoaderImpl.java
+++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeLoaderImpl.java
@@ -265,7 +265,7 @@
             tsname = crackEntry(_resourceLoader, searchfor);
         }
 
-        if (_classLoader != null) {
+        if (tsname == null && _classLoader != null) {
             tsname = crackEntry(_classLoader, searchfor);
         }
 
diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
index 099b2cc..cd9c864 100644
--- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
+++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
@@ -16,6 +16,7 @@
 package org.apache.xmlbeans.impl.schema;
 
 import org.apache.xmlbeans.*;
+import org.apache.xmlbeans.impl.common.DefaultClassLoaderResourceLoader;
 import org.apache.xmlbeans.impl.common.QNameHelper;
 import org.apache.xmlbeans.impl.common.XBeanDebug;
 import org.apache.xmlbeans.impl.util.ExceptionUtil;
@@ -196,7 +197,7 @@
         _name = fullname.substring(0, fullname.lastIndexOf('.'));
         XBeanDebug.LOG.atTrace().log("Loading type system {}", _name);
         _classloader = indexclass.getClassLoader();
-        _linker = SchemaTypeLoaderImpl.build(null, null, _classloader, getMetadataPath());
+        _linker = SchemaTypeLoaderImpl.build(null, new DefaultClassLoaderResourceLoader(), _classloader, getMetadataPath());
         _resourceLoader = new ClassLoaderResourceLoader(_classloader);
         try {
             initFromHeader();
diff --git a/src/main/java9/module-info.class b/src/main/java9/module-info.class
index f6902fa..9c068e1 100644
--- a/src/main/java9/module-info.class
+++ b/src/main/java9/module-info.class
Binary files differ
diff --git a/src/test/java/xmlobject/detailed/TestsFromBugs.java b/src/test/java/xmlobject/detailed/TestsFromBugs.java
index d476fc4..6848129 100755
--- a/src/test/java/xmlobject/detailed/TestsFromBugs.java
+++ b/src/test/java/xmlobject/detailed/TestsFromBugs.java
@@ -20,9 +20,13 @@
 import com.mytest.Info;
 import com.mytest.TestDocument;
 import org.apache.xmlbeans.*;
+import org.apache.xmlbeans.impl.schema.BuiltinSchemaTypeSystem;
+import org.apache.xmlbeans.impl.schema.SchemaTypeLoaderImpl;
+
 import org.junit.jupiter.api.Test;
 import test.xmlobject.test36510.Test36510AppDocument;
 
+import static org.apache.xmlbeans.XmlBeans.compileXmlBeans;
 import static org.junit.jupiter.api.Assertions.*;
 
 /**
@@ -152,4 +156,49 @@
         assertEquals(1, ats.length);
         assertDoesNotThrow(ats[0]::getSourceName);
     }
+    
+    /**
+     * https://issues.apache.org/jira/browse/XMLBEANS-648
+     */
+    @Test
+    void test648() throws Exception {
+        final XmlOptions options = new XmlOptions();
+        options.setCompileNoUpaRule();
+        options.setCompileNoValidation();
+        options.setCompileDownloadUrls();
+    
+        /* Load the schema */
+        final SchemaTypeLoader contextTypeLoader =
+            SchemaTypeLoaderImpl.build(new SchemaTypeLoader[] {BuiltinSchemaTypeSystem.get()}, null,
+                                       Object.class.getClassLoader());
+    
+        String schemaString = "<schema xmlns=\"http://www.w3.org/2001/XMLSchema\" xmlns:tns=\"http://validationnamespace.raml.org\" attributeFormDefault=\"unqualified\" elementFormDefault=\"qualified\" targetNamespace=\"http://validationnamespace.raml.org\">\n"
+            + "    <element name=\"__DataType_Fragment__\">\n"
+            + "        <complexType>\n"
+            + "            <sequence>\n"
+            + "                <element name=\"firstname\">\n"
+            + "                    <simpleType>\n"
+            + "                        <restriction base=\"string\"/>\n"
+            + "                    </simpleType>\n"
+            + "                </element>\n"
+            + "                <element name=\"lastname\">\n"
+            + "                    <simpleType>\n"
+            + "                        <restriction base=\"string\"/>\n"
+            + "                    </simpleType>\n"
+            + "                </element>\n"
+            + "                <element name=\"age\">\n"
+            + "                    <simpleType>\n"
+            + "                        <restriction base=\"double\"/>\n"
+            + "                    </simpleType>\n"
+            + "                </element>\n"
+            + "                <any maxOccurs=\"unbounded\" minOccurs=\"0\" processContents=\"skip\"/>\n"
+            + "            </sequence>\n"
+            + "        </complexType>\n"
+            + "    </element>\n"
+            + "</schema>\n"
+            + "";
+        final XmlObject[] schemaRepresentation = new XmlObject[] {contextTypeLoader.parse(schemaString, null, null)};
+    
+        XmlBeans.compileXmlBeans(null, null, schemaRepresentation, null, contextTypeLoader, null, options);
+    }
 }