public TestAdvisor() { super(new SimpleTraceInterceptor()); } }
@Override protected Object invokeUnderTrace(MethodInvocation invocation, Log logger) throws Throwable { String invocationDescription = getInvocationDescription(invocation); writeToLog(logger, "Entering " + invocationDescription); try { Object rval = invocation.proceed(); writeToLog(logger, "Exiting " + invocationDescription); return rval; } catch (Throwable ex) { writeToLog(logger, "Exception thrown in " + invocationDescription, ex); throw ex; } }
@Override public Object invoke(MethodInvocation invocation) throws Throwable { synchronized (this) { this.count++; } return super.invoke(invocation); }
@Test public void testSunnyDayPathLogsCorrectly() throws Throwable { MethodInvocation mi = mock(MethodInvocation.class); given(mi.getMethod()).willReturn(String.class.getMethod("toString")); given(mi.getThis()).willReturn(this); Log log = mock(Log.class); SimpleTraceInterceptor interceptor = new SimpleTraceInterceptor(true); interceptor.invokeUnderTrace(mi, log); verify(log, times(2)).trace(anyString()); }
/** * Create a new SimpleTraceInterceptor with dynamic or static logger, * according to the given flag. * @param useDynamicLogger whether to use a dynamic logger or a static logger * @see #setUseDynamicLogger */ public SimpleTraceInterceptor(boolean useDynamicLogger) { setUseDynamicLogger(useDynamicLogger); }
protected Object invokeUnderTrace(MethodInvocation invocation, Log logger) throws Throwable { String invocationDescription = getInvocationDescription(invocation); logger.trace("Entering " + invocationDescription); try { Object rval = invocation.proceed(); logger.trace("Exiting " + invocationDescription); return rval; } catch (Throwable ex) { logger.trace("Exception thrown in " + invocationDescription, ex); throw ex; } }
@Test public void testExceptionPathStillLogsCorrectly() throws Throwable { MethodInvocation mi = mock(MethodInvocation.class); given(mi.getMethod()).willReturn(String.class.getMethod("toString")); given(mi.getThis()).willReturn(this); IllegalArgumentException exception = new IllegalArgumentException(); given(mi.proceed()).willThrow(exception); Log log = mock(Log.class); final SimpleTraceInterceptor interceptor = new SimpleTraceInterceptor(true); try { interceptor.invokeUnderTrace(mi, log); fail("Must have propagated the IllegalArgumentException."); } catch (IllegalArgumentException expected) { } verify(log).trace(anyString()); verify(log).trace(anyString(), eq(exception)); }
/** * Create a new SimpleTraceInterceptor with dynamic or static logger, * according to the given flag. * @param useDynamicLogger whether to use a dynamic logger or a static logger * @see #setUseDynamicLogger */ public SimpleTraceInterceptor(boolean useDynamicLogger) { setUseDynamicLogger(useDynamicLogger); }
public ControllerAdvisor() { super(getControllerPointcut(), new SimpleTraceInterceptor()); }
@Override protected Object invokeUnderTrace(MethodInvocation invocation, Log logger) throws Throwable { String invocationDescription = getInvocationDescription(invocation); writeToLog(logger, "Entering " + invocationDescription); try { Object rval = invocation.proceed(); writeToLog(logger, "Exiting " + invocationDescription); return rval; } catch (Throwable ex) { writeToLog(logger, "Exception thrown in " + invocationDescription, ex); throw ex; } }
/** * Create a new SimpleTraceInterceptor with dynamic or static logger, * according to the given flag. * @param useDynamicLogger whether to use a dynamic logger or a static logger * @see #setUseDynamicLogger */ public SimpleTraceInterceptor(boolean useDynamicLogger) { setUseDynamicLogger(useDynamicLogger); }
public Object invoke(MethodInvocation invocation) throws Throwable { this.count++; return super.invoke(invocation); }
@Override protected WebApplicationContext createWebApplicationContext(@Nullable WebApplicationContext parent) { GenericWebApplicationContext wac = new GenericWebApplicationContext(); wac.registerBeanDefinition("controller", new RootBeanDefinition(controllerclass)); DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); autoProxyCreator.setBeanFactory(wac.getBeanFactory()); wac.getBeanFactory().addBeanPostProcessor(autoProxyCreator); wac.getBeanFactory().registerSingleton("advisor", new DefaultPointcutAdvisor(new SimpleTraceInterceptor(true))); wac.refresh(); return wac; } };
@Override protected Object invokeUnderTrace(MethodInvocation invocation, Log logger) throws Throwable { String invocationDescription = getInvocationDescription(invocation); writeToLog(logger, "Entering " + invocationDescription); try { Object rval = invocation.proceed(); writeToLog(logger, "Exiting " + invocationDescription); return rval; } catch (Throwable ex) { writeToLog(logger, "Exception thrown in " + invocationDescription, ex); throw ex; } }
/** * Create a new SimpleTraceInterceptor with dynamic or static logger, * according to the given flag. * @param useDynamicLogger whether to use a dynamic logger or a static logger * @see #setUseDynamicLogger */ public SimpleTraceInterceptor(boolean useDynamicLogger) { setUseDynamicLogger(useDynamicLogger); }
@Override public Object invoke(MethodInvocation invocation) throws Throwable { synchronized (this) { this.count++; } return super.invoke(invocation); }
@Override protected WebApplicationContext createWebApplicationContext(@Nullable WebApplicationContext parent) { GenericWebApplicationContext wac = new GenericWebApplicationContext(); wac.registerBeanDefinition("controller", new RootBeanDefinition(controllerClass)); DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); autoProxyCreator.setProxyTargetClass(true); autoProxyCreator.setBeanFactory(wac.getBeanFactory()); wac.getBeanFactory().addBeanPostProcessor(autoProxyCreator); Pointcut pointcut = new AnnotationMatchingPointcut(Controller.class); DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(pointcut, new SimpleTraceInterceptor(true)); wac.getBeanFactory().registerSingleton("advisor", advisor); wac.refresh(); return wac; } };
@Override public Object invoke(MethodInvocation invocation) throws Throwable { synchronized (this) { this.count++; } return super.invoke(invocation); }
@SuppressWarnings("rawtypes") @Test public void sessionAttributeExposureWithInterface() throws Exception { initServlet(wac -> { wac.registerBeanDefinition("viewResolver", new RootBeanDefinition(ModelExposingViewResolver.class)); DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); autoProxyCreator.setBeanFactory(wac.getBeanFactory()); wac.getBeanFactory().addBeanPostProcessor(autoProxyCreator); wac.getBeanFactory().registerSingleton("advisor", new DefaultPointcutAdvisor(new SimpleTraceInterceptor())); }, MySessionAttributesControllerImpl.class); MockHttpServletRequest request = new MockHttpServletRequest("GET", "/myPage"); MockHttpServletResponse response = new MockHttpServletResponse(); getServlet().service(request, response); assertEquals("page1", request.getAttribute("viewName")); HttpSession session = request.getSession(); assertTrue(session.getAttribute("object1") != null); assertTrue(session.getAttribute("object2") != null); assertTrue(((Map) session.getAttribute("model")).containsKey("object1")); assertTrue(((Map) session.getAttribute("model")).containsKey("object2")); request = new MockHttpServletRequest("POST", "/myPage"); request.setSession(session); response = new MockHttpServletResponse(); getServlet().service(request, response); assertEquals("page2", request.getAttribute("viewName")); assertTrue(session.getAttribute("object1") != null); assertTrue(session.getAttribute("object2") != null); assertTrue(((Map) session.getAttribute("model")).containsKey("object1")); assertTrue(((Map) session.getAttribute("model")).containsKey("object2")); }
@Test public void proxiedFormController() throws Exception { initServlet(wac -> { wac.registerBeanDefinition("viewResolver", new RootBeanDefinition(TestViewResolver.class)); DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); autoProxyCreator.setBeanFactory(wac.getBeanFactory()); wac.getBeanFactory().addBeanPostProcessor(autoProxyCreator); wac.getBeanFactory() .registerSingleton("advisor", new DefaultPointcutAdvisor(new SimpleTraceInterceptor())); }, MyFormController.class); MockHttpServletRequest request = new MockHttpServletRequest("GET", "/myPath.do"); request.addParameter("name", "name1"); request.addParameter("age", "value2"); MockHttpServletResponse response = new MockHttpServletResponse(); getServlet().service(request, response); assertEquals("myView-name1-typeMismatch-tb1-myValue", response.getContentAsString()); }