// // ======================================================================== // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. // // The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php // // You may elect to redistribute this code under either of these licenses. // ======================================================================== // package com.acme.test; import java.util.EventListener; import javax.annotation.Resource; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.ServletRequestAttributeEvent; import javax.servlet.ServletRequestAttributeListener; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionIdListener; import javax.servlet.http.HttpSessionListener; @com.acme.initializer.Foo(1) @WebListener public class TestListener implements HttpSessionListener, HttpSessionAttributeListener, HttpSessionActivationListener, ServletContextListener, ServletContextAttributeListener, ServletRequestListener, ServletRequestAttributeListener { public static class NaughtyServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { throw new IllegalStateException("Should not call NaughtServletContextListener.contextInitialized"); } @Override public void contextDestroyed(ServletContextEvent sce) { throw new IllegalStateException("Should not call NaughtServletContextListener.contextDestroyed"); } } public static class InvalidListener implements EventListener { public InvalidListener() {} } public static class ValidListener implements HttpSessionIdListener { @Resource(mappedName="maxAmount") private Double maxAmount; public ValidListener() {} @Override public void sessionIdChanged(HttpSessionEvent event, String oldSessionId) { } } @Resource(mappedName="maxAmount") private Double maxAmount; public void attributeAdded(HttpSessionBindingEvent se) { // System.err.println("attributedAdded "+se); } public void attributeRemoved(HttpSessionBindingEvent se) { // System.err.println("attributeRemoved "+se); } public void attributeReplaced(HttpSessionBindingEvent se) { // System.err.println("attributeReplaced "+se); } public void sessionWillPassivate(HttpSessionEvent se) { // System.err.println("sessionWillPassivate "+se); } public void sessionDidActivate(HttpSessionEvent se) { // System.err.println("sessionDidActivate "+se); } public void contextInitialized(ServletContextEvent sce) { sce.getServletContext().setAttribute("com.acme.AnnotationTest.sclInjectTest", Boolean.valueOf(maxAmount != null)); //Can't add a ServletContextListener from a ServletContextListener even if it is declared in web.xml try { sce.getServletContext().addListener(new NaughtyServletContextListener()); sce.getServletContext().setAttribute("com.acme.AnnotationTest.sclFromSclRegoTest", Boolean.FALSE); } catch (IllegalArgumentException e) { sce.getServletContext().setAttribute("com.acme.AnnotationTest.sclFromSclRegoTest", Boolean.TRUE); } catch (Exception e) { sce.getServletContext().setAttribute("com.acme.AnnotationTest.sclFromSclRegoTest", Boolean.FALSE); } //Can't add an EventListener not part of the specified list for addListener() try { sce.getServletContext().addListener(new InvalidListener()); sce.getServletContext().setAttribute("com.acme.AnnotationTest.invalidListenerRegoTest", Boolean.FALSE); } catch (IllegalArgumentException e) { sce.getServletContext().setAttribute("com.acme.AnnotationTest.invalidListenerRegoTest", Boolean.TRUE); } catch (Exception e) { sce.getServletContext().setAttribute("com.acme.AnnotationTest.invalidListenerRegoTest", Boolean.FALSE); } //Programmatically add a listener and make sure its injected try { ValidListener l = sce.getServletContext().createListener(ValidListener.class); sce.getServletContext().setAttribute("com.acme.AnnotationTest.programListenerInjectTest", Boolean.valueOf(l != null && l.maxAmount != null)); } catch (Exception e) { sce.getServletContext().setAttribute("com.acme.AnnotationTest.programListenerInjectTest", Boolean.FALSE); } } public void contextDestroyed(ServletContextEvent sce) { // System.err.println("contextDestroyed "+sce); } public void attributeAdded(ServletContextAttributeEvent scab) { // System.err.println("attributeAdded "+scab); } public void attributeRemoved(ServletContextAttributeEvent scab) { // System.err.println("attributeRemoved "+scab); } public void attributeReplaced(ServletContextAttributeEvent scab) { // System.err.println("attributeReplaced "+scab); } public void requestDestroyed(ServletRequestEvent sre) { // System.err.println("requestDestroyed "+sre); } public void requestInitialized(ServletRequestEvent sre) { // System.err.println("requestInitialized "+sre); } public void attributeAdded(ServletRequestAttributeEvent srae) { // System.err.println("attributeAdded "+srae); } public void attributeRemoved(ServletRequestAttributeEvent srae) { // System.err.println("attributeRemoved "+srae); } public void attributeReplaced(ServletRequestAttributeEvent srae) { // System.err.println("attributeReplaced "+srae); } public void sessionCreated(HttpSessionEvent se) { // System.err.println("sessionCreated "+se); } public void sessionDestroyed(HttpSessionEvent se) { // System.err.println("sessionDestroyed "+se); } public void requestCompleted(ServletRequestEvent rre) { // TODO Auto-generated method stub } public void requestResumed(ServletRequestEvent rre) { // TODO Auto-generated method stub } public void requestSuspended(ServletRequestEvent rre) { // TODO Auto-generated method stub } }