in src/com/intellij/idea/plugin/hybris/system/type/model/generator/XSDModelLoader.java [130:180]
private XSModel loadSchema(final File schemaFile, final XMLEntityResolver resolver) throws Exception {
// get DOM Implementation using DOM Registry
System.setProperty(
DOMImplementationRegistry.PROPERTY,
"org.apache.xerces.dom.DOMXSImplementationSourceImpl"
);
final DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();
final XSImplementation impl = (XSImplementation) registry.getDOMImplementation("XS-Loader");
final XSLoader schemaLoader = impl.createXSLoader(null);
final DOMConfiguration config = schemaLoader.getConfig();
// create Error Handler
final DOMErrorHandler errorHandler = domError -> {
Util.log("DOMError: " + domError.getMessage());
final Object relatedException = domError.getRelatedException();
if (relatedException != null) {
Util.log("DOMError: " + relatedException);
if (relatedException instanceof Throwable) {
((Throwable) relatedException).printStackTrace(System.out);
}
}
return false;
};
// set error handler
config.setParameter("error-handler", errorHandler);
// set validation feature
config.setParameter("validate", Boolean.TRUE);
// parse document
config.setParameter("error-handler", errorHandler);
config.setParameter("http://apache.org/xml/properties/internal/entity-resolver", resolver);
final XSModel model = schemaLoader.loadURI(schemaFile.getAbsolutePath());
if (model == null) {
return null;
}
XSNamedMap components = model.getComponents(XSConstants.ELEMENT_DECLARATION);
for (int i = 0; i < components.getLength(); i++) {
final XSObject obj = components.item(i);
final QName qname = new QName(obj.getNamespace(), obj.getName());
final String file = this.model.qname2FileMap.get(qname);
this.model.qname2FileMap.put(qname, (file == null ? "" : file + ';') + schemaFile.getName());
}
components = model.getComponents(XSConstants.TYPE_DEFINITION);
for (int i = 0; i < components.getLength(); i++) {
final XSObject obj = components.item(i);
final QName qname = new QName(obj.getNamespace(), obj.getName());
final String file = this.model.qname2FileMap.get(qname);
this.model.qname2FileMap.put(qname, (file == null ? "" : file) + ':' + schemaFile.getName() + ':');
}
return model;
}