[
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