Hallo Gary,
the main reason I wrote ExceptionUtils.setCause() is to make my logs the
more readable as possibile depending on the underlying JRE, so the different
behavior between JRE < 1.4 and >= 1.4 is by design.
I agree with you that extending NestableException, NestableError,
NestableRuntimeException *is the best way* to accomplish this task.
But in those cases when the developer is dealing with already defined
Exceptions that are not subclassed from Nestable* the use of
ExceptionUtils.setCause() can be useful to avoid the implementation of the
Nestable interface and get the portability to JRE >= 1.4, as in the
following example:
import org.apache.commons.codec;
import org.apache.commons.log;
public class MyEncoder implements Encoder {
public Object encode(Object pObject) throws EncoderException {
Object result = null;
try {
InputStream in = ....
try {
// omissis
} finally {
in.close();
}
} catch (IOException ioe) {
EncoderException e = new ExcoderException("Encode failed due to
an I/O error");
ExceptionUtils.setCause(e, ioe);
throw e;
}
return result;
}
protected static Log LOG = LogFactory.getLog(MyEncoder.class);
public static void main(String[] args) {
MyEncoder enc = new MyEncoder();
try {
System.out.println(enc.encode("test"));
LOG.info("encode() succeeded");
} catch (EncoderException e) {
LOG.error("encode() failed", e);
}
}
}
Ciao,
Andrea.
PS: the simple example I provided could open a debate: why not including
commons-lang in the other commons-* components and leverage the power of
lang.builder.*, lang.enums.*, lang.exception.* packages and so on?
IMHO in most cases the commons-lang code is more reliable than the
equivalent ad-doc imported or written code in the other commons-* packages.
:-)
----- Original Message -----
From: "Gary Gregory" <[EMAIL PROTECTED]>
To: "Jakarta Commons Developers List" <commons-dev@jakarta.apache.org>
Sent: Wednesday, January 04, 2006 9:00 AM
Subject: RE: [lang] [PATCH] new ExceptionUtils.setCause() method
Hello Andrea:
I have your patch installed on my machine but I want to make sure I
understand the intent. In your example:
public class MyException extends Exception {
public MyException(String msg) {
super(msg);
}
public MyException(String msg, Throwable cause) {
super(msg);
ExceptionUtils.setCause(this, cause);
}
}
If this code runs in a JRE >= 1.4 , the cause is set in the target.
If this code runs in a JRE < 1.4, nothing happens.
So the code is portable but the behavior is different.
Is the intent to write code in a JRE < 1.4 that will behave OK on a JRE
= 1.4?
Why not subclass NestableException and get the portability AND the
proper behavior?
Thanks,
Gary
-----Original Message-----
From: Andrea Rombaldi [mailto:[EMAIL PROTECTED]
Sent: Tuesday, January 03, 2006 10:44 AM
To: Jakarta Commons Developers List
Subject: Re: [lang] [PATCH] new ExceptionUtils.setCause() method
Hi,
this is just a reminder for my trivial patch :-)
Ciao,
Andrea.
> DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG*
> RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
> <http://issues.apache.org/bugzilla/show_bug.cgi?id=37574>.
> ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND*
> INSERTED IN THE BUG DATABASE.
>
> http://issues.apache.org/bugzilla/show_bug.cgi?id=37574
>
>
>
>
>
> ------- Additional Comments From [EMAIL PROTECTED] 2005-12-06
> 01:19 -------
> I'll try to take a look this week.
>
> --
> Configure bugmail:
> http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
> ------- You are receiving this mail because: -------
> You reported the bug, or are watching the reporter.
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]