Code Review Request 7187876: ClassCastException in TCPTransport.executeAcceptLoop

Stuart Marks stuart.marks at oracle.com
Thu Aug 2 02:19:32 UTC 2012


On 7/30/12 4:43 PM, David Holmes wrote:
> On 31/07/2012 8:27 AM, Darryl Mocek wrote:
>> Hello core-libs. Please review this webrev to fix Bug #7187876. Webrev
>> can be found here: http://cr.openjdk.java.net/~dmocek/7187876/webrev.00.
>>
>> The rmi/transport/acceptLoop/CloseServerSocketOnTermination.java test
>> throws ClassCastException due to the Throwable not being of type Error
>> in TCPTransport.
>
> Just wondering what type it was? Something that extends Throwable directly?
>
> This:
>
> throw new Error(t.getMessage(), t.getCause());
>
> loses the type of exception that was thrown. It is better to use:
>
> throw new Error(t);

The suggestion to use new Error(t) is a good one.

This case is kind of pathological. The CloseServerSocketOnTermination test 
injects an exception of an arbitrary type into the accept loop of an RMI 
connection. (See the test to see how it does this; it's rather clever.) The 
cast error occurs when the exception that's injected is an instance of Throwable.

Oh, one more thing. Mike Duigou pointed out to me that there is something 
called UndeclaredThrowableException. Should we throw new 
UndeclaredThrowableException(t) instead?

s'marks



More information about the core-libs-dev mailing list