2013-08-12 7 views
9

पर नहीं डाला जा सकता है मुझे javax.mail.Session ऑब्जेक्ट को टॉमकैट संदर्भ फ़ाइल का उपयोग करने के लिए निम्न कोड चलाने का प्रयास करते समय यह त्रुटि प्राप्त हो रही है। ।java.lang.ClassCastException: javax.mail.Session को javax.mail.Session

 Context initCtx = new InitialContext(); 
     Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
     Session session = (javax.mail.Session) envCtx.lookup("mail/session"); 

यह context.xml में संसाधन घोषणा है।

<Resource name="mail/Session" auth="Container" 
     type="javax.mail.Session" 
     mail.smtp.host="host" 
     mail.smtp.user="user" 
     mail.smtp.password="password" 
     mail.smtp.auth="false"/> 

मैं समझता हूँ कि इस वजह से मुझे अपने आवेदन सर्वर पुस्तकालय (बिल्ला) फ़ोल्डर में और मेरे अनुप्रयोगों पुस्तकालय फ़ोल्डर में javax.mail.Session के लिए एक ही पुस्तकालय होने के लिए हो सकता है, मैं के रूप में कई डुप्लिकेट पुस्तकालय फ़ाइलों का सफाया कर दिया है मेरे एप्लिकेशन लाइब्रेरी फ़ोल्डर (जैसे mail.jar) से मैं देख सकता हूं कि लाइब्रेरी के हिस्से के रूप में javax.mail.Session है, अब मैं एक बिंदु पर हूं जहां मुझे अभी भी यह त्रुटि मिल रही है और यह सुनिश्चित नहीं है कि अन्य पुस्तकालय क्या हो सकते हैं इस समस्या का स्रोत, या यह कोई अन्य मुद्दा है जिसे मुझे पता नहीं है?

लोग इस समस्या का स्रोत खोजने के लिए क्या करेंगे सुझाव देंगे?

धन्यवाद।

+0

सुनिश्चित करें कि आप टोमकैट को पुनरारंभ करें। अगर अपवाद अभी भी फेंक दिया गया है, तो आपने एक जगह मिस कर दी है जहां javax.mail.Session अभी भी है। – Henry

+7

मुझे आपकी समस्या के लिए सही समाधान नहीं पता है, लेकिन एक और कारण यह हो सकता है (आपके लिए खोदने के लिए) - javax.mail.Session 2 अलग-अलग क्लासलोडर्स द्वारा लोड किया गया है – serejja

+0

क्या आप मेवेन का उपयोग कर रहे हैं? –

उत्तर

16

यह समस्या सर्वर में होती है क्योंकि बिलाव की lib और आप आवेदन दोनों (वेब-INF/lib में) mail.jar की अपनी कॉपी को है, इसलिए classloaders दो अलग Session.If लोड कर सकते हैं आप से mail.jar हटाना अपने आवेदन, इस समस्या को हल किया जाएगा। Maven javax.mail मेल 1.4 प्रदान की

+0

एक और स्थिति: मेवेन का उपयोग करते समय, विवादित मेल.जर को पोम में प्रत्यक्ष निर्भरताओं में से एक पर अप्रत्यक्ष निर्भरता का उपयोग करके आयात किया जा सकता है। इस मामले में आपको अप्रत्यक्ष निर्भरता का शिकार करना होगा और अप्रत्यक्ष निर्भरता को शामिल होने से रोकने के लिए 'बहिष्करण/बहिष्करण' का उपयोग करना होगा। –

1

उपयोग प्रदान की गुंजाइश, इस समस्या को हल किया जाएगा।

1

आप पहले से ही अपने सर्वर की lib में mail.jar, आपके आवेदन/पोम फ़ाइल से हटा है, तो में

+0

इस टिप्पणी ने मुझे अपनी समस्या का समाधान करने में मदद की – Scott

4

आप शायद अब इस समस्या हो रही है, लेकिन अगले व्यक्ति यहाँ आने के लिए:

आप Maven का उपयोग कर रहे हैं, तो pom.xml में अपने javax.mail निर्भरता को <scope>provided</scope> जोड़ें।

उदाहरण के लिए, मेरे मामले में:

<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>mail</artifactId> 
    <version>YOUR_VERSION</version> 
    <scope>provided</scope> <!-- This line is new --> 
</dependency> 

यह मेरे लिए समस्या हल हो।

+0

मुझे टॉमकैट को पुनरारंभ करना पड़ा और इसके लिए मेरे आवेदन को फिर से तैनात करना पड़ा। – svarog

संबंधित मुद्दे