https://issues.apache.org/bugzilla/show_bug.cgi?id=47462

           Summary: The annotation doesn't become
                    effective.(metadata-complete="false" is not
                    effective.)
           Product: Tomcat 6
           Version: 6.0.20
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
        AssignedTo: dev@tomcat.apache.org
        ReportedBy: fujino.keii...@oss.ntt.co.jp


Even if "false" is set to metadata-complete, 
the annotation doesn't become effective. 

To invalidate the annotation by all the Web applications of Tomcat, 
metadata-complete of conf/web.xml is set to "true". 

[conf/web.xml]
<web-app xmlns="http://java.sun.com/xml/ns/javaee";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
    version="2.5"
    metadata-complete="true"
    >
.....
</web-app>

To make the annotation of Web application (testWebApp) effective, 
metadata-complete of webapps/testWebApp/WEB-INF/web.xml is set to "false".

[webapps/testWebApp/WEB-INF/web.xml]
<web-app xmlns="http://java.sun.com/xml/ns/javaee";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
   version="2.5"
   metadata-complete="false"> 
....
</web-app>

However, testWebApp doesn't make the annotation effective. 

Because WebRuleSet#IgnoreAnnotationsRule#begin is as follows. 
When metadata-complete is "false", context.setIgnoreAnnotations(false) is not
invoked. 
[WebRuleSet#IgnoreAnnotationsRule#begin]
final class IgnoreAnnotationsRule extends Rule {

    public IgnoreAnnotationsRule() {
    }

    public void begin(String namespace, String name, Attributes attributes)
        throws Exception {
        Context context = (Context) digester.peek(digester.getCount() - 1);
        String value = attributes.getValue("metadata-complete");
        if ("true".equals(value)) {
            context.setIgnoreAnnotations(true);
        }
        if (digester.getLogger().isDebugEnabled()) {
            digester.getLogger().debug
                (context.getClass().getName() + ".setIgnoreAnnotations( " +
                    context.getIgnoreAnnotations() + ")");
        }
    }

}

I think that the following patches are necessary. 

Index: java/org/apache/catalina/startup/WebRuleSet.java
===================================================================
--- java/org/apache/catalina/startup/WebRuleSet.java    (revision 763870 ( 
https://svn.apache.org/viewcvs.cgi?view=rev&rev=763870 ))
+++ java/org/apache/catalina/startup/WebRuleSet.java    (working copy)
@@ -848,6 +848,8 @@
         String value = attributes.getValue("metadata-complete");
         if ("true".equals(value)) {
             context.setIgnoreAnnotations(true);
+        } else if ("false".equals(value)) {
+            context.setIgnoreAnnotations(false);
         }
         if (digester.getLogger().isDebugEnabled()) {
             digester.getLogger().debug


Best regards.

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to