java.lang.NoClassDefFoundError : org/dom4j/Document 错误

标签 java weblogic classloader noclassdeffounderror 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);

代码块的最后一行使用 dom4j 文档。我的类路径中有 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)

我也确信类路径中存在 dom4j jar。 有人对问题有任何想法吗?

最佳答案

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

关于java.lang.NoClassDefFoundError : org/dom4j/Document 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9002082/

相关文章:

java - 数字类型字符串 "trim "和 "replaceAll "不能去掉最后一个空格

java - 将ear文件部署到weblogic 10g

java - 什么时候应该使用Java Extension Class Loader?

java - Webview 后退按钮导致静态错误

java - 相同的方法调用,LinkedList、Queue 与 List 中的不同结果

java.io.InvalidClassException 即使使用serialVersionUID

java - 无法定位 JDBC 数据源

tomcat - Grails 3 自定义 web.xml 和 weblogic.xml

java - Class.forName(name, instantiation, classLoader) 不会将类添加到类路径

java - 无法从tomcat中自定义类加载器加载的类中获取注释