mail-api icon indicating copy to clipboard operation
mail-api copied to clipboard

MailHandler should catch ServiceConfigurationError

Open jmehrens opened this issue 4 years ago • 0 comments

JakaraMail 1.6.6 MailHandler test fails when running under JDK 1.7 with the following:

Testcase: testCloseContextClassLoader(com.sun.mail.util.logging.MailHandlerTest):	Caused an ERROR
javax.mail.Provider: Provider com.sun.mail.imap.IMAPProvider not found
java.util.ServiceConfigurationError: javax.mail.Provider: Provider com.sun.mail.imap.IMAPProvider not found
	at java.util.ServiceLoader.fail(ServiceLoader.java:231)
	at java.util.ServiceLoader.access$300(ServiceLoader.java:181)
	at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:365)
	at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
	at javax.mail.Session.loadProviders(Session.java:964)
	at javax.mail.Session.<init>(Session.java:254)
	at javax.mail.Session.getInstance(Session.java:281)
	at com.sun.mail.util.logging.MailHandler.initSession(MailHandler.java:3448)
	at com.sun.mail.util.logging.MailHandler.writeLogRecords0(MailHandler.java:2823)
	at com.sun.mail.util.logging.MailHandler.writeLogRecords(MailHandler.java:2790)
	at com.sun.mail.util.logging.MailHandler.close(MailHandler.java:853)
	at com.sun.mail.util.logging.MailHandlerTest.testCloseContextClassLoader0(MailHandlerTest.java:2295)
	at com.sun.mail.util.logging.MailHandlerTest.testCloseContextClassLoader(MailHandlerTest.java:2273)

Steps to reproduce the behavior:

  1. Install JDK 7.
  2. Run the logging-mailhander tests.

In the field, the workaround would be to add a MailHandler.verify property to the logging properties. The documentation already suggests this.

This appears to be a regression from GH 323 Support loading protocol providers using ServiceLoader. This does not occur under JDK8 and later due to https://bugs.openjdk.java.net/browse/JDK-7198496

The MailHandler should be patched to:

  1. Catch ServiceConfigurationError and adapt it so it can be reported to the error manager. This is need to support JavaMail versions without the fix for https://github.com/eclipse-ee4j/mail/issues/548
  2. The context classloader needs to be adjusted during close and other method to support the service loader.

Overall, this shows that there is a gap in testing because project is not running all tests under each major version of the JDK.

jmehrens avatar Mar 30 '21 15:03 jmehrens