[jboss-cvs] JBossAS SVN: r93745 - in projects/metadata/web/trunk/src/main/java/org/jboss/metadata: web/spec and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Sep 18 19:53:47 EDT 2009


Author: remy.maucherat at jboss.com
Date: 2009-09-18 19:53:47 -0400 (Fri, 18 Sep 2009)
New Revision: 93745

Modified:
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/MultipartConfigProcessor.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/RunAsProcessor.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebComponentProcessor.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java
Log:
- Change the strategy for processing Servlet annotations that have to be associated with the servlet name or mappings
  to produce meaningful results.
- These annotations will be stored as special meta data, and will be resolved at the end of the deployment process
  in the web deployer, after startup listeners for the web deployment are run.
- TODO: Add processing for the @SecurityConstraint annotation.

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/MultipartConfigProcessor.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/MultipartConfigProcessor.java	2009-09-18 15:27:56 UTC (rev 93744)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/MultipartConfigProcessor.java	2009-09-18 23:53:47 UTC (rev 93745)
@@ -32,6 +32,7 @@
 import org.jboss.metadata.annotation.creator.Processor;
 import org.jboss.metadata.annotation.creator.ProcessorUtils;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.web.spec.AnnotationMergedView;
 import org.jboss.metadata.web.spec.MultipartConfigMetaData;
 import org.jboss.metadata.web.spec.ServletMetaData;
 import org.jboss.metadata.web.spec.ServletsMetaData;
@@ -56,11 +57,17 @@
          return;
 
       MultipartConfigMetaData multipartConfig = create(type);
-      ServletMetaData servlet = new ServletMetaData();
-      servlet.setServletName(type.getSimpleName());
-      servlet.setServletClass(type.getName());
+      String servletName = AnnotationMergedView.getDummyAnnotatedName(type);
+      ServletMetaData servlet = metaData.get(servletName);
+      if (servlet == null)
+      {
+         servlet = new ServletMetaData();
+         servlet.setAnnotation(true);
+         servlet.setServletName(servletName);
+         servlet.setServletClass(type.getName());
+         metaData.add(servlet);
+      }
       servlet.setMultipartConfig(multipartConfig);
-      metaData.add(servlet);
    }
    
    public MultipartConfigMetaData create(Class<?> element)

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/RunAsProcessor.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/RunAsProcessor.java	2009-09-18 15:27:56 UTC (rev 93744)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/RunAsProcessor.java	2009-09-18 23:53:47 UTC (rev 93745)
@@ -29,6 +29,7 @@
 import org.jboss.metadata.annotation.creator.Processor;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.javaee.spec.RunAsMetaData;
+import org.jboss.metadata.web.spec.AnnotationMergedView;
 import org.jboss.metadata.web.spec.ServletMetaData;
 import org.jboss.metadata.web.spec.ServletsMetaData;
 
@@ -55,10 +56,16 @@
          return;
 
       RunAsMetaData runAs = super.create(type);
-      ServletMetaData servlet = new ServletMetaData();
-      servlet.setServletName(type.getSimpleName());
-      servlet.setServletClass(type.getName());
+      String servletName = AnnotationMergedView.getDummyAnnotatedName(type);
+      ServletMetaData servlet = metaData.get(servletName);
+      if (servlet == null)
+      {
+         servlet = new ServletMetaData();
+         servlet.setAnnotation(true);
+         servlet.setServletName(servletName);
+         servlet.setServletClass(type.getName());
+         metaData.add(servlet);
+      }
       servlet.setRunAs(runAs);
-      metaData.add(servlet);
    }
 }

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebComponentProcessor.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebComponentProcessor.java	2009-09-18 15:27:56 UTC (rev 93744)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebComponentProcessor.java	2009-09-18 23:53:47 UTC (rev 93745)
@@ -54,12 +54,10 @@
       addTypeProcessor(new RunAsProcessor(finder));
       // @DeclareRoles
       addTypeProcessor(new DeclareRolesProcessor(finder));
-      /* Most likely these two are not doable here
       // @MultipartConfig
       addTypeProcessor(new MultipartConfigProcessor(finder));
       // @SecurityConstraint
-      //addTypeProcessor(new SecurityConstraintProcessor(finder));
-       */
+      //TODO addTypeProcessor(new SecurityConstraintProcessor(finder));
    }
 
    @Override
@@ -76,7 +74,7 @@
       }
       super.process(env, type);
       
