Tenemos una aplicación web que envía correos. Por algún motivo, una instalación de este ha decidido que no puede encontrar el constructor para SMTPTransport que toma argumentos (Session, URLName).¿Por qué Tomcat no puede encontrar SMTPTransport (Session, URLName)?
Bits relevantes del seguimiento de la pila:
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
Ya hemos comprobado que SMTPTransport existe en la ruta de clase (lo cual no es sorprendente, ya que no estamos obteniendo un ClassNotFoundException), y que es la única copia de esa clase en el classpath. Está en tomcat/lib. Nuestra aplicación web no incluye un duplicado. No hay un duplicado en $ JAVA_HOME/jre/lib.
Incluso he ido tan lejos como para descompilar la clase para verificar que de hecho tienen el Constructor de que se trate.
He hecho un poco de búsqueda en Google y he encontrado otras personas que tienen seen the same error, pero no hay soluciones para el problema.