Andy, 

Thank you!! That did it.

Al

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Andy Clement
Sent: Tuesday, January 20, 2009 6:18 PM
To: [email protected]
Subject: Re: [aspectj-users] AspectJ and inputstream

oops, ignore that rogue return

void around(InputStream is): execution(* bar(..)) && args(is) {
    String l = readContents(is);
    ByteArrayInputStream bais = new ByteArrayInputStream(l.getBytes());
    proceed(bais);
}

just tried it and it worked for me.

2009/1/20 Andy Clement <[email protected]>:
> Your before() advice is simply assigning the advice local variable
> called 'is', it won't affect the advised location.  You could use
> around advice to do that.
>
> void around(InputStream is): execution(* bar(..)) && args(is) {
>  String l = readContents(is);
>  ByteArrayInputStream bais = new ByteArrayInputStream(l.getBytes());
>  return proceed(bais);
> }
>
> Andy.
>
> 2009/1/20 Al Aghili <[email protected]>:
>>
>>
>> Hi,
>> I'm having an issue trying to read an inputstream data in my aspect and
then
>> setting the input stream object to a new object. This doesn't work
>>
>> Here is the sample code
>>
>> public class AspectSampleMain {
>> public static void main(String[] args) {
>>                 // TODO Auto-generated method stub
>>                 String test = "hello world
>> askdjlasdkjaldkjasldkjalsdkjaslkdjalskjdslakjd dsjalkjd";
>>         ByteArrayInputStream bais = new
>> ByteArrayInputStream(test.getBytes());
>>         InputStream is = bais;
>>        bar(is);
>>
>> }
>> public static void bar(InputStream is){
>>         String l =  readContent(is);
>>                System.out.println(l); // l is blank this is wrong because
is
>> has been read.
>> }
>> }
>> Here is my aspect
>> public aspect AspectSample {
>>         pointcut sample(java.io.InputStream is):
>>     execution(* AspectSampleMain.bar( .. ))
>>     && args(is);
>>
>>     before (java.io.InputStream is):sample(is){
>>
>>     String l =  readContent(is);
>>              ByteArrayInputStream bais = new
>> ByteArrayInputStream(l.getBytes());
>>              is = bais;
>>
>>     }
>> }
>>
>> This does not work as the "is" does not get set to bais after the aspect
>> returns to the bar() code. So the input stream has been read and can't be
>> re-read again.
>>
>> How do I get around this.
>>
>> Thanks
>> Al
>>
>> _______________________________________________
>> aspectj-users mailing list
>> [email protected]
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
>
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to