JDK 9 RFR [8137005]: java.util.logging.Formatter#formatMessage() swallows Exceptions
Jason Mehrens
jason_mehrens at hotmail.com
Fri Nov 20 14:47:13 UTC 2015
Alexander,
Why not just cache the last exception in the formatter and use getTail to clear it and report it? Since formatter is in the same package as Handler you will have elevated access to the error manager through Handler.reportError. That also makes it so you don't have to change the public API of Formatter.
Jason
________________________________________
From: core-libs-dev <core-libs-dev-bounces at openjdk.java.net> on behalf of Alexander Fomin <alexander.fomin at oracle.com>
Sent: Friday, November 20, 2015 7:48 AM
To: core-libs-dev at openjdk.java.net; Daniel Fuchs; mandy.chung at oracle.com
Subject: JDK 9 RFR [8137005]: java.util.logging.Formatter#formatMessage() swallows Exceptions
Hi,
please, review this patch to report errors in
java.util.logging.Formatter#formatMessage().
Bug: https://bugs.openjdk.java.net/browse/JDK-8137005
Webrev: http://cr.openjdk.java.net/~dfuchs/alexander/8137005/webrev.00
Summary:
j.u.logging.Formatter#formatMessage() swallows exceptions that
happening during formatting of a message. In the result the exceptions
are lost and users don't know about reasons why the message hasn't been
formatted as expected. We would avoid to throw any exceptions in
Formatter#formatMessage() from compatibility stand point. To report an
error in consistent way we have to pass ErrorManager in Formatter. It's
require API changes. So, I'm going to file CCC when if the fix approved.
The suggested fix is to add 2 new methods in j.u.logging.Formatter
to set/get an ErrorManager, update Formatter#formatMessage() to report
errors via the ErrorManager and update Handler to pass errorManager to
Formatter.
Testing:
A couple of new regression tests have been created:
test/java/util/logging/Test8137005.java - real case provided by
users
test/java/util/logging/NullErrorManagerTest.java - additional
check to make sure no NPE showed if ErrorManager isn't set. Beside of
this touched new API methods.
Logging regression tests have been run:
jdk/test/java/util/logging
jdk/test/closed/java/util/logging
jdk/test/sun/util/logging
All tests passed passed.
JPRT:
http://sthjprt.uk.oracle.com/archives/2015/11/2015-11-19-143523.gtee.dev/
failures in the job are known issues and not related to the fix.
Thanks,
Alexander
More information about the core-libs-dev
mailing list