2012-01-25 21 views
5

मैं एक वर्ग XMLtoXML.java कहा जाता है और यह के तरीकों में से एक है ...java.lang.NoClassDefFoundError: org/dom4j/दस्तावेज

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 है। यदि मैं इस वर्ग को स्टैंडअलोन के रूप में चलाता हूं (ग्रहण में जावा एप्लिकेशन के रूप में चलाएं) तो यह ठीक काम करता है। जब मैं अपने क्लासपाथ में वेब एप्लिकेशंस और 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) 

मैं भी यकीन है कि classpath पर dom4j जार वर्तमान। किसी के पास समस्या के बारे में कोई विचार है?

+1

ठीक है, आपने अपने क्लासपाथ में dom4j-full.jar को शामिल करने का प्रयास कैसे किया है? ऐसा लगता है कि यह वास्तव में * नहीं है - या कम से कम 'जैक्सन' तक पहुंच योग्य नहीं है। आपके क्लासपाथ पर 'जैक्सन' कहां है? –

+0

मेरी [क्लासफाइंडर] (http://www.adarshr.com/papers/classfinder) का उपयोग यह जानने के लिए करें कि कौन सी जार में एक दी गई कक्षा है। – adarshr

+0

@ जोनस्केट डोम 4j शुरुआत में वहां प्रतीत होता है यदि आप स्टैकट्रैक देखते हैं, लेकिन जब जैक्सन 'दस्तावेज़' वर्ग को देखता है तो नामांकित करें। वह अजीब है! – javanna

उत्तर

4

dom4j-full.jar जैसा लगता है dom4j और jaxen दोनों शामिल हैं। आप से stacktrace मैं समझता हूं dom4j कक्षा में है, और यह jaxen पा सकता है, लेकिन jaxendom4j के लिए देखता है यह इसे नहीं मिल रहा है। मुझे लगता है कि dom4j से लोड किया गया जैक्सन किसी कारण से नहीं है कि dom4j-full.jar के अंदर एक है लेकिन आपके एप्लिकेशन सर्वर क्लासपाथ (और निश्चित रूप से आपके ग्रहण में नहीं) के भीतर एक और है, शायद एक अलग क्लासलोडर से लोड किया गया है। हो सकता है कि आपके साझा पुस्तकालयों में कुछ ऐसा jaxen.jar हो या ऐसा कुछ हो।

+2

धन्यवाद जवाना। यह मुद्दा है। मैं वेबलॉगिक का उपयोग कर रहा हूँ। जैक्सन वेबलॉग सिस्टम क्लासपाथ का हिस्सा है, इसलिए यह मेरे जार नहीं देखता है। मैंने अपनी WAR फ़ाइल के लिए weblogic.xml में प्रीफ़र वेब आईएनएफ कक्षा विकल्प को परिभाषित किया है। इस तरह मैंने यह सुनिश्चित किया कि dom4j-full.jar dom4j और jaxen के लिए लोड किया गया है। – sa9689

+0

खुशी है कि आप हल हो गए! मैंने सोचा था कि आप टोमकैट के साथ काम कर रहे थे। – javanna

3

स्टैक्र्रेस स्पष्ट रूप से बताता है कि अन्य org.dom4j कक्षाएं मौजूद हैं और इसका उपयोग किया जा रहा है। तो ऐसा लगता है कि आपके पास लाइब्रेरी संस्करण संघर्ष है।

dom4j और जैक्सन संस्करण एक-दूसरे के साथ संगत होना चाहिए।

उनके संस्करणों की तुलना उन लोगों के साथ करें जो स्टैंडअलोन मोड में अच्छी तरह से काम करते हैं।

+0

सबसे अधिक संभावना है। 'NoClassDefFound' – jere

+0

@ वाडज़िम को ट्रैक करने के लिए एक कुतिया हो सकता है, मैंने स्टैंडअलोन और वेब एप्लिकेशन (dom4j-full.jar) में एक ही जार का उपयोग किया है। मुझे लगता है कि यह क्लासलोडर मुद्दा हो सकता है लेकिन मुझे यकीन नहीं है। – sa9689

+0

जैक्सन भी वही है? यदि ऐसा है, तो जॉन स्कीट द्वारा टिप्पणी देखें। जांचें कि दोनों जार एक ही स्थान पर हैं और कोई युगल नहीं है। – Vadzim