You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2017/09/29 14:24:50 UTC
svn commit: r1810106 - in /tomcat/trunk: build.xml
java/org/apache/catalina/core/DefaultInstanceManager.java
webapps/docs/changelog.xml
Author: markt
Date: Fri Sep 29 14:24:50 2017
New Revision: 1810106
URL: http://svn.apache.org/viewvc?rev=1810106&view=rev
Log:
Improve the fix for https://bz.apache.org/bugzilla/show_bug.cgi?id=61439 and exclude the JPA, JAX-WS and EJB annotations completely from the Tomcat distributions.
Modified:
tomcat/trunk/build.xml
tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/build.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/build.xml?rev=1810106&r1=1810105&r2=1810106&view=diff
==============================================================================
--- tomcat/trunk/build.xml (original)
+++ tomcat/trunk/build.xml Fri Sep 29 14:24:50 2017
@@ -296,9 +296,6 @@
<!-- Pattern sets for jar files in standard distributions -->
<patternset id="files.annotations-api">
<include name="javax/annotation/**" />
- <include name="javax/ejb/**" />
- <include name="javax/persistence/**" />
- <include name="javax/xml/ws/**" />
</patternset>
<patternset id="files.servlet-api">
Modified: tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java?rev=1810106&r1=1810105&r2=1810106&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java Fri Sep 29 14:24:50 2017
@@ -67,6 +67,37 @@ public class DefaultInstanceManager impl
protected static final StringManager sm =
StringManager.getManager(Constants.Package);
+ private static final boolean EJB_PRESENT;
+ private static final boolean JPA_PRESENT;
+ private static final boolean WS_PRESENT;
+
+ static {
+ Class<?> clazz = null;
+ try {
+ clazz = Class.forName("javax.ejb.EJB");
+ } catch (ClassNotFoundException cnfe) {
+ // Expected
+ }
+ EJB_PRESENT = (clazz != null);
+
+ clazz = null;
+ try {
+ clazz = Class.forName("javax.persistence.PersistenceContext");
+ } catch (ClassNotFoundException cnfe) {
+ // Expected
+ }
+ JPA_PRESENT = (clazz != null);
+
+ clazz = null;
+ try {
+ clazz = Class.forName("javax.xml.ws.WebServiceRef");
+ } catch (ClassNotFoundException cnfe) {
+ // Expected
+ }
+ WS_PRESENT = (clazz != null);
+ }
+
+
private final Context context;
private final Map<String, Map<String, String>> injectionMap;
protected final ClassLoader classLoader;
@@ -283,10 +314,10 @@ public class DefaultInstanceManager impl
Field[] fields = Introspection.getDeclaredFields(clazz);
for (Field field : fields) {
Resource resourceAnnotation;
- EJB ejbAnnotation;
- WebServiceRef webServiceRefAnnotation;
- PersistenceContext persistenceContextAnnotation;
- PersistenceUnit persistenceUnitAnnotation;
+ Annotation ejbAnnotation;
+ Annotation webServiceRefAnnotation;
+ Annotation persistenceContextAnnotation;
+ Annotation persistenceUnitAnnotation;
if (injections != null && injections.containsKey(field.getName())) {
annotations.add(new AnnotationCacheEntry(
field.getName(), null,
@@ -296,24 +327,24 @@ public class DefaultInstanceManager impl
field.getAnnotation(Resource.class)) != null) {
annotations.add(new AnnotationCacheEntry(field.getName(), null,
resourceAnnotation.name(), AnnotationCacheEntryType.FIELD));
- } else if ((ejbAnnotation =
- field.getAnnotation(EJB.class)) != null) {
+ } else if (EJB_PRESENT &&
+ (ejbAnnotation = field.getAnnotation(EJB.class)) != null) {
annotations.add(new AnnotationCacheEntry(field.getName(), null,
- ejbAnnotation.name(), AnnotationCacheEntryType.FIELD));
- } else if ((webServiceRefAnnotation =
+ ((EJB) ejbAnnotation).name(), AnnotationCacheEntryType.FIELD));
+ } else if (WS_PRESENT && (webServiceRefAnnotation =
field.getAnnotation(WebServiceRef.class)) != null) {
annotations.add(new AnnotationCacheEntry(field.getName(), null,
- webServiceRefAnnotation.name(),
+ ((WebServiceRef) webServiceRefAnnotation).name(),
AnnotationCacheEntryType.FIELD));
- } else if ((persistenceContextAnnotation =
+ } else if (JPA_PRESENT && (persistenceContextAnnotation =
field.getAnnotation(PersistenceContext.class)) != null) {
annotations.add(new AnnotationCacheEntry(field.getName(), null,
- persistenceContextAnnotation.name(),
+ ((PersistenceContext) persistenceContextAnnotation).name(),
AnnotationCacheEntryType.FIELD));
- } else if ((persistenceUnitAnnotation =
+ } else if (JPA_PRESENT && (persistenceUnitAnnotation =
field.getAnnotation(PersistenceUnit.class)) != null) {
annotations.add(new AnnotationCacheEntry(field.getName(), null,
- persistenceUnitAnnotation.name(),
+ ((PersistenceUnit) persistenceUnitAnnotation).name(),
AnnotationCacheEntryType.FIELD));
}
}
@@ -341,10 +372,10 @@ public class DefaultInstanceManager impl
}
}
Resource resourceAnnotation;
- EJB ejbAnnotation;
- WebServiceRef webServiceRefAnnotation;
- PersistenceContext persistenceContextAnnotation;
- PersistenceUnit persistenceUnitAnnotation;
+ Annotation ejbAnnotation;
+ Annotation webServiceRefAnnotation;
+ Annotation persistenceContextAnnotation;
+ Annotation persistenceUnitAnnotation;
if ((resourceAnnotation =
method.getAnnotation(Resource.class)) != null) {
annotations.add(new AnnotationCacheEntry(
@@ -352,32 +383,33 @@ public class DefaultInstanceManager impl
method.getParameterTypes(),
resourceAnnotation.name(),
AnnotationCacheEntryType.SETTER));
- } else if ((ejbAnnotation =
- method.getAnnotation(EJB.class)) != null) {
+ } else if (EJB_PRESENT &&
+ (ejbAnnotation = method.getAnnotation(EJB.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- ejbAnnotation.name(),
+ ((EJB) ejbAnnotation).name(),
AnnotationCacheEntryType.SETTER));
- } else if ((webServiceRefAnnotation =
+ } else if (WS_PRESENT && (webServiceRefAnnotation =
method.getAnnotation(WebServiceRef.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- webServiceRefAnnotation.name(),
+ ((WebServiceRef) webServiceRefAnnotation).name(),
AnnotationCacheEntryType.SETTER));
- } else if ((persistenceContextAnnotation =
+ } else if (JPA_PRESENT && (persistenceContextAnnotation =
method.getAnnotation(PersistenceContext.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- persistenceContextAnnotation.name(),
+ ((PersistenceContext) persistenceContextAnnotation).name(),
AnnotationCacheEntryType.SETTER));
- } else if ((persistenceUnitAnnotation = method.getAnnotation(PersistenceUnit.class)) != null) {
+ } else if (JPA_PRESENT && (persistenceUnitAnnotation =
+ method.getAnnotation(PersistenceUnit.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- persistenceUnitAnnotation.name(),
+ ((PersistenceUnit) persistenceUnitAnnotation).name(),
AnnotationCacheEntryType.SETTER));
}
}
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1810106&r1=1810105&r2=1810106&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Sep 29 14:24:50 2017
@@ -45,6 +45,12 @@
issues do not "pop up" wrt. others).
-->
<section name="Tomcat 9.0.2 (markt)" rtext="in development">
+ <subsection name="Other">
+ <fix>
+ Improve the fix for <bug>61439</bug> and exclude the JPA, JAX-WS and EJB
+ annotations completely from the Tomcat distributions. (markt)
+ </fix>
+ </subsection>
</section>
<section name="Tomcat 9.0.1 (markt)" rtext="release in progress">
<subsection name="Catalina">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org