Можно ли использовать XMLCatalog для импорта схем?
Можете ли вы использовать XMLCatalog для разрешения xsds в операторах импорта схемы? Если да, что является предпочтительной / лучшей практикой? Я хочу упаковать xsds в jar, поэтому использование относительного schemaLocation не сработало.
Пока что я пытаюсь сделать что-то вроде:
SchemaFactory factory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
new String[]{"/path/to/catalog.xml"});
factory.setResourceResolver(catalogResolver);
Schema schema = factory.newSchema(new StreamSource(ClassLoader
.getSystemResourceAsStream("config.xsd")));
Без особой удачи.
1 ответ
При быстром взгляде я вижу две проблемы:
XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
new String[]{"catalog.xml"});
Если вы посмотрите на Javadoc для этого метода, вы можете прочитать
catalogs - упорядоченный список массивов абсолютных URI
это не то, что вы используете.
Вторая проблема здесь
Schema schema = factory.newSchema(new StreamSource(ClassLoader
.getSystemResourceAsStream("config.xsd")));
Вы не устанавливаете системный идентификатор для схемы, поэтому, если у вас есть относительное местоположение для импорта, оно будет разрешено относительно текущего каталога вашего приложения вместо каталога, в котором у вас есть файл схемы. Вам нужно либо вызвать setSystemId для источника, либо передать системный идентификатор при его создании:
new StreamSource(ClassLoader.getSystemResource("config.xsd").toString())