java.lang.NoClassDefFoundError:org / dom4j / Document

我有一个名为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。 如果我将该类作为独立运行(在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存在于classpath中。 有人对问题有任何想法吗?

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

org.dom4j清楚地表明存在并正在使用其他org.dom4j类。 所以你似乎有库版本冲突。

dom4j和jaxen版本应该相互兼容。

将它们的版本与在独立模式下运行良好的版本进行比较。