2011-09-28 6 views
7

हमारे पास एक वेब एप्लिकेशन है जो मेल भेजता है। किसी कारण से, इसकी स्थापना ने निर्णय लिया है कि यह SMTPTransport के लिए कन्स्ट्रक्टर नहीं ढूंढ सकता है जो (सत्र, URLName) तर्क लेता है।टॉमकैट को SMTPTransport (सत्र, URLName) क्यों नहीं मिल सकता है?

स्टैक ट्रेस के प्रासंगिक बिट:

javax.mail.NoSuchProviderException: Provider class does not have a constructor(Session, URLName): protocol=smtp; [email protected]; class=com.sun.mail.smtp.SMTPTransport; vendor=Sun Microsystems, Inc 
     at javax.mail.Session.getService(Session.java:499) 
     at javax.mail.Session.getTransport(Session.java:387) 
     at javax.mail.Session.getTransport(Session.java:347) 
     at javax.mail.Session.getTransport(Session.java:376) 
     at javax.mail.Transport.send(Transport.java:67) 
     at javax.mail.Transport.send(Transport.java:48) 
... 
Caused by: java.lang.NoSuchMethodException: com.sun.mail.smtp.SMTPTransport.<init>(javax.mail.Session, javax.mail.URLName) 
     at java.lang.Class.getConstructor0(Class.java:2706) 
     at java.lang.Class.getConstructor(Class.java:1657) 
     at javax.mail.Session.getService(Session.java:496) 
     ... 8 more 

हम पहले से ही देख लिया है कि SMTPTransport classpath में मौजूद है (जो, आश्चर्य की बात नहीं है, क्योंकि हम एक ClassNotFoundException नहीं मिल रहे हैं), और यह है कि कक्षा वर्ग में उस वर्ग की एकमात्र प्रति। यह tomcat/lib में है। हमारे वेबएप में डुप्लिकेट शामिल नहीं है। $ JAVA_HOME/jre/lib में डुप्लिकेट नहीं है।

मैं भी है कि यह तथ्य में करता है सत्यापित करने के लिए अब तक विघटित वर्ग के रूप में चले गए सवाल में निर्माता है।

मैंने थोड़ी सी गुगलिंग की है और अन्य लोगों को मिला है जिनके पास seen the same error है, लेकिन समस्या के लिए कोई फिक्स नहीं है।

उत्तर

3

मेरे सहकर्मी और मुझे पता चला कि हम इसे क्यों देख रहे थे। https://plus.google.com/105513684958738872125/posts/LBnjehZoss6

सारांश में::

जब मैं एक नकली SMTPTransport वर्ग के लिए देख रहा था, कोई भी पाया जा सकता था मैं इसके बारे में यहां पोस्ट। वास्तविक अपराधी एक डुप्लिकेट javax.mail.Session क्लास था जो मेरे वेबपैप में जोड़ा गया था। इससे टॉमकैट के पदानुक्रमित क्लासलोडर्स के साथ समस्याएं आईं।

जब इन-वेबपैप सत्र वर्ग ने खुद को टॉमकैट-स्तर SMTPTransport पर पास करने का प्रयास किया, तो उस व्यक्ति को उस प्रकार के प्रकार को पहचान नहीं आया (जिसे एक अलग क्लासलोडर द्वारा लोड किया गया था) जिस प्रकार इसकी आवश्यकता होती है निर्माता।

वेबपैड से डुप्लिकेट javax.mail कक्षाओं को हटाने से समस्या ठीक हो जाती है।

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

  • कोई संबंधित समस्या नहीं^_^