407708 - HttpUpgradeHandler must support injection
This commit is contained in:
parent
215d2e2095
commit
73bee3af4b
|
@ -18,19 +18,11 @@
|
||||||
|
|
||||||
package org.eclipse.jetty.annotations;
|
package org.eclipse.jetty.annotations;
|
||||||
|
|
||||||
import java.util.EventListener;
|
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
|
||||||
import javax.servlet.Servlet;
|
|
||||||
import javax.servlet.ServletException;
|
|
||||||
|
|
||||||
import org.eclipse.jetty.servlet.FilterHolder;
|
|
||||||
import org.eclipse.jetty.servlet.ServletContextHandler.Decorator;
|
import org.eclipse.jetty.servlet.ServletContextHandler.Decorator;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
|
||||||
import org.eclipse.jetty.webapp.WebAppContext;
|
import org.eclipse.jetty.webapp.WebAppContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WebAppDecoratorWrapper
|
* AnnotationDecorator
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -53,99 +45,6 @@ public class AnnotationDecorator implements Decorator
|
||||||
_introspector.registerHandler(new ServletSecurityAnnotationHandler(context));
|
_introspector.registerHandler(new ServletSecurityAnnotationHandler(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @param filter
|
|
||||||
* @throws ServletException
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateFilterHolder(org.eclipse.jetty.servlet.FilterHolder)
|
|
||||||
*/
|
|
||||||
public void decorateFilterHolder(FilterHolder filter) throws ServletException
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @param <T>
|
|
||||||
* @param filter
|
|
||||||
* @return the decorated filter
|
|
||||||
* @throws ServletException
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateFilterInstance(javax.servlet.Filter)
|
|
||||||
*/
|
|
||||||
public <T extends Filter> T decorateFilterInstance(T filter) throws ServletException
|
|
||||||
{
|
|
||||||
introspect(filter);
|
|
||||||
return filter;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @param <T>
|
|
||||||
* @param listener
|
|
||||||
* @return the decorated event listener instance
|
|
||||||
* @throws ServletException
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateListenerInstance(java.util.EventListener)
|
|
||||||
*/
|
|
||||||
public <T extends EventListener> T decorateListenerInstance(T listener) throws ServletException
|
|
||||||
{
|
|
||||||
introspect(listener);
|
|
||||||
return listener;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @param servlet
|
|
||||||
* @throws ServletException
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateServletHolder(org.eclipse.jetty.servlet.ServletHolder)
|
|
||||||
*/
|
|
||||||
public void decorateServletHolder(ServletHolder servlet) throws ServletException
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @param <T>
|
|
||||||
* @param servlet
|
|
||||||
* @return the decorated servlet instance
|
|
||||||
* @throws ServletException
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateServletInstance(javax.servlet.Servlet)
|
|
||||||
*/
|
|
||||||
public <T extends Servlet> T decorateServletInstance(T servlet) throws ServletException
|
|
||||||
{
|
|
||||||
introspect(servlet);
|
|
||||||
return servlet;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @param f
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyFilterInstance(javax.servlet.Filter)
|
|
||||||
*/
|
|
||||||
public void destroyFilterInstance(Filter f)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @param s
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyServletInstance(javax.servlet.Servlet)
|
|
||||||
*/
|
|
||||||
public void destroyServletInstance(Servlet s)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @param f
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyListenerInstance(java.util.EventListener)
|
|
||||||
*/
|
|
||||||
public void destroyListenerInstance(EventListener f)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Look for annotations that can be discovered with introspection:
|
* Look for annotations that can be discovered with introspection:
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -161,4 +60,17 @@ public class AnnotationDecorator implements Decorator
|
||||||
{
|
{
|
||||||
_introspector.introspect(o.getClass());
|
_introspector.introspect(o.getClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object decorate(Object o)
|
||||||
|
{
|
||||||
|
introspect(o);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy(Object o)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class PostConstructAnnotationHandler extends AbstractIntrospectableAnnota
|
||||||
public void doHandle(Class clazz)
|
public void doHandle(Class clazz)
|
||||||
{
|
{
|
||||||
//Check that the PostConstruct is on a class that we're interested in
|
//Check that the PostConstruct is on a class that we're interested in
|
||||||
if (Util.isServletType(clazz))
|
if (Util.supportsPostConstructPreDestroy(clazz))
|
||||||
{
|
{
|
||||||
Method[] methods = clazz.getDeclaredMethods();
|
Method[] methods = clazz.getDeclaredMethods();
|
||||||
for (int i=0; i<methods.length; i++)
|
for (int i=0; i<methods.length; i++)
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class PreDestroyAnnotationHandler extends AbstractIntrospectableAnnotatio
|
||||||
public void doHandle(Class clazz)
|
public void doHandle(Class clazz)
|
||||||
{
|
{
|
||||||
//Check that the PreDestroy is on a class that we're interested in
|
//Check that the PreDestroy is on a class that we're interested in
|
||||||
if (Util.isServletType(clazz))
|
if (Util.supportsPostConstructPreDestroy(clazz))
|
||||||
{
|
{
|
||||||
Method[] methods = clazz.getDeclaredMethods();
|
Method[] methods = clazz.getDeclaredMethods();
|
||||||
for (int i=0; i<methods.length; i++)
|
for (int i=0; i<methods.length; i++)
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class ResourceAnnotationHandler extends AbstractIntrospectableAnnotationH
|
||||||
*/
|
*/
|
||||||
public void doHandle(Class<?> clazz)
|
public void doHandle(Class<?> clazz)
|
||||||
{
|
{
|
||||||
if (Util.isServletType(clazz))
|
if (Util.supportsResourceInjection(clazz))
|
||||||
{
|
{
|
||||||
handleClass(clazz);
|
handleClass(clazz);
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,42 @@ public class Util
|
||||||
return isServlet;
|
return isServlet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean supportsResourceInjection (Class c)
|
||||||
|
{
|
||||||
|
if (javax.servlet.Servlet.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.Filter.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.ServletContextListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.ServletRequestListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.http.HttpSessionListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.AsyncListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.http.HttpUpgradeHandler.class.isAssignableFrom(null))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean supportsPostConstructPreDestroy (Class c)
|
||||||
|
{
|
||||||
|
if (javax.servlet.Servlet.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.Filter.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.ServletContextListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.ServletRequestListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.http.HttpSessionListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.AsyncListener.class.isAssignableFrom(c) ||
|
||||||
|
javax.servlet.http.HttpUpgradeHandler.class.isAssignableFrom(null))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isEnvEntryType (Class type)
|
public static boolean isEnvEntryType (Class type)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
|
|
|
@ -18,8 +18,6 @@
|
||||||
|
|
||||||
package org.eclipse.jetty.plus.annotation;
|
package org.eclipse.jetty.plus.annotation;
|
||||||
|
|
||||||
import javax.servlet.ServletException;
|
|
||||||
|
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -57,8 +55,10 @@ public class RunAs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param holder
|
||||||
|
*/
|
||||||
public void setRunAs (ServletHolder holder)
|
public void setRunAs (ServletHolder holder)
|
||||||
throws ServletException
|
|
||||||
{
|
{
|
||||||
if (holder == null)
|
if (holder == null)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -52,7 +52,6 @@ public class RunAsCollection
|
||||||
}
|
}
|
||||||
|
|
||||||
public RunAs getRunAs (Object o)
|
public RunAs getRunAs (Object o)
|
||||||
throws ServletException
|
|
||||||
{
|
{
|
||||||
if (o==null)
|
if (o==null)
|
||||||
return null;
|
return null;
|
||||||
|
@ -61,7 +60,6 @@ public class RunAsCollection
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRunAs(Object o)
|
public void setRunAs(Object o)
|
||||||
throws ServletException
|
|
||||||
{
|
{
|
||||||
if (o == null)
|
if (o == null)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -18,24 +18,18 @@
|
||||||
|
|
||||||
package org.eclipse.jetty.plus.webapp;
|
package org.eclipse.jetty.plus.webapp;
|
||||||
|
|
||||||
import java.util.EventListener;
|
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
|
||||||
import javax.servlet.Servlet;
|
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
|
|
||||||
import org.eclipse.jetty.plus.annotation.InjectionCollection;
|
import org.eclipse.jetty.plus.annotation.InjectionCollection;
|
||||||
import org.eclipse.jetty.plus.annotation.LifeCycleCallbackCollection;
|
import org.eclipse.jetty.plus.annotation.LifeCycleCallbackCollection;
|
||||||
import org.eclipse.jetty.plus.annotation.RunAsCollection;
|
import org.eclipse.jetty.plus.annotation.RunAsCollection;
|
||||||
import org.eclipse.jetty.servlet.FilterHolder;
|
|
||||||
import org.eclipse.jetty.servlet.ServletContextHandler.Decorator;
|
import org.eclipse.jetty.servlet.ServletContextHandler.Decorator;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
|
||||||
import org.eclipse.jetty.util.log.Log;
|
import org.eclipse.jetty.util.log.Log;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
import org.eclipse.jetty.webapp.WebAppContext;
|
import org.eclipse.jetty.webapp.WebAppContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WebAppDecorator
|
* PlusDecorator
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -50,83 +44,7 @@ public class PlusDecorator implements Decorator
|
||||||
_context = context;
|
_context = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
public Object decorate (Object o)
|
||||||
/**
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateFilterHolder(org.eclipse.jetty.servlet.FilterHolder)
|
|
||||||
*/
|
|
||||||
public void decorateFilterHolder(FilterHolder filter) throws ServletException
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateFilterInstance(javax.servlet.Filter)
|
|
||||||
*/
|
|
||||||
public <T extends Filter> T decorateFilterInstance(T filter) throws ServletException
|
|
||||||
{
|
|
||||||
decorate(filter);
|
|
||||||
return filter;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateListenerInstance(java.util.EventListener)
|
|
||||||
*/
|
|
||||||
public <T extends EventListener> T decorateListenerInstance(T listener) throws ServletException
|
|
||||||
{
|
|
||||||
decorate(listener);
|
|
||||||
return listener;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateServletHolder(org.eclipse.jetty.servlet.ServletHolder)
|
|
||||||
*/
|
|
||||||
public void decorateServletHolder(ServletHolder holder) throws ServletException
|
|
||||||
{
|
|
||||||
decorate(holder);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateServletInstance(javax.servlet.Servlet)
|
|
||||||
*/
|
|
||||||
public <T extends Servlet> T decorateServletInstance(T servlet) throws ServletException
|
|
||||||
{
|
|
||||||
decorate(servlet);
|
|
||||||
return servlet;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyFilterInstance(javax.servlet.Filter)
|
|
||||||
*/
|
|
||||||
public void destroyFilterInstance(Filter f)
|
|
||||||
{
|
|
||||||
destroy(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyServletInstance(javax.servlet.Servlet)
|
|
||||||
*/
|
|
||||||
public void destroyServletInstance(Servlet s)
|
|
||||||
{
|
|
||||||
destroy(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyListenerInstance(java.util.EventListener)
|
|
||||||
*/
|
|
||||||
public void destroyListenerInstance(EventListener l)
|
|
||||||
{
|
|
||||||
destroy(l);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected void decorate (Object o)
|
|
||||||
throws ServletException
|
|
||||||
{
|
{
|
||||||
|
|
||||||
RunAsCollection runAses = (RunAsCollection)_context.getAttribute(RunAsCollection.RUNAS_COLLECTION);
|
RunAsCollection runAses = (RunAsCollection)_context.getAttribute(RunAsCollection.RUNAS_COLLECTION);
|
||||||
|
@ -146,12 +64,13 @@ public class PlusDecorator implements Decorator
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
throw new ServletException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void destroy (Object o)
|
public void destroy (Object o)
|
||||||
{
|
{
|
||||||
LifeCycleCallbackCollection callbacks = (LifeCycleCallbackCollection)_context.getAttribute(LifeCycleCallbackCollection.LIFECYCLE_CALLBACK_COLLECTION);
|
LifeCycleCallbackCollection callbacks = (LifeCycleCallbackCollection)_context.getAttribute(LifeCycleCallbackCollection.LIFECYCLE_CALLBACK_COLLECTION);
|
||||||
if (callbacks != null)
|
if (callbacks != null)
|
||||||
|
|
|
@ -2218,7 +2218,23 @@ public class Request implements HttpServletRequest
|
||||||
@Override
|
@Override
|
||||||
public <T extends HttpUpgradeHandler> T upgrade(Class<T> handlerClass) throws IOException, ServletException
|
public <T extends HttpUpgradeHandler> T upgrade(Class<T> handlerClass) throws IOException, ServletException
|
||||||
{
|
{
|
||||||
// TODO Auto-generated method stub
|
if (getContext() == null)
|
||||||
return null;
|
throw new ServletException ("Unable to instantiate "+handlerClass);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//Instantiate an instance and inject it
|
||||||
|
T h = getContext().createInstance(handlerClass);
|
||||||
|
|
||||||
|
//TODO handle the rest of the upgrade process
|
||||||
|
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
if (e instanceof ServletException)
|
||||||
|
throw (ServletException)e;
|
||||||
|
throw new ServletException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2131,13 +2131,9 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return clazz.newInstance();
|
return createInstance(clazz);
|
||||||
}
|
}
|
||||||
catch (InstantiationException e)
|
catch (Exception e)
|
||||||
{
|
|
||||||
throw new ServletException(e);
|
|
||||||
}
|
|
||||||
catch (IllegalAccessException e)
|
|
||||||
{
|
{
|
||||||
throw new ServletException(e);
|
throw new ServletException(e);
|
||||||
}
|
}
|
||||||
|
@ -2180,6 +2176,13 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu
|
||||||
{
|
{
|
||||||
return _enabled;
|
return _enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public <T> T createInstance (Class<T> clazz) throws Exception
|
||||||
|
{
|
||||||
|
T o = clazz.newInstance();
|
||||||
|
return o;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ import javax.servlet.SessionTrackingMode;
|
||||||
import javax.servlet.descriptor.JspConfigDescriptor;
|
import javax.servlet.descriptor.JspConfigDescriptor;
|
||||||
import javax.servlet.descriptor.JspPropertyGroupDescriptor;
|
import javax.servlet.descriptor.JspPropertyGroupDescriptor;
|
||||||
import javax.servlet.descriptor.TaglibDescriptor;
|
import javax.servlet.descriptor.TaglibDescriptor;
|
||||||
|
import javax.servlet.http.HttpUpgradeHandler;
|
||||||
|
|
||||||
import org.eclipse.jetty.security.ConstraintAware;
|
import org.eclipse.jetty.security.ConstraintAware;
|
||||||
import org.eclipse.jetty.security.ConstraintMapping;
|
import org.eclipse.jetty.security.ConstraintMapping;
|
||||||
|
@ -265,10 +266,10 @@ public class ServletContextHandler extends ContextHandler
|
||||||
Decorator decorator = _decorators.get(i);
|
Decorator decorator = _decorators.get(i);
|
||||||
if (_servletHandler.getFilters()!=null)
|
if (_servletHandler.getFilters()!=null)
|
||||||
for (FilterHolder holder:_servletHandler.getFilters())
|
for (FilterHolder holder:_servletHandler.getFilters())
|
||||||
decorator.decorateFilterHolder(holder);
|
decorator.decorate(holder);
|
||||||
if(_servletHandler.getServlets()!=null)
|
if(_servletHandler.getServlets()!=null)
|
||||||
for (ServletHolder holder:_servletHandler.getServlets())
|
for (ServletHolder holder:_servletHandler.getServlets())
|
||||||
decorator.decorateServletHolder(holder);
|
decorator.decorate(holder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -521,14 +522,14 @@ public class ServletContextHandler extends ContextHandler
|
||||||
void destroyServlet(Servlet servlet)
|
void destroyServlet(Servlet servlet)
|
||||||
{
|
{
|
||||||
for (Decorator decorator : _decorators)
|
for (Decorator decorator : _decorators)
|
||||||
decorator.destroyServletInstance(servlet);
|
decorator.destroy(servlet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
void destroyFilter(Filter filter)
|
void destroyFilter(Filter filter)
|
||||||
{
|
{
|
||||||
for (Decorator decorator : _decorators)
|
for (Decorator decorator : _decorators)
|
||||||
decorator.destroyFilterInstance(filter);
|
decorator.destroy(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
|
@ -1082,19 +1083,10 @@ public class ServletContextHandler extends ContextHandler
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
T f = c.newInstance();
|
T f = createInstance(c);
|
||||||
for (int i=_decorators.size()-1; i>=0; i--)
|
|
||||||
{
|
|
||||||
Decorator decorator = _decorators.get(i);
|
|
||||||
f=decorator.decorateFilterInstance(f);
|
|
||||||
}
|
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
catch (InstantiationException e)
|
catch (Exception e)
|
||||||
{
|
|
||||||
throw new ServletException(e);
|
|
||||||
}
|
|
||||||
catch (IllegalAccessException e)
|
|
||||||
{
|
{
|
||||||
throw new ServletException(e);
|
throw new ServletException(e);
|
||||||
}
|
}
|
||||||
|
@ -1106,24 +1098,30 @@ public class ServletContextHandler extends ContextHandler
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
T s = c.newInstance();
|
T s = createInstance(c);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new ServletException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public <T> T createInstance (Class<T> c) throws Exception
|
||||||
|
{
|
||||||
|
T o = super.createInstance(c);
|
||||||
for (int i=_decorators.size()-1; i>=0; i--)
|
for (int i=_decorators.size()-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
Decorator decorator = _decorators.get(i);
|
Decorator decorator = _decorators.get(i);
|
||||||
s=decorator.decorateServletInstance(s);
|
o=decorator.decorate(o);
|
||||||
}
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
catch (InstantiationException e)
|
|
||||||
{
|
|
||||||
throw new ServletException(e);
|
|
||||||
}
|
|
||||||
catch (IllegalAccessException e)
|
|
||||||
{
|
|
||||||
throw new ServletException(e);
|
|
||||||
}
|
}
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<SessionTrackingMode> getDefaultSessionTrackingModes()
|
public Set<SessionTrackingMode> getDefaultSessionTrackingModes()
|
||||||
{
|
{
|
||||||
|
@ -1253,19 +1251,9 @@ public class ServletContextHandler extends ContextHandler
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
T l = super.createListener(clazz);
|
T l = createInstance(clazz);
|
||||||
|
|
||||||
for (int i=_decorators.size()-1; i>=0; i--)
|
|
||||||
{
|
|
||||||
Decorator decorator = _decorators.get(i);
|
|
||||||
l=decorator.decorateListenerInstance(l);
|
|
||||||
}
|
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
catch(ServletException e)
|
|
||||||
{
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
throw new ServletException(e);
|
throw new ServletException(e);
|
||||||
|
@ -1307,15 +1295,7 @@ public class ServletContextHandler extends ContextHandler
|
||||||
*/
|
*/
|
||||||
public interface Decorator
|
public interface Decorator
|
||||||
{
|
{
|
||||||
<T extends Filter> T decorateFilterInstance(T filter) throws ServletException;
|
<T> T decorate (T o);
|
||||||
<T extends Servlet> T decorateServletInstance(T servlet) throws ServletException;
|
void destroy (Object o);
|
||||||
<T extends EventListener> T decorateListenerInstance(T listener) throws ServletException;
|
|
||||||
|
|
||||||
void decorateFilterHolder(FilterHolder filter) throws ServletException;
|
|
||||||
void decorateServletHolder(ServletHolder servlet) throws ServletException;
|
|
||||||
|
|
||||||
void destroyServletInstance(Servlet s);
|
|
||||||
void destroyFilterInstance(Filter f);
|
|
||||||
void destroyListenerInstance(EventListener f);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue