I have a class called XMLtoXML.java and this is one of it’s methods…
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);
last line of code block uses a dom4j Document.i have dom4j-full.jar in my classpath.
if i run this class as standalone(Run as Java application in eclipse) then it works fine.
when i add this class as part of web appllication and dom4j-full.jar in my classpath.
i got following exception.
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)
I am also sure that the dom4j jar present on classpath.
Anybody have any ideas about issue?
Looks like
dom4j-full.jarcontains bothdom4jandjaxen.From you stacktrace I understand
dom4jis in the classpath, and it can findjaxen, but whenjaxenlooks fordom4jit can’t find it.I think the jaxen that has been loaded from
dom4jisn’t for some reason that one inside thedom4j-full.jarbut another one that you have within your application server classpath (and not in your eclipse of course), perhaps loaded from a different classloader. Maybe you have ajaxen.jarin your shared libraries or something like this.