]
David Lloyd commented on LOGTOOL-101:
-------------------------------------
No, I mean that the new exception's stack trace is exactly the same as the old
exception's stack trace. Basically this is the only way you can change the message
text of an exception since that value is immutable. You have to construct a new exception
of the same type as the original but with the modified message text, then you have to copy
the stack trace of the original into the new object.
Exception transformation
------------------------
Key: LOGTOOL-101
URL:
https://issues.jboss.org/browse/LOGTOOL-101
Project: Log Tool
Issue Type: Feature Request
Reporter: David Lloyd
Assignee: James Perkins
I'd like to be able to transform an exception message. What this means is, create a
new exception, embed its message in my message, and copy its stack trace to mine.
Something like this:
{code}
@Message(id = 1234, "Binding to %s failed")
IOException bindFailed(SocketAddress bindAddress, @TransformException IOException cause)
{code}
This would yield a message like: "Binding to 1.2.3.4/1234 failed: Address already in
use". Note the addition of the ": " and the source string.
Note that I can almost do this now, except that there's no way to copy the exception
stack:
{code}
@Message(id = 1234, "Binding to %s failed: %s")
IOException bindFailed(SocketAddress bindAddress, IOException cause)
{code}
An alternative approach is to add an annotation for copying the stack trace:
{code}
@Message(id = 1234, "Binding to %s failed")
IOException bindFailed(SocketAddress bindAddress, @CopyStackFrom IOException cause)
{code}
Note that in this case the original exception message is lost. The next variant would
preserve the message:
{code}
@Message(id = 1234, "Binding to %s failed: %s")
IOException bindFailed(SocketAddress bindAddress, IOException cause, @CopyStackFrom
IOException cause2)
{code}
And now to eliminate the duplication:
{code}
@Message(id = 1234, "Binding to %s failed: %s")
IOException bindFailed(SocketAddress bindAddress, @CopyStackFrom @Pos(2) IOException
cause)
{code}
Note that I don't recall if @Pos is 1- or 0-based, so I guessed.