432473 web.xml declaration order of filters not preserved on calls to init()

This commit is contained in:
Jan Bartel 2014-04-10 09:34:39 +10:00
parent c616ece6c7
commit 268ca92ce2
1 changed files with 24 additions and 12 deletions

View File

@ -70,9 +70,11 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
public static final String STANDARD_PROCESSOR = "org.eclipse.jetty.standardDescriptorProcessor"; public static final String STANDARD_PROCESSOR = "org.eclipse.jetty.standardDescriptorProcessor";
final Map<String,FilterHolder> _filterHolders = new HashMap<>(); final Map<String,FilterHolder> _filterHolderMap = new HashMap<>();
final List<FilterHolder> _filterHolders = new ArrayList<>();
final List<FilterMapping> _filterMappings = new ArrayList<>(); final List<FilterMapping> _filterMappings = new ArrayList<>();
final Map<String,ServletHolder> _servletHolders = new HashMap<>(); final Map<String,ServletHolder> _servletHolderMap = new HashMap<>();
final List<ServletHolder> _servletHolders = new ArrayList<>();
final List<ServletMapping> _servletMappings = new ArrayList<>(); final List<ServletMapping> _servletMappings = new ArrayList<>();
public StandardDescriptorProcessor () public StandardDescriptorProcessor ()
@ -113,11 +115,17 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
public void start(WebAppContext context, Descriptor descriptor) public void start(WebAppContext context, Descriptor descriptor)
{ {
for (FilterHolder h : context.getServletHandler().getFilters()) for (FilterHolder h : context.getServletHandler().getFilters())
_filterHolders.put(h.getName(),h); {
_filterHolderMap.put(h.getName(),h);
_filterHolders.add(h);
}
if (context.getServletHandler().getFilterMappings()!=null) if (context.getServletHandler().getFilterMappings()!=null)
_filterMappings.addAll(Arrays.asList(context.getServletHandler().getFilterMappings())); _filterMappings.addAll(Arrays.asList(context.getServletHandler().getFilterMappings()));
for (ServletHolder h : context.getServletHandler().getServlets()) for (ServletHolder h : context.getServletHandler().getServlets())
_servletHolders.put(h.getName(),h); {
_servletHolderMap.put(h.getName(),h);
_servletHolders.add(h);
}
if (context.getServletHandler().getServletMappings()!=null) if (context.getServletHandler().getServletMappings()!=null)
_servletMappings.addAll(Arrays.asList(context.getServletHandler().getServletMappings())); _servletMappings.addAll(Arrays.asList(context.getServletHandler().getServletMappings()));
} }
@ -128,14 +136,16 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
*/ */
public void end(WebAppContext context, Descriptor descriptor) public void end(WebAppContext context, Descriptor descriptor)
{ {
context.getServletHandler().setFilters(_filterHolders.values().toArray(new FilterHolder[_filterHolders.size()])); context.getServletHandler().setFilters(_filterHolders.toArray(new FilterHolder[_filterHolderMap.size()]));
context.getServletHandler().setServlets(_servletHolders.values().toArray(new ServletHolder[_servletHolders.size()])); context.getServletHandler().setServlets(_servletHolders.toArray(new ServletHolder[_servletHolderMap.size()]));
context.getServletHandler().setFilterMappings(_filterMappings.toArray(new FilterMapping[_filterMappings.size()])); context.getServletHandler().setFilterMappings(_filterMappings.toArray(new FilterMapping[_filterMappings.size()]));
context.getServletHandler().setServletMappings(_servletMappings.toArray(new ServletMapping[_servletMappings.size()])); context.getServletHandler().setServletMappings(_servletMappings.toArray(new ServletMapping[_servletMappings.size()]));
_filterHolderMap.clear();
_filterHolders.clear(); _filterHolders.clear();
_filterMappings.clear(); _filterMappings.clear();
_servletHolderMap.clear();
_servletHolders.clear(); _servletHolders.clear();
_servletMappings.clear(); _servletMappings.clear();
} }
@ -217,14 +227,15 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
// initialize holder // initialize holder
String name = node.getString("servlet-name", false, true); String name = node.getString("servlet-name", false, true);
ServletHolder holder = _servletHolders.get(name); ServletHolder holder = _servletHolderMap.get(name);
//If servlet of that name does not already exist, create it. //If servlet of that name does not already exist, create it.
if (holder == null) if (holder == null)
{ {
holder = context.getServletHandler().newServletHolder(Source.DESCRIPTOR); holder = context.getServletHandler().newServletHolder(Source.DESCRIPTOR);
holder.setName(name); holder.setName(name);
_servletHolders.put(name,holder); _servletHolderMap.put(name,holder);
_servletHolders.add(holder);
} }
// init params // init params
@ -1401,11 +1412,11 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
if (paths.size() > 0) if (paths.size() > 0)
{ {
ServletHandler handler = context.getServletHandler(); ServletHandler handler = context.getServletHandler();
ServletHolder jsp_pg_servlet = _servletHolders.get(JspPropertyGroupServlet.NAME); ServletHolder jsp_pg_servlet = _servletHolderMap.get(JspPropertyGroupServlet.NAME);
if (jsp_pg_servlet==null) if (jsp_pg_servlet==null)
{ {
jsp_pg_servlet=new ServletHolder(JspPropertyGroupServlet.NAME,new JspPropertyGroupServlet(context,handler)); jsp_pg_servlet=new ServletHolder(JspPropertyGroupServlet.NAME,new JspPropertyGroupServlet(context,handler));
_servletHolders.put(JspPropertyGroupServlet.NAME,jsp_pg_servlet); _servletHolderMap.put(JspPropertyGroupServlet.NAME,jsp_pg_servlet);
} }
ServletMapping mapping = new ServletMapping(); ServletMapping mapping = new ServletMapping();
@ -1721,12 +1732,13 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
protected void visitFilter(WebAppContext context, Descriptor descriptor, XmlParser.Node node) protected void visitFilter(WebAppContext context, Descriptor descriptor, XmlParser.Node node)
{ {
String name = node.getString("filter-name", false, true); String name = node.getString("filter-name", false, true);
FilterHolder holder = _filterHolders.get(name); FilterHolder holder = _filterHolderMap.get(name);
if (holder == null) if (holder == null)
{ {
holder = context.getServletHandler().newFilterHolder(Source.DESCRIPTOR); holder = context.getServletHandler().newFilterHolder(Source.DESCRIPTOR);
holder.setName(name); holder.setName(name);
_filterHolders.put(name,holder); _filterHolderMap.put(name,holder);
_filterHolders.add(holder);
} }
String filter_class = node.getString("filter-class", false, true); String filter_class = node.getString("filter-class", false, true);