[
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