diff options
author | Raymond Auge | 2015-02-24 16:15:33 +0000 |
---|---|---|
committer | Raymond Auge | 2015-02-24 16:15:33 +0000 |
commit | 558f9bfb83cd91250e9267062eb726e523c52950 (patch) | |
tree | 78adbbb93108fc279a079606c4a8e87ce1736522 | |
parent | 1efa07b3c2a0f9ee7e842cf8a71f446a14b03fbd (diff) | |
download | rt.equinox.bundles-558f9bfb83cd91250e9267062eb726e523c52950.tar.gz rt.equinox.bundles-558f9bfb83cd91250e9267062eb726e523c52950.tar.xz rt.equinox.bundles-558f9bfb83cd91250e9267062eb726e523c52950.zip |
Bug 460718 - [http whiteboard] get Listener types from objectClass so that we don't accidentally invoke listeners of excluded types
2 files changed, 12 insertions, 10 deletions
diff --git a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java index 85ecf9e6b..d3933a03e 100644 --- a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java +++ b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ContextController.java @@ -322,8 +322,7 @@ public class ContextController { EventListener eventListener = listenerHolder.get(); - List<Class<? extends EventListener>> classes = getListenerClasses( - eventListener); + List<Class<? extends EventListener>> classes = getListenerClasses(listenerRef); if (classes.isEmpty()) { throw new IllegalArgumentException( @@ -986,27 +985,29 @@ public class ContextController { } private List<Class<? extends EventListener>> getListenerClasses( - EventListener eventListener) { + ServiceReference<EventListener> serviceReference) { + + List<String> objectClassList = StringPlus.from(serviceReference.getProperty(Constants.OBJECTCLASS)); List<Class<? extends EventListener>> classes = new ArrayList<Class<? extends EventListener>>(); - if (ServletContextListener.class.isInstance(eventListener)) { + if (objectClassList.contains(ServletContextListener.class.getName())) { classes.add(ServletContextListener.class); } - if (ServletContextAttributeListener.class.isInstance(eventListener)) { + if (objectClassList.contains(ServletContextAttributeListener.class.getName())) { classes.add(ServletContextAttributeListener.class); } - if (ServletRequestListener.class.isInstance(eventListener)) { + if (objectClassList.contains(ServletRequestListener.class.getName())) { classes.add(ServletRequestListener.class); } - if (ServletRequestAttributeListener.class.isInstance(eventListener)) { + if (objectClassList.contains(ServletRequestAttributeListener.class.getName())) { classes.add(ServletRequestAttributeListener.class); } - if (HttpSessionListener.class.isInstance(eventListener)) { + if (objectClassList.contains(HttpSessionListener.class.getName())) { classes.add(HttpSessionListener.class); } - if (HttpSessionAttributeListener.class.isInstance(eventListener)) { + if (objectClassList.contains(HttpSessionAttributeListener.class.getName())) { classes.add(HttpSessionAttributeListener.class); } diff --git a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/customizer/ContextListenerTrackerCustomizer.java b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/customizer/ContextListenerTrackerCustomizer.java index 273d19b9a..a24729868 100644 --- a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/customizer/ContextListenerTrackerCustomizer.java +++ b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/customizer/ContextListenerTrackerCustomizer.java @@ -108,7 +108,8 @@ public class ContextListenerTrackerCustomizer failedListenerDTO.failureReason = failureReason; failedListenerDTO.serviceId = (Long)serviceReference.getProperty(Constants.SERVICE_ID); failedListenerDTO.servletContextId = contextController.getServiceId(); - failedListenerDTO.types = new String[0]; + failedListenerDTO.types = StringPlus.from( + serviceReference.getProperty(Constants.OBJECTCLASS)).toArray(new String[0]); contextController.getHttpServiceRuntime().recordFailedListenerDTO(serviceReference, failedListenerDTO); } |