Можно ли использовать XMLCatalog для импорта схем? - PullRequest
3 голосов
/ 11 июня 2009

Можно ли использовать 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 Ответ

5 голосов
/ 12 июня 2009

При быстром взгляде я вижу две проблемы:

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())
...