You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by vi...@apache.org on 2013/07/08 08:53:51 UTC
svn commit: r1500590 -
/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
Author: violetagg
Date: Mon Jul 8 06:53:50 2013
New Revision: 1500590
URL: http://svn.apache.org/r1500590
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55210
When searching for ServletContainerInitializer, ignore comments in the provider-configuration file.
Support multiple ServletContainerInitializer in the provider-configuration file.
Patch is provided by Nick Williams.
Modified:
tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1500590&r1=1500589&r2=1500590&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Mon Jul 8 06:53:50 2013
@@ -1638,7 +1638,7 @@ public class ContextConfig implements Li
URL url = fragment.getURL();
Jar jar = null;
InputStream is = null;
- ServletContainerInitializer sci = null;
+ List<ServletContainerInitializer> detectedScis = null;
try {
if ("jar".equals(url.getProtocol())) {
jar = JarFactory.newInstance(url);
@@ -1651,7 +1651,7 @@ public class ContextConfig implements Li
}
}
if (is != null) {
- sci = getServletContainerInitializer(is);
+ detectedScis = getServletContainerInitializers(is);
}
} catch (IOException ioe) {
log.error(sm.getString(
@@ -1672,66 +1672,77 @@ public class ContextConfig implements Li
}
}
- if (sci == null) {
+ if (detectedScis == null) {
continue;
}
- initializerClassMap.put(sci, new HashSet<Class<?>>());
+ for (ServletContainerInitializer sci : detectedScis) {
+ initializerClassMap.put(sci, new HashSet<Class<?>>());
- HandlesTypes ht = null;
- try {
- ht = sci.getClass().getAnnotation(HandlesTypes.class);
- } catch (Exception e) {
- if (log.isDebugEnabled()) {
- log.info(sm.getString("contextConfig.sci.debug", url), e);
- } else {
- log.info(sm.getString("contextConfig.sci.info", url));
+ HandlesTypes ht = null;
+ try {
+ ht = sci.getClass().getAnnotation(HandlesTypes.class);
+ } catch (Exception e) {
+ if (log.isDebugEnabled()) {
+ log.info(sm.getString("contextConfig.sci.debug", url),
+ e);
+ } else {
+ log.info(sm.getString("contextConfig.sci.info", url));
+ }
}
- }
- if (ht != null) {
- Class<?>[] types = ht.value();
- if (types != null) {
- for (Class<?> type : types) {
- if (type.isAnnotation()) {
- handlesTypesAnnotations = true;
- } else {
- handlesTypesNonAnnotations = true;
- }
- Set<ServletContainerInitializer> scis =
- typeInitializerMap.get(type);
- if (scis == null) {
- scis = new HashSet<>();
- typeInitializerMap.put(type, scis);
+ if (ht != null) {
+ Class<?>[] types = ht.value();
+ if (types != null) {
+ for (Class<?> type : types) {
+ if (type.isAnnotation()) {
+ handlesTypesAnnotations = true;
+ } else {
+ handlesTypesNonAnnotations = true;
+ }
+ Set<ServletContainerInitializer> scis = typeInitializerMap
+ .get(type);
+ if (scis == null) {
+ scis = new HashSet<>();
+ typeInitializerMap.put(type, scis);
+ }
+ scis.add(sci);
}
- scis.add(sci);
}
}
}
-
}
}
/**
* Extract the name of the ServletContainerInitializer.
- *
+ *
* @param is The resource where the name is defined
* @return The class name
* @throws IOException
*/
- protected ServletContainerInitializer getServletContainerInitializer(
+ protected List<ServletContainerInitializer> getServletContainerInitializers(
InputStream is) throws IOException {
- String className = null;
+ List<ServletContainerInitializer> initializers = new ArrayList<>();
if (is != null) {
String line = null;
try {
- BufferedReader br =
- new BufferedReader(new InputStreamReader(is, "UTF-8"));
- line = br.readLine();
- if (line != null && line.trim().length() > 0) {
- className = line.trim();
+ BufferedReader br = new BufferedReader(new InputStreamReader(
+ is, "UTF-8"));
+ while ((line = br.readLine()) != null) {
+ line = line.trim();
+ if (line.length() > 0) {
+ int i = line.indexOf('#');
+ if (i > -1) {
+ if (i == 0) {
+ continue;
+ }
+ line = line.substring(0, i).trim();
+ }
+ initializers.add(getServletContainerInitializer(line));
+ }
}
} catch (UnsupportedEncodingException e) {
// Should never happen with UTF-8
@@ -1739,11 +1750,16 @@ public class ContextConfig implements Li
}
}
+ return initializers;
+ }
+
+ protected ServletContainerInitializer getServletContainerInitializer(
+ String className) throws IOException {
ServletContainerInitializer sci = null;
try {
- Class<?> clazz = Class.forName(className,true,
- context.getLoader().getClassLoader());
- sci = (ServletContainerInitializer) clazz.newInstance();
+ Class<?> clazz = Class.forName(className, true, context.getLoader()
+ .getClassLoader());
+ sci = (ServletContainerInitializer) clazz.newInstance();
} catch (ClassNotFoundException e) {
log.error(sm.getString("contextConfig.invalidSci", className), e);
throw new IOException(e);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org