2011-02-25 3 views
0
  1. I가 aspectjrt-1.5.4.jar, aspectjweaver-1.6.1.jar,는 org.springframework.aop-3.0.5.RELEASE.jar 빈 화면 응답 내 응용 프로그램 클래스 경로.봄, @Aspect, @AfterThrowing에서

  2. 내 applicationContext.xml은 내가 logException 포인트 컷을 언급하면 ​​내 LoggerAspect.java이

    @Aspect 
    public class LoggerAspect 
    { 
    
        @Before("execution(* com.company..*(..)) and !execution(* com.company.*.action..*(..))") 
        public void logEntry(JoinPoint joinPoint) 
        { 
         Logger logger = Logger.getLogger(joinPoint.getTarget().getClass()); 
         String className = joinPoint.getTarget().getClass().getCanonicalName(); 
         logger.debug(className + " :: " + joinPoint.getSignature().getName() + " :: " + "Entry"); 
        } 
    
        @AfterReturning("execution(* com.company..*(..)) and !execution(* com.company.*.action..*(..))") 
        public void logExit(JoinPoint joinPoint) 
        { 
         Logger logger = Logger.getLogger(joinPoint.getTarget().getClass()); 
         String className = joinPoint.getTarget().getClass().getCanonicalName(); 
         logger.debug(className + " :: " + joinPoint.getSignature().getName() + " :: " + "Exit"); 
        } 
    
    
        @AfterThrowing(pointcut = "execution(* com.company..*(..))", throwing = "throwable") 
         public void logException(Throwable throwable) 
        { 
         System.out.println(throwable.getMessage()); 
        } 
    
    } 
    
  3. 을 포함, 다른 모든 잘 작동

    <aop:aspectj-autoproxy/> 
    <bean id="loggerAspect" class="com.company.logging.LoggerAspect" /> 
    
  4. 이 포함되어 있습니다. 그리고 시작 및 종료 로그가 생성됩니다. 그러나 주석 처리를 제거하면 아래 예외가 발생합니다.

  5. 나는

java.lang.NullPointerException이 org.apache.struts2.convention.ConventionUnknownHandler.handleUnknownActionMethod (ConventionUnknownHandler.java:412) com.opensymphony.xwork2 같은 오류를 얻고있다 .DefaultUnknownHandlerManager.handleUnknownMethod (DefaultUnknownHandlerManager.java:102) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction (DefaultActionInvocation.java:439) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly (DefaultActionI nvocation.java:291) com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:254) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept (ConversionErrorInterceptor.java:133) com.opensymphony.xwork2.DefaultActionInvocation .invoke (DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept (ParametersInterceptor.java:207) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept (MethodFilterInterceptor.java:98) 닷컴. opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept (ParametersInterceptor.java:207) com.opensymphony.xwork2. interceptor.MethodFilterInterceptor.intercept (MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) org.apache.struts2.interceptor.MultiselectInterceptor.intercept (MultiselectInterceptor.java:75) 닷컴 (DefaultActionInvocation.java : 248)) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept (PrepareInterceptor.java:166) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept (MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept (ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java : 248) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept (ExceptionMappingInterceptor.java:187) com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) org.apache.struts2.impl.StrutsActionProxy.execute (StrutsActionProxy.java : 52) org.apache.struts2.dispatcher.Dispatcher.serviceAction (Dispatcher.java:485) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction (ExecuteOperations.java:77) org.apache.struts2 .dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter (StrutsPrepareAndExecuteFilter.java:91) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:368) org.springframework.security.web.access.intercept .FilterSecurityInterceptor.invoke (FilterSecurityInterceptor.java:109) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter (FilterSecurityInterceptor.java:83) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (의 FilterChainProxy .java : 380)(FilterChainProxy.java:380) org.springframework.security.web .session.SessionManagementFilter.doFilter (SessionManagementFilter.java:100) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter (AnonymousAuthenticationFilter .java : 78) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter (SecurityContextHolderAware RequestFilter.java:54) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter (RequestCacheAwareFilter.java:35) 조직 .springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter (BasicAuthenticationFilter.java:177) org.springframework.security.web .FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter (AbstractAuthenticationProcessingFilter.java:187) org.springframework.security.web.FilterChain 프록시 $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.authentication.logout.LogoutFilter.doFilter (LogoutFilter.java:105) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter FilterChainProxy.java:380) org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter (SecurityContextPersistenceFilter.java:79) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) 조직 .springframework.security.web.session.ConcurrentSessionFilter.doFilter (ConcurrentSessionFilter.java:109) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.FilterChainProxy .doF ilter (FilterChainProxy.java:169) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate (DelegatingFilterProxy.java:237) org.springframework.web.filter.DelegatingFilterProxy.doFilter (DelegatingFilterProxy.java:167)

