Я уверен, что я не первый, кто столкнулся с этим конфликтом.XercesImpl противоречит реализации внутренних ксероксов JavaSE 6. Оба нужны ... что можно сделать?
Код, который я унаследовал делает следующее:
org.w3c.dom.Document dom; // declaration
javax.xml.validation.Schema schema; // declaration
...
...
...
javax.xml.validation.Validator validator = schema.newValidator();
validator.validate(new DOMSource(dom));
где ...
стенды для, казалось бы, несущественным/неактуальной кода
Компиляция и запуск кода с JDK 6 работ (и всегда .. .)
Недавно мне пришлось интегрировать в свой код другой компонент, написанный в другом месте в компании. Этот компонент абсолютно необходим включить в пути к классам xercesImpl-2.8.1.jar
я абсолютно требую этого 3-я компонента партии, но сейчас работаю код выше уже не работает, и я получаю следующее:
org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'Root'.
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.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(Validator.java:127)
В качестве решения , Я подумал, возможно, как-то оградить xercesImpl-2.8.1.jar в собственном загрузчике классов, но не смог этого сделать, возможно из-за отсутствия знаний о загрузчике классов или, возможно, из-за того, что это не путь. Еще одна вещь, о моем окружении, мое приложение работает на Tomcat 5.5 и 6 ...
кстати во время отладки я заметил, что когда я бегу dom.getImplementation()
- при добавлении
xercesImpl-2.8.1.jar
к классам результат[email protected]
- при удалении его результат является
com.s[email protected]6c6ae3
[Неудивительно, что вы, чистые читатели, я полагаю]
Любые предложения?
Я сделал точно так же, как вы указали еще конфликт. Думаю, поскольку код, присутствующий до добавления стороннего компонента, использует старый API, найденный в JDK ... – Yaneeve
@Yaneeve - Думаю, вы ответили на свой вопрос. Вам понадобится изменить свой код, чтобы использовать тот или иной, я бы пошел с тем, который поставляется с JDK. Может быть, если вы полностью квалифицируете свои классы в каждом модуле, который может работать? Я хотел бы избавиться от добавленного вами Xercesimpl и просто заставить его работать. –
Я думаю, что это то, что я должен сделать ... – Yaneeve