Caros colegas;
Estou iniciando Programação Orientada a Aspectos com AspectJ.
Desenvolvi uma simples aplicação web que vou ilustrar abaixo:
[size=18]CÓDIGO DO SERVLET[/size]
[code]public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FirstServlet() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request,response);
}
private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//recebe a requisição
String strNome ="testeNome";
String strObs ="testeObs";
strNome = request.getParameter("nome").toString();
strObs = request.getParameter("obs").toString();
System.out.println("SERVLET -- nome " + strNome + " obs " + strObs);
request.setAttribute("nome", strNome);
request.setAttribute("obs", strObs);
RequestDispatcher view = request.getRequestDispatcher("frmExibe.jsp");
view.forward(request, response);
//salva em um banco de dados
//exibe em uma nova página o que foi salvo
}
}
[/code]
[size=18]CÓDIGO DO ASPECTO[/size]
[code]package myaspects;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public aspect XSSAspect {
@Override
pointcut p1() : execution (* .FirstServlet.process(…));
void around(HttpServletRequest request, HttpServletResponse response) : p1() && args(request,response){
String strReq = request.getParameter("obs");
strReq = strReq.replace("<script>", "");
strReq = strReq.replace("</script>", "");
strReq = strReq.replace("script", "");
strReq = strReq.replace("\\", "");
strReq = strReq.replace("/", "");
strReq = strReq.replace("<","");
strReq = strReq.replace(">","");
strReq = strReq.replace("'java'","");
System.out.println("executou aspecto");
proceed(request,response);
}
}
[/code]
O que deveria ocorrer seria o aspecto interceptar a chamada do método [processRequest] do servlet. Como é um aspecto do tipo AROUND ele substitui a execução do método [processRequest], porém estou obtendo o seguinte erro:
[size=18]ERRO NO CONSOLE:[/size]
18/06/2009 10:56:11 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet FirstServlet
java.lang.ClassNotFoundException: org.aspectj.runtime.internal.AroundClosure
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getDeclaredMethods(Unknown Source)
at org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:162)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1119)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:808)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
[size=18]RETORNO EM UMA PÁGINA HTML[/size]
[code]HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Error instantiating servlet class myservlet.FirstServlet
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Unknown Source)
root cause
java.lang.NoClassDefFoundError: org/aspectj/runtime/internal/AroundClosure
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Unknown Source)
java.lang.Class.getDeclaredMethods(Unknown Source)
org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:162)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Unknown Source)
root cause
java.lang.ClassNotFoundException: org.aspectj.runtime.internal.AroundClosure
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
java.lang.ClassLoader.loadClassInternal(Unknown Source)
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Unknown Source)
java.lang.Class.getDeclaredMethods(Unknown Source)
org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:162)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Unknown Source)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.
Apache Tomcat/6.0.18
[/code]
[size=18]VERSÕES DAS PLATAFORMAS[/size]
- Eclipse Ganymede
- Eclipse AspectJ Development Tools
Version: 1.6.4.20090313172428
AspectJ version: 1.6.4.20090304172355
© Copyright IBM Corp. and others 2000, 2006. All rights reserved.
Visit http://www.eclipse.org/ajdt
Alguém poderia me ajudar?