Можно ли использовать 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())
 jon07711 июн. 2009 г., 23:09
Спасибо за помощь. Будет ли относительный поиск работать, если файлы находятся в банке? Это не удалось, как только я jar'd XSDS.

Ваш ответ на вопрос