java.lang.NoClassDefFoundError:org/dom4j/Document

sa9*_*689 5 java weblogic noclassdeffounderror classloader dom4j

我有一个名为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);
Run Code Online (Sandbox Code Playgroud)

最后一行代码块使用dom4j Document.i在我的类路径中有dom4j-full.jar.如果我将该类作为独立运行(在eclipse中作为Java应用程序运行),那么它可以正常工作.当我在我的类路径中添加此类作为Web应用程序和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)
Run Code Online (Sandbox Code Playgroud)

我也确定dom4j jar存在于classpath中.有人对问题有什么看法吗?

jav*_*nna 4

看起来dom4j-full.jar包含dom4jjaxen。从你的 stacktrace 中我了解到dom4j它在类路径中,它可以找到jaxen,但是当jaxen查找时dom4j找不到它。我认为加载的 jaxendom4j出于某种原因不是在dom4j-full.jar应用程序服务器类路径中的另一个,而是在应用程序服务器类路径中(当然不是在 eclipse 中),可能是从不同的类加载器加载的。也许您jaxen.jar的共享库中有一个或类似的东西。

  • 谢谢爪哇。这就是问题。我正在使用网络逻辑。Jaxen 是 weblogic 系统类路径的一部分,因此它看不到我的 jar。我在 weblogic.xml 中为 WAR 文件定义了 PREFER WEB INF 类选项。这样我确保为 dom4j 和 jaxen 加载 dom4j-full.jar。 (2认同)