6. 내가 aspectjweaver-1.6.10.jar 사용을 다음과 같이 변경

  • 는 않았다. 그리고 두 개의 오래된 항아리를 제거했습니다.
  • 올렉이 제안한대로 변경했습니다. (그것은 실제로 내 부분에 어리석은 실수였습니다). 위의 logException 메서드를 사용중인 최신 버전으로 업데이트했습니다.

위의 특정 오류가 더 이상 표시되지 않습니다. 그러나 이제 응용 프로그램의 첫 struts 동작 (home.action)이 호출 되 자마자 응답은 빈 화면이됩니다.

내 logException 메소드에 pointcut = "실행 (* com.company1 .. (..))" 이있는 경우 company1은 내 프로젝트의 유효한 패키지가 아니므로 정상적으로 작동합니다. 내가 포인트 컷 =로있는 경우 는 그러나 "실행 ( com.company .. * (..))"회사 내 프로젝트의 유효한 패키지 , 내가 모든 스트럿 액션

+0

내 게시물을 올바르게 포맷 해 주셔서 감사합니다. 최선을 다했지만 몇 가지 코드 서식을 사용하여 올바르게 처리하지 못했습니다. – Darshan

답변

0

스프링 빈이 아닌 Struts 액션에 조언을 적용하려고했습니다. 나는 아래의 방법을 수정했고 작동하기 시작했다. 그 항상 나쁜 생각이 * com.company..*(..)를 사용하는 경우를 염두에두고 위를 유지

@AfterThrowing(pointcut = "execution(* com.company..*(..)) and !execution(* com.company.*.action..*(..))", throwing = "throwable") 
public void logException(JoinPoint joinPoint,Throwable throwable) 
{ 
    Logger logger = Logger.getLogger(joinPoint.getTarget().getClass()); 
    String className = joinPoint.getTarget().getClass().getCanonicalName(); 
    logger.error(className + " :: " + joinPoint.getSignature().getName() + " :: " + "Exception", throwable); 
} 

, 나는 궁금하다. 서비스, 비즈니스, 데이터 액세스 등과 같은 특정 패키지에 적용하여 구체적으로 유지하십시오.

0

로 빈 응답을 나는 포인트 컷의 정확한 정의를 알고까지로해야 던지는 당신이 방법 자체 (이 경우 예외)에 결합하고 매개 변수의 이름을 포함해야한다는이

@AfterThrowing(pointcut = "execution(* com.company..*(..))", throwing = "exception") 
public void logException(Throwable exception) 
{ 
    System.out.println(exception.getMessage()); 
} 

지불하시기 바랍니다 관심 것 같습니다.

예외와 어떻게 관련이 있는지 알지 못하는데 근본 원인이 될 수 있습니다.

+0

제공된 제안을 시도하고 업데이트로 1 시간 정도 후에 돌아올 것입니다. – Darshan

1

"aspectjrt-1.5.4.jar가 있습니다. aspectjweaver-1.6.1.jar"이 문제가 될 수 있습니다. 잠재적으로 서로 호환되지 않는 것 외에도 매우 오래된 버전입니다. 1.6.10 버전의 aspectjweaver로 업그레이드하고 aspectjrt - aspectjweaver를 삭제하면 이미 모든 클래스가 포함됩니다.

+0

스택 오버 플로우가 점점 좋아지고 있습니다. 제 말은 Ramnivas Laddad와 같은 누군가가 AspectJ에 대한 첫 번째 질문에 대답한다면, 당신이 무엇을 요구할 수 있는지 말입니다. – Darshan