-      // @RunAs
+      // @RunAs, @MultipartConfig, @SecurityConstraint
       ServletsMetaData servlets = metaData.getServlets();
       if(servlets == null)
       {

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java	2009-09-18 15:27:56 UTC (rev 93744)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java	2009-09-18 23:53:47 UTC (rev 93745)
@@ -22,7 +22,6 @@
 package org.jboss.metadata.web.spec;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 
 import org.jboss.metadata.javaee.spec.Environment;
@@ -40,6 +39,16 @@
  */
 public class AnnotationMergedView
 {
+   public static String getDummyAnnotatedName(Class<?> type)
+   {
+      return getDummyAnnotatedName(type.getName());
+   }
+   
+   public static String getDummyAnnotatedName(String className)
+   {
+      return "_annotated_" + className;
+   }
+   
    public static void merge(WebCommonMetaData merged, WebCommonMetaData xml, WebMetaData annotation)
    {
       // Merge the servlets meta data
@@ -287,6 +296,38 @@
    private static void merge(ServletsMetaData merged, ServletsMetaData xml,
          ServletsMetaData annotation)
    {
+      if (xml == null)
+      {
+         if (annotation != null)
+         {
+            merged.addAll(annotation);
+         }
+      }
+      else
+      {
+         merged.addAll(xml);
+         if (annotation != null)
+         {
+            for (ServletMetaData servlet : annotation)
+            {
+               if (xml.get(servlet.getServletName()) == null)
+               {
+                  merged.add(servlet);
+               }
+            }
+         }
+      }
+   }
+   
+   /*
+    * No longer appropriate, as the funny matching for the class name can only
+    * be done at the very end, after running the listeners. Used to work
+    * because web.xml was actually a full representation of the meta data.
+    * Now the fake "annotation" servlets are kept for the web deployer, which
+    * will generate corresponding meta data.
+   private static void merge(ServletsMetaData merged, ServletsMetaData xml,
+         ServletsMetaData annotation)
+   {
       HashMap<String,String> servletClassToName = new HashMap<String,String>();
       if(xml != null)
       {
@@ -303,7 +344,7 @@
                   className = className.substring(dot+1);
                servletClassToName.put(className, servlet.getServletName()); 
             }
-         }         
+         }
       }
       
       // First get the annotation beans without an xml entry
@@ -365,87 +406,32 @@
          }
       } 
    }
+   */
    
    private static void merge(FiltersMetaData merged, FiltersMetaData xml,
          FiltersMetaData annotation)
    {
-      HashMap<String,String> filterClassToName = new HashMap<String,String>();
-      if(xml != null)
+      if (xml == null)
       {
-         if(xml.getId() != null)
-            merged.setId(xml.getId());
-         for(FilterMetaData filter : xml)
+         if (annotation != null)
          {
-            String className = filter.getFilterName();
-            if(className != null)
-            {
-               // Use the unqualified name
-               int dot = className.lastIndexOf('.');
-               if(dot >= 0)
-                  className = className.substring(dot+1);
-               filterClassToName.put(className, filter.getFilterName()); 
-            }
-         }         
-      }
-      
-      // First get the annotation beans without an xml entry
-      if(annotation != null)
-      {
-         for(FilterMetaData filter : annotation)
-         {
-            if(xml != null)
-            {
-               // This is either the filter-name or the filter-class simple name
-               String filterName = filter.getFilterName();
-               FilterMetaData match = xml.get(filterName);
-               if(match == null)
-               {
-                  // Lookup by the unqualified filter class
-                  String xmlFilterName = filterClassToName.get(filterName);
-                  if(xmlFilterName == null)
-                     merged.add(filter);
-               }
-            }
-            else
-            {
-               merged.add(filter);
-            }
+            merged.addAll(annotation);
          }
       }
-      // Now merge the xml and annotations
-      if(xml != null)
+      else
       {
-         for(FilterMetaData filter : xml)
+         merged.addAll(xml);
+         if (annotation != null)
          {
-            FilterMetaData annFilter = null;
-            if(annotation != null)
+            for (FilterMetaData filter : annotation)
             {
-               String name = filter.getFilterName();
-               annFilter = annotation.get(name);
-               if(annFilter == null)
+               if (xml.get(filter.getFilterName()) == null)
                {
-                  // Lookup by the unqualified filter class
-                  String className = filter.getFilterClass();
-                  if(className != null)
-                  {
-                     // Use the unqualified name
-                     int dot = className.lastIndexOf('.');
-                     if(dot >= 0)
-                        className = className.substring(dot+1);
-                     annFilter = annotation.get(className);
-                  }
+                  merged.add(filter);
                }
             }
-            // Merge
-            FilterMetaData mergedFilterMetaData = filter;
-            if(annFilter != null)
-            {
-               mergedFilterMetaData = new FilterMetaData();
-               mergedFilterMetaData.merge(filter, annFilter);
-            }
-            merged.add(mergedFilterMetaData);
          }
-      } 
+      }
    }
    
    private static void merge(SecurityRolesMetaData merged, SecurityRolesMetaData xml,

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java	2009-09-18 15:27:56 UTC (rev 93744)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java	2009-09-18 23:53:47 UTC (rev 93745)
@@ -64,7 +64,10 @@
    private boolean asyncSupportedSet = false;
    private boolean enabled = enabledDefault;
    private boolean enabledSet = false;
+   /** Associated security constraints, defined by the @SecurityConstraint annotations */
+   private boolean annotation = false;
    private MultipartConfigMetaData multipartConfig;
+   private List<SecurityConstraintMetaData> securityConstraints = null;
 
    public String getServletName()
    {
@@ -154,6 +157,24 @@
       this.multipartConfig = multipartConfig;
    }
    
+   public List<SecurityConstraintMetaData> getSecurityConstraints()
+   {
+      return securityConstraints;
+   }
+   public void setSecurityConstraints(List<SecurityConstraintMetaData> securityConstraints)
+   {
+      this.securityConstraints = securityConstraints;
+   }
+   
+   public boolean isAnnotation()
+   {
+      return annotation;
+   }
+   public void setAnnotation(boolean annotation)
+   {
+      this.annotation = annotation;
+   }
+
    public ServletMetaData merge(ServletMetaData original)
    {
       ServletMetaData merged = new ServletMetaData();
@@ -199,6 +220,15 @@
          setMultipartConfig(override.multipartConfig);
       else if(original != null && original.multipartConfig != null)
          setMultipartConfig(original.multipartConfig);
+      // Annotation special servlet meta data
+      if(override != null && override.annotation)
+         setAnnotation(override.annotation);
+      else if(original != null && original.annotation)
+         setAnnotation(original.annotation);
+      if(override != null && override.securityConstraints != null)
+         setSecurityConstraints(override.securityConstraints);
+      else if(original != null && original.securityConstraints != null)
+         setSecurityConstraints(original.securityConstraints);
    }
 
    public void augment(ServletMetaData webFragmentMetaData, ServletMetaData webMetaData, boolean resolveConflicts)




More information about the jboss-cvs-commits mailing list