Я уверен, что я не первый, кто столкнулся с этим конфликтом.
Код, который я унаследовал, делает следующее:
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 работает (и всегда имел ...)
Недавно мне пришлось интегрировать в мой код другой компонент, написанный в другом месте компании.Этот компонент абсолютно требует включения в classpath xercesImpl-2.8.1.jar
Мне абсолютно необходим этот сторонний компонент, , но , теперь выполняющий приведенный выше код, больше не работает, и я получаю следующее:
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
для пути к классам: org.apache.xerces.dom.DeferredDOMImplementationImpl@5f15c
- при удалении этого результата
com.sun.org.apache.xerces.internal.dom.DeferredDOMImplementationImpl@6c6ae3
[Не удивительно, внимательные читатели, я полагаю]
Есть предложения?