Here is a simple class and an aspect (I copy paste the whole code just
not to miss anything relevant; I also attach the files:)
import java.io.*;
import java.util.*;
import org.aspectj.lang.*;
public class BufReaderException {
public void g()
{
BufferedReader in = new BufferedReader(new
FileReader("nonExistingFile"));
String str = null;
while ( (str = in.readLine()) != null )
{
System.out.println(str);
int i = 1;
int j = i / (i*1 - 1);
}
in.close();
}
public static void main(String[] args)
{
BufReaderException example = new BufReaderException();
example.g();
}
}
import java.io.*;
import java.util.*;
import org.aspectj.lang.*;
aspect ExceptionTest perthis(gExec()){
declare soft : Exception : gExec();
pointcut gExec(): execution(* BufReaderException.g());
void around(): gExec()
{
System.out.println("[Inside ExceptionTest Aspect] Around advice
running; before proceed()");
try
{
proceed();
}
catch(SoftException e)
{
System.out.println("[Inside ReaderExceptionAspect] Caught
SoftException; " + e);
System.out.println("Wraps: " + e.getCause());
}
catch(IOException e)
{
System.out.println("[Inside ExceptionTest Aspect] Caught
IOException; " + e);
}
catch(Exception e)
{
System.out.println("[Inside ExceptionTest Aspect] Caught Exception;
" + e);
}
finally
{
System.out.println("[Inside ExceptionTest Aspect] In finally");
}
System.out.println("[Inside ExceptionTest Aspect] Around advice
running; after proceed()");
}
}
And here is the output:
[Inside ExceptionTest Aspect] Around advice running; before proceed()
[Inside ExceptionTest Aspect] Caught IOException;
java.io.FileNotFoundException: out1.txt (No such file or directory)
[Inside ExceptionTest Aspect] In finally
[Inside ExceptionTest Aspect] Around advice running; after proceed()
From the output, I understand that the IOException was caught and not
a SoftException.
--Hossein
On 11-Mar-09, at 7:59 AM, Eric Bodden wrote:
> Hi Hossein.
>
> I think you must be missing something. I doubt that both compilers are
> doing something wrong there. Can you email a simple test case for us
> to look at?
>
> Eric
>
> 2009/3/10 <hsadat_at_gmail.com>:
>> Hi,
>>
>> Are checked exceptions still wrapped in a SoftException, when
>> thrown at a
>> softened join point?
>>
>> In a simple example, I softened the "Exception" on a pointcut and
>> caught the
>> thrown checked exception (IOException in this case). As far as I
>> remember,
>> SoftException is supposed to be thrown when a checked exception
>> occurs at a
>> softened join point; not only I could not catch any SoftException,
>> but I
>> also could directly catch IOException and others. So, have things
>> changed in
>> newer AspectJ versions, or am I missing something?
>>
>> I tested this with abc 1.3.0 as well as AJDT 1.6. 3., and got the
>> same
>> behaviour.
>>
>> Thanks in advance.
>>
>> --Hossein
>>
>>
>
>
>
> --
> Eric Bodden
> Sable Research Group, McGill University
> Montréal, Québec, Canada
>
Received on Wed Mar 11 2009 - 16:01:51 GMT
This archive was generated by hypermail 2.2.0 : Wed Mar 11 2009 - 17:10:12 GMT