java.lang.NoClassDefFoundError: org / dom4j / Document - PullRequest
5 голосов
/ 25 января 2012

У меня есть класс с именем XMLtoXML.java, и это один из его методов ...

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public Object[] process(Object data) {

    String templateXML = null;
    Object result[] = null;
    String inputxml = null;
    String templateNumber = null;
    Iterator iterator = null;
    String scenarioConfigUrl = null;
    Node inputNode;
    Node outputNode;
    String subTemplateXML = null;
    String outputXml = null;

    if (delay != null) {

        long time = Long.parseLong(delay);
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    inputxml = (String) metadata.get(Constants.REQUEST);
    if (inputxml == null) {
        throw new NullRecordException("input data to XMLtoXML class  in   
      metadata map is null");
    }
    Document inputXMLDocument = Dom4jUtils.getDocument(inputxml);

последняя строка блока кода использует dom4j Document.i у меня есть dom4j-full.jar в моем пути к классам. если я запускаю этот класс как автономный (запускаю как приложение Java в eclipse), то он работает нормально. когда я добавляю этот класс как часть веб-приложения и dom4j-full.jar в моем пути к классам.
я получил следующее исключение.

java.lang.NoClassDefFoundError: org/dom4j/Document
   at org.jaxen.dom4j.DocumentNavigator.getDocumentNode(DocumentNavigator.java:346)
   at org.jaxen.expr.DefaultAbsoluteLocationPath.evaluate
    (DefaultAbsoluteLocationPath.java:102)

   at org.jaxen.expr.DefaultXPathExpr.asList(DefaultXPathExpr.java:102)
   at org.jaxen.BaseXPath.selectNodesForContext(BaseXPath.java:674)
   at org.jaxen.BaseXPath.selectNodes(BaseXPath.java:213)
   at org.jaxen.BaseXPath.selectSingleNode(BaseXPath.java:234)
   at org.dom4j.xpath.DefaultXPath.selectSingleNode(DefaultXPath.java:156)
   at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:188)
   at org.amdocs.convert.XMLtoXML.process(XMLtoXML.java:134)
   at org.openadaptor.core.node.Node.processSingleRecord(Node.java:148)
   at org.openadaptor.core.node.Node.process(Node.java:170)
   at org.openadaptor.core.node.ProcessorNode.process(ProcessorNode.java:96)
   at org.openadaptor.core.router.AbstractRouter.process(AbstractRouter.java:239)
   at org.openadaptor.core.router.AbstractRouter.process(AbstractRouter.java:223)
   at org.openadaptor.core.router.AbstractRouter.processResponse(AbstractRouter.java:249)
   at org.openadaptor.core.router.AbstractRouter.process(AbstractRouter.java:239)
   at org.openadaptor.core.router.AbstractRouter.process(AbstractRouter.java:223)
   at org.openadaptor.core.router.AbstractRouter.process(AbstractRouter.java:180)
   at org.openadaptor.core.adaptor.Adaptor.process(Adaptor.java:285)
   at org.openadaptor.core.node.Node.callChainedMessageProcessor(Node.java:213)
   at org.openadaptor.core.node.Node.process(Node.java:199)
   at org.openadaptor.core.node.ReadNode.process(ReadNode.java:241)
   at org.openadaptor.core.node.ReadNode.run(ReadNode.java:196)
   at java.lang.Thread.run(Thread.java:619)

Я также уверен, что баночка dom4j присутствует на classpath. У кого-нибудь есть идеи по поводу вопроса?

Ответы [ 2 ]

4 голосов
/ 25 января 2012

Похоже, dom4j-full.jar содержит dom4j и jaxen. Из вашей трассировки стека я понимаю, что dom4j находится в пути к классам, и он может найти jaxen, но когда jaxen ищет dom4j, он не может его найти. Я думаю, что jaxen, который был загружен из dom4j, по какой-то причине не тот, который находится внутри dom4j-full.jar, а другой, который есть у вас в classpath сервера приложений (и, конечно, не в затмении), возможно, загруженный из другой загрузчик классов. Возможно, у вас есть jaxen.jar в ваших общих библиотеках или что-то вроде этого.

3 голосов
/ 25 января 2012

В трассировке стека четко указано, что другие классы org.dom4j присутствуют и используются. Похоже, у вас конфликт версий библиотеки.

версии dom4j и jaxen должны быть совместимы друг с другом.

Сравните их версии с теми, которые хорошо работают в автономном режиме.

...