Skip to content

Commit

Permalink
Issue #1050
Browse files Browse the repository at this point in the history
  • Loading branch information
janbartel committed Nov 2, 2016
1 parent ca882c8 commit 8461cc0
Show file tree
Hide file tree
Showing 4 changed files with 134 additions and 24 deletions.
Expand Up @@ -109,32 +109,37 @@ public void doStart()
@Override
public void initialize() throws Exception
{
super.initialize();

if (_filter==null)
if (!_initialized)
{
try
{
ServletContext context=_servletHandler.getServletContext();
_filter=(context instanceof ServletContextHandler.Context)
?((ServletContextHandler.Context)context).createFilter(getHeldClass())
:getHeldClass().newInstance();
}
catch (ServletException se)
super.initialize();

if (_filter==null)
{
Throwable cause = se.getRootCause();
if (cause instanceof InstantiationException)
throw (InstantiationException)cause;
if (cause instanceof IllegalAccessException)
throw (IllegalAccessException)cause;
throw se;
try
{
ServletContext context=_servletHandler.getServletContext();
_filter=(context instanceof ServletContextHandler.Context)
?((ServletContextHandler.Context)context).createFilter(getHeldClass())
:getHeldClass().newInstance();
}
catch (ServletException se)
{
Throwable cause = se.getRootCause();
if (cause instanceof InstantiationException)
throw (InstantiationException)cause;
if (cause instanceof IllegalAccessException)
throw (IllegalAccessException)cause;
throw se;
}
}
}

_config=new Config();
if (LOG.isDebugEnabled())
LOG.debug("Filter.init {}",_filter);
_filter.init(_config);
_config=new Config();
if (LOG.isDebugEnabled())
LOG.debug("Filter.init {}",_filter);
_filter.init(_config);
}

_initialized = true;
}


Expand All @@ -158,6 +163,7 @@ public void doStop()
_filter=null;

_config=null;
_initialized = false;
super.doStop();
}

Expand Down
Expand Up @@ -53,6 +53,7 @@ public class Holder<T> extends BaseHolder<T>
protected String _displayName;
protected boolean _asyncSupported;
protected String _name;
protected boolean _initialized = false;


/* ---------------------------------------------------------------- */
Expand Down
Expand Up @@ -73,7 +73,6 @@ public class ServletHolder extends Holder<Servlet> implements UserIdentity.Scope
private static final Logger LOG = Log.getLogger(ServletHolder.class);
private int _initOrder = -1;
private boolean _initOnStartup=false;
private boolean _initialized = false;
private Map<String, String> _roleMap;
private String _forcedPath;
private String _runAsRole;
Expand Down Expand Up @@ -410,7 +409,8 @@ public void doStart()
public void initialize ()
throws Exception
{
if(!_initialized){
if(!_initialized)
{
super.initialize();
if (_extInstance || _initOnStartup)
{
Expand Down
@@ -0,0 +1,103 @@
//
// ========================================================================
// Copyright (c) 1995-2016 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 org.eclipse.jetty.servlet;

import static org.junit.Assert.*;

import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.eclipse.jetty.util.log.StacklessLogging;
import org.junit.Test;

/**
* FilterHolderTest
*
*
*/
public class FilterHolderTest
{

@Test
public void testInitialize()
throws Exception
{
ServletHandler handler = new ServletHandler();

final AtomicInteger counter = new AtomicInteger(0);
Filter filter = new Filter ()
{
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
counter.incrementAndGet();
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
}

@Override
public void destroy()
{
}

};

FilterHolder fh = new FilterHolder();
fh.setServletHandler(handler);

fh.setName("xx");
fh.setFilter(filter);

try (StacklessLogging stackless = new StacklessLogging(FilterHolder.class))
{
fh.initialize();
fail("Not started");
}
catch (Exception e)
{
//expected
}

fh.start();
fh.initialize();
assertEquals(1, counter.get());

fh.initialize();
assertEquals(1, counter.get());

fh.stop();
assertEquals(1, counter.get());
fh.start();
assertEquals(1, counter.get());
fh.initialize();
assertEquals(2, counter.get());
}

}

0 comments on commit 8461cc0

Please sign in to comment.