Как загрузить несколько XSD в веб-приложение?

У нас есть два файла схемы (XSD), и один файл включает другой. Когда мы загружаем файл схемы для проверки файлов XML, он неправильно загружается в веб-приложение. Он выдает ошибку для включенных элементов файла схемы.

        Source[] sources = new StreamSource[2];

            Source schemaFile = new StreamSource(Test.class.getClassLoader().getResourceAsStream(“a.xsd”));
            sources[0] = schemaFile;

            Source schemaFile1 = new StreamSource(Test.class.getClassLoader().getResourceAsStream(“b.xsd”));
            sources[1] = schemaFile1;

            Schema schema = factory.newSchema(sources);

b.xsd включает файл a.xsd. Но тот же код работает нормально, когда мы запускаем его в основном методе.

Может ли кто-нибудь дать предложение по устранению этой проблемы?

Мы можем сделать это с помощью LSResourceResolver в пакете org.w3c.dom.ls. Проблема проверки XML-файла с использованием Java с XSD, имеющим включение

Есть ли способ сделать это с помощью javax в базовом веб-приложении?

Ошибка:

org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ns:Request'.
       at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
       at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
       at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
       at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
       at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
       at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
       at org.apache.xerces.jaxp.validation.DOMValidatorHelper.beginNode(Unknown Source)
       at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
       at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
       at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)
       at javax.xml.validation.Validator.validate(Unknown Source)

person user3496599    schedule 09.04.2015    source источник
comment
какую ошибку вы получаете?   -  person ug_    schedule 09.04.2015


Ответы (1)


LSResourceResolver — хороший вариант, использующий всю инфраструктуру разрешения xml.

Простой взлом будет:

  • вместо использования потоков из загрузчика классов копирование обоих файлов схемы во временное местоположение
  • вместо этого используйте пути к файлам скопированных файлов

Или намного проще

  • храните свои схемы не в папке src рядом с классами, а в веб-папке. Вы можете получить реальные пути файлов к ресурсам в Интернете и использовать их для запуска схем.
person Zielu    schedule 09.04.2015