[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
RE: [aspectj-users] AspectJ and inputstream
|
Andy,
Thank you!! That did it.
Al
-----Original Message-----
From: aspectj-users-bounces@xxxxxxxxxxx
[mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Andy Clement
Sent: Tuesday, January 20, 2009 6:18 PM
To: aspectj-users@xxxxxxxxxxx
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 <andrew.clement@xxxxxxxxx>:
> 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 <aaghili@xxxxxxxxxxxxxxxxxx>:
>>
>>
>> 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
>> aspectj-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
>
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users