XercesImpl в конфликте с JavaSE 6's внутренняя xerces реализация. Оба необходимы …, что может быть сделано?

Я уверен, что не являюсь первым для обнаружения с этим конфликтом.

Код, который я наследовал, делает следующее:

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

Я абсолютно требую этого стороннего компонента, но теперь выполнение кода выше больше работ и я получаю следующее:

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 в classloader собственном, но не сумел сделать так, возможно, из-за отсутствия classloader знаний или возможно потому что не способ пойти. Еще одна вещь о моей среде, моем выполнении приложения на коте 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

[Не удивительно Вам осторожные читатели я предполагаю]

Какие-либо предложения?

11
задан Yaneeve 24 June 2010 в 13:17
поделиться

2 ответа

Согласно http://xml.apache.org/xalan-j/faq.html#faq-N100EF

Чтобы использовать более новую версию Xalan-Java и отменить версию, упакованную с JDK:

используйте механизм отмены одобренных стандартов. Поместите xalan.jar, serializer.jar, xercesImpl.jar и xml-apis.jar в каталог \lib\endorsed в JRE, где установлено программное обеспечение среды выполнения

.
6
ответ дан 3 December 2019 в 07:10
поделиться

Первое, что можно попробовать, это поместить xerces jar в каталог endorsed. Это заставит всю JVM последовательно использовать Xerces. Это может решить всю проблему, если только нет чего-то особенного в 2.8.1, о чем я не знаю.

2
ответ дан 3 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: