private XSModel loadSchema()

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;
    }