Вы можете установить собственную реализацию ResourceResolver и LSInput для SchemaFactory , так что вызов LSInput.getCharacterStream () предоставит схему из локального пути.
Попытка предоставить подробный пример здесь .
Подход в основном состоит из правильной реализации того, что вызывается из
getSchemaAsStream(input.getSystemId(), input.getBaseURI(), localPath)));
в конце следующего кода.На этом этапе вы должны подключить свой собственный механизм поиска, чтобы найти файлы схемы по вашему локальному пути.
public void validate(InputStream xmlStream, InputStream schemaStream, String baseUri, String localPath)
throws SAXException, IOException {
Source xmlFile = new StreamSource(xmlStream);
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
factory.setResourceResolver((type, namespaceURI, publicId, systemId, baseURI) -> {
LSInput input = new DOMInputImpl();
input.setPublicId(publicId);
input.setSystemId(systemId);
input.setBaseURI(baseUri);
input.setCharacterStream(new InputStreamReader(
getSchemaAsStream(input.getSystemId(), input.getBaseURI(), localPath)));
return input;
});