From:
aspectj-dev-admin@xxxxxxxxxxx [mailto:aspectj-dev-admin@xxxxxxxxxxx] On Behalf Of Sascha Benkart
Sent: Sunday, February 08, 2004
4:22 AM
To: aspectj-dev@xxxxxxxxxxx
Subject: [aspectj-dev] Weaved code
is faulty
 
 
I'm using AspectJ 1.1.1 with webMethods Integration
Server
6.0.1 (IS,
eEnabling platform), running on Java 1.4.
 
After weaving a so called flow service (a Java class), I
can't run the flow service within the IS. First I didn't know what's wrong with
the code, because outside IS there is no problem to run AspectJ weaved code.
 
So I decompiled a class weaved by AspectJ. First lets have a
look at the source before weaving:
 
// Source code before using AspaectJ
 
import com.wm.app.b2b.server.ServiceException;
import com.wm.data.*;
 
public final class sandbox
{
 
 static sandbox _newInstance()
 {
  return new sandbox();
 }
 
 static sandbox _cast(Object o)
 {
  return (sandbox)o;
 }
 
 public static final void mergeDocToPipeline(IData
pipeline)
  throws ServiceException
 {
  IDataCursor pipelineCursor = pipeline.getCursor();
  IData document = IDataUtil.getIData(pipelineCursor,
"document");
  pipelineCursor.destroy();
  if(document != null)
   IDataUtil.append(document, pipeline);
 }
 
 static final sandbox _instance = new sandbox();
 
Method _newInstance and _cast are standard methods of a
IS class. Method mergeDocToPipeline defines a flow service and is not from
great interest of this problem.
 
Now, lets look at the decompiled class after WEAVING:
 
// Source code after using AspectJ
 
import com.wm.app.b2b.server.ServiceException;
import com.wm.data.*;
 
public final class sandbox
{
 
 static sandbox _newInstance()
 {
  MethodTracing.aspectOf().ajc$before$MethodTracing$1b3();
  new sandbox();
  break MISSING_BLOCK_LABEL_25;
  Throwable throwable;
  throwable;
  MethodTracing.aspectOf().ajc$after$MethodTracing$1fc();
  throw throwable;
  MethodTracing.aspectOf().ajc$after$MethodTracing$1fc();
  return;
  Exception exception;
  exception;
  MethodTracing.aspectOf().ajc$afterThrowing$MethodTracing$241(exception);
  throw exception;
 }
 
 static sandbox _cast(Object o)
 {
  MethodTracing.aspectOf().ajc$before$MethodTracing$1b3();
  (sandbox)o;
  break MISSING_BLOCK_LABEL_22;
  Throwable throwable;
  throwable;
  MethodTracing.aspectOf().ajc$after$MethodTracing$1fc();
  throw throwable;
  MethodTracing.aspectOf().ajc$after$MethodTracing$1fc();
  return;
  Exception exception;
  exception;
  MethodTracing.aspectOf().ajc$afterThrowing$MethodTracing$241(exception);
  throw exception;
 }
 
 public static final void mergeDocToPipeline(IData
pipeline)
  throws ServiceException
 {
  try
  {
   try
   {
    MethodTracing.aspectOf().ajc$before$MethodTracing$1b3();
    IDataCursor pipelineCursor = pipeline.getCursor();
    IData document = IDataUtil.getIData(pipelineCursor,
"document");
    pipelineCursor.destroy();
    if(document != null)
     IDataUtil.append(document, pipeline);
   }
   catch(Throwable throwable)
   {
    MethodTracing.aspectOf().ajc$after$MethodTracing$1fc();
    throw throwable;
   }
   MethodTracing.aspectOf().ajc$after$MethodTracing$1fc();
   return;
  }
  catch(Exception exception)
  {
   MethodTracing.aspectOf().ajc$afterThrowing$MethodTracing$241(exception);
   throw exception;
  }
 }
 
 static final sandbox _instance = new sandbox();
 
Looking again at methods _newInstance and _cast. Both
methods return nothing (See code return;)! I'm not sure if
this is a problem of the decompiler, so I decompiled the class not weaved
by AspectJ and it looks like the original former class.
 
Is it possible that AspectJ weaves classes with methods
_cast or _newInstance in a wrong way?