Ссылка на схему XSD в файле jar - PullRequest
12 голосов
/ 14 февраля 2012

У меня есть два файла схемы, один из которых импортирован из другого. При выполнении кода в Eclipse схемы не найдены, но при выполнении кода из файлов jar схемы не найдены

вот код

SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setNamespaceAware(true);
        factory.setValidating(false);

        SchemaFactory schemaFactory = SchemaFactory
                .newInstance("http://www.w3.org/2001/XMLSchema");
        try {
            factory.setSchema(schemaFactory.newSchema(new Source[] {
                    new StreamSource(getClass().getResource("Liso.xsd")
                            .getFile()),
                    new StreamSource(getClass().getResource("LisoXml.xsd")
                            .getFile()) }));
                this.saxParser = factory.newSAXParser();
        } catch (SAXException se) {
            System.out.println("SCHEMA : " + se.getMessage()); // problem in the XSD itself
        }

и вот ошибка, которую я получаю

SCHEMA : schema_reference.4: Failed to read schema document 'file:/C:/Tools/lib/LisoTools.jar!/com/xerox/liso/xml/Liso.xsd', because 1) could not find the do
cument; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.

Спасибо

1 Ответ

13 голосов
/ 14 февраля 2012

Если Liso.xsd импортирует LisoXml.xsd, то достаточно просто определить Liso.xsd для фабрики схемы, как показано ниже. API достаточно умный, чтобы загрузить импортированные / включенные схемы.

SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema")
Schema compiledSchema = schemaFactory.newSchema(getClass().getClassLoader().getResource("Liso.xsd"))

Я убедился, что это работает как на 1.5, так и на 1.6. На версии 1.6 вы можете решить эту проблему и при использовании DOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...