Abbiamo un'applicazione web che invia posta. Per qualche ragione, una sua installazione ha deciso che non può trovare il costruttore per SMTPTransport che accetta argomenti (Session, URLName).Perché Tomcat non riesce a trovare SMTPTransport (Session, URLName)?
bit rilevanti della traccia dello stack:
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
abbiamo già verificato che SMTPTransport esiste nel percorso di classe (che non è sorprendente, visto che non stiamo ottenendo un ClassNotFoundException), e che è l'unica copia di quella classe nel classpath. È in tomcat/lib. La nostra webapp non include un duplicato. Non c'è un duplicato in $ JAVA_HOME/jre/lib.
Ho anche andato così lontano da decompilare classe per verificare che in effetti hanno il costruttore in questione.
Ho fatto un po 'di google e ho trovato altre persone che hanno seen the same error, ma non ci sono soluzioni per il problema.