Hi,

I'm trying to save information from several pointcut. More precise: I try to
catch method call that eventually will match some conditions, write it to a
class called DetailedSignature implements Serializable and save that
information in one place. 

As far as I - as aspectJ-newbie  - understood, I cannot open a file for the
whole life of an aspect, as there is no constructor. Therefore I tried to
use an ObjectOutputStream like this:

                pointcut methodWithReturnValue() : (execution(!void
*.*(..))&&(!within(org.test.serversimulation.DetailedSignature))
&&(!within(org.test.serversimulation.SignatureCracker)) 
&&(!within(junit.*))); 

                             after() returning(Object o) : 
methodWithReturnValue() { 
                                 
                                 try {
                                        File testDataFile = new 
File("serializedTest.data");
                                        FileOutputStream fout = new 
FileOutputStream(testDataFile,
true);
                                        ObjectOutputStream oos = new 
ObjectOutputStream(fout);
                                        oos.writeObject(detailedSignature);
                                        oos.flush();
                                        oos.close();
                                        
                                        System.out.println("wrote 
detailedSignature
"+detailedSignature.toString());
                                        }
                                     catch (Exception e) { e.printStackTrace(); 
}
}

The program runs fine and I actually can see the data I want in the file.
But when I try to read it, I get the exception:

java.io.StreamCorruptedException: invalid type code: AC

Now I searched and found that this always seems to happen when trying to
append to an ObjectOutputStream multiple times
(http://forums.sun.com/thread.jspa?threadID=5177084) 

Now I'm a bit at a loss. I was thinking of trying to write kind of
bruteforce the information to a text file and based on that read and
recreate the object manually, but that is certainly not very flexible. 

Does anyone know a way how to keep the outputstream open and pass it to
several matches of the pointcut? 
Or would you know a more elegant strategy of saving objects from within
several matches of a pointcut?

Thanks for help

Mark




(start of the file with captured method

¬í sr +org.test.serversimulation.DetailedSignature˜Ë±W„çÅ 
Z isLiteralValueL allmodifierst Ljava/lang/String;L
callingobjectClassnameq ~ L callingobjectMethodNameq ~ L
callingobjectPackageq ~ L callingobjectPackageAndClassq ~ L
callingobjectParametersq ~ L  modifierst Ljava/util/ArrayList;L 
parametersq ~ L returnValueClassq ~ L returnValuePackageq ~ L
returnValuePackageAndClassq ~ L signatureLongStringq ~ 
... all methods catched appear in the file.

-- 
View this message in context: 
http://www.nabble.com/Saving-information-from-several-pointcuts-to-an-ObjectOutputStream-tp22111630p22111630.html
Sent from the AspectJ - users mailing list archive at Nabble.com.

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

Reply via email to