https://bz.apache.org/bugzilla/show_bug.cgi?id=65244
Bug ID: 65244
Summary: annotations from @HandlesTypes are checked only at
class level when scanning
Product: Tomcat 9
Version: 9.0.45
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Servlet
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: -----
I have a test WAR, where one of the detected SCIs has this @HandlesTypes (for
testing purpose only):
@HandlesTypes({ Deprecated.class })
Then, in the same WAR, I have a servlet with this dummy field:
@Deprecated
public Object dummy;
`org.apache.tomcat.util.bcel.classfile.JavaClass#getAnnotationEntries()`
returns null for this servlet class inside
`org.apache.catalina.startup.ContextConfig#checkHandlesTypes()`
I know it's artificial and I (later, after scanning) get a list of these
classes passed to SCI:
{org.ops4j.pax.web.samples.war.scis.SCIFromTheWab1@2927} ->
{java.util.HashSet@3017} size = 9
key: org.ops4j.pax.web.samples.war.scis.SCIFromTheWab1 =
{org.ops4j.pax.web.samples.war.scis.SCIFromTheWab1@2927}
value: java.util.HashSet = {java.util.HashSet@3017} size = 9
0 = {@3023} "class javax.faces.component.UIViewRoot$ViewScope"
1 = {@3024} "class org.apache.myfaces.view.facelets.tag.jsf.ComponentHandler"
2 = {@3025} "class org.apache.myfaces.view.facelets.tag.jsf.ConvertHandler"
3 = {@3026} "class javax.faces.view.facelets.ResourceResolver"
4 = {@3027} "class org.apache.myfaces.application.StateCacheFactory"
5 = {@3028} "class org.apache.myfaces.shared.taglib.UIComponentTagUtils"
6 = {@3029} "interface javax.faces.bean.package-info"
7 = {@3030} "class org.apache.myfaces.view.facelets.tag.jsf.ValidateHandler"
8 = {@3031} "class org.apache.myfaces.view.facelets.tag.MetaRule"
Each of the classes are annotated with @Deprecated.
The problem (?) I found is that chapter "8.2.4 Shared libraries / runtimes
pluggability" of Servlet 4 specification says:
> In addition to the ServletContainerInitializer we also have an annotation -
HandlesTypes. The HandlesTypes annotation on the implementation of the
ServletContainerInitializer is used to express interest in classes that may
have annotations ___(type, method or field level annotations)___ specified in
the value of
the HandlesTypes or if it extends / implements one those classes anywhere in
the
class’ super types.
So either something's wrong in Tomcat, in TCK, or Servlet spec is too
permissive...
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]