Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-dev] Weaved code is faulty

Hi,
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
{
 
 public 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
{
 
 public 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?
 
Regards,
bux
 
 
 

Back to the top