Явно указать парсер DOM для мула

У меня есть код веб-приложения на стороне сервера, который использует мула для приема сообщений xml и выполнения некоторой обработки. Недавно я перешел на новую версию tomcat. Я вижу следующие ошибки, когда мул пытается преобразовать xml в dom.

Exception Stack trace: 

1. org.apache.xerces.parsers.XIncludeAwareParserConfiguration нельзя преобразовать в org.apache.xerces.xni.parser.XMLParserConfiguration (java.lang.ClassCastException) org.apache.xerces.parsers.DOMParser:-1 (null) 2. org.apache.xerces.parsers.XIncludeAwareParserConfiguration нельзя преобразовать в org.apache.xerces.xni.parser.XMLParserConfiguration (java.lang.ClassCastException) (org.mule.api.transformer.TransformerException) org.mule.module.xml. трансформатор.XmlToDomDocument:64 (http://www.mulesource.org/docs/site/current2/apidocs/org/mule/api/transformer/TransformerException.html)

Трассировка стека корневого исключения: java.lang.ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration нельзя преобразовать в org.apache.xerces.xni.parser.XMLParserConfiguration в org.apache.xerces.parsers.DOMParser.(Неизвестный источник) на org.apache.xerces.parsers.DOMParser.(неизвестный источник) на org.apache.xerces.jaxp.DocumentBuilderImpl.(неизвестный источник) на org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(неизвестный источник)на com.sun .org.apache.xalan.internal.xsltc.trax.SAX2DOM.createDocument(SAX2DOM.java:324) на com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.(SAX2DOM.java:84) на com.sun.org.apache.xalan.internal.xsltc.runtime.output.TransletOutputHandlerFactory.getSerializationHandler(TransletOutputHandlerFactory.java:187) на com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl .java:392) на com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.tra nsform(TransformerImpl.java:298) в org.mule.module.xml.transformer.XmlToDomDocument.doTransform(XmlToDomDocument.java:58) в org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:254)

Я решил, что это происходит из-за xerces 2.9.1 в моем директоре WEB-INF/lib. Я снял банку, и все заработало. Проблема в том, что мне нужна эта банка в моей библиотеке, так как в библиотеке есть какая-то другая устаревшая третья банка, для которой требуется эта версия xerces в пути к классам.

  1. Есть ли способ, где я мог бы указать другой анализатор DOM и заставить мула выбрать его из пути к классам.
  2. Я проверил документ xerces java, XIncludeAwareParserConfiguration реализует XMLParserConfiguration. Интересно, почему он бросает classcast?

спасибо


person joesatch    schedule 21.05.2012    source источник


Ответы (1)


AbstractXmlTransformer предлагает несколько вариантов конфигурации, в том числе setXMLInputFactory, которые, как я считаю, должны помочь вам в достижении вашей цели.

Проблема в том, что эти параметры конфигурации не предлагаются на уровне XML, поэтому вам придется объявить XmlToDomDocument в качестве пользовательского преобразователя, чтобы задать для него различные свойства.

person David Dossot    schedule 21.05.2012