[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);
+ }
}