2

LTW を使用して Weblogic で AspectJ を実行しようとしています。私のポイントカットは public コンストラクターとメソッド用であり、アドバイスは Before、AfterReturning、および AfterThrowing 用です。単純な「Hello World」jsp にアクセスすると、次のエラーが発生します。

javax.servlet.ServletException: Servlet class: 'jsp_servlet.__index' doesn't have a default constructor
        at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:315)
        at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:288)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
        Truncated. see log file for complete stacktrace

Root cause of ServletException.
java.lang.NoSuchMethodError: foo.aspect.DefaultAspect.aspectOf()Lfoo/aspect/DefaultAspect;
       at jsp_servlet.__index._jspService(__index.java:76)
       at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
       at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
       at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
       at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
       Truncated. see log file for complete stacktrace

ここに私の aop.xml ファイルがあります:

<aspectj>
    <aspects>
        <aspect name="foo.aspect.DefaultAspect" />
    </aspects>
    <weaver options="-verbose">
        <include within="foo.aspect.*" />
        <include within="jsp_servlet..*"/>
    </weaver>
</aspectj>         

ここに私のアスペクトファイルがあります:

package foo.aspect;

@Aspect
public class DefaultAspect  {

@Pointcut("execution(public *.new(..)) && !within(foo.aspect.*)")
public void pointCutNew(JoinPoint thisJoinPoint) {
}

@After("pointCutNew(thisJoinPoint)")
public void adviceForNew(JoinPoint thisJoinPoint) {
}
//Simiar pattern for other advices and pointcuts (for methods)
}

この側面は (通常の javac コンパイラを使用して) foo.jar にコンパイルされます。

以下を追加して Weblogic を実行しています。

java -javaagent:<path_to aspectweaver.jar> -Xbootclasspath/p:<path to {foo.jar, aspectweaver.jar}>

AspectJがDefaultAspectクラスで「aspectOf()」メソッドを作成できないため、これはクラスパス/クラスローダーの問題である可能性が最も高いと思います

助けてください。

4

2 に答える 2