[jboss-cvs] JBossAS SVN: r106181 - projects/jboss-jsf-int/trunk/jsf-deployer/src/main/java/org/jboss/jsf/deployer.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jun 18 16:28:28 EDT 2010


Author: stan.silvert at jboss.com
Date: 2010-06-18 16:28:27 -0400 (Fri, 18 Jun 2010)
New Revision: 106181

Modified:
   projects/jboss-jsf-int/trunk/jsf-deployer/src/main/java/org/jboss/jsf/deployer/JSFImplManagementDeployer.java
Log:
JBAS-8112 JSF Deployer fails if FacesServlet declared in web-fragment.xml


Modified: projects/jboss-jsf-int/trunk/jsf-deployer/src/main/java/org/jboss/jsf/deployer/JSFImplManagementDeployer.java
===================================================================
--- projects/jboss-jsf-int/trunk/jsf-deployer/src/main/java/org/jboss/jsf/deployer/JSFImplManagementDeployer.java	2010-06-18 20:17:36 UTC (rev 106180)
+++ projects/jboss-jsf-int/trunk/jsf-deployer/src/main/java/org/jboss/jsf/deployer/JSFImplManagementDeployer.java	2010-06-18 20:28:27 UTC (rev 106181)
@@ -34,6 +34,8 @@
 import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
 import org.jboss.metadata.javaee.spec.ParamValueMetaData;
 import org.jboss.metadata.web.spec.ServletMetaData;
+import org.jboss.metadata.web.spec.ServletsMetaData;
+import org.jboss.metadata.web.spec.WebFragmentMetaData;
 import org.jboss.metadata.web.spec.WebMetaData;
 import org.jboss.util.StringPropertyReplacer;
 
@@ -129,14 +131,24 @@
        return jsfImplMetatData.get(implName);
     }
 
-    private boolean isJSFDeployment(WebMetaData metaData)
+    private boolean isJSFDeployment(VFSDeploymentUnit unit, WebMetaData metaData)
     {
        if (getContextParam(JSF_CONFIG_PARAM, metaData) != null) return true;
 
-       // need to check in web fragments as well?
-       if (metaData.getServlets() == null) return false;
+       // is a JSF servlet in WEB-INF/web.xml?
+       if (hasJSFServlet(metaData.getServlets())) return true;
 
-       for (ServletMetaData servletMetaData : metaData.getServlets())
+       // is a JSF servlet in a web-fragment.xml?
+       if (isJSFServletInWebFragment(unit)) return true;
+
+        return false;
+    }
+
+    private boolean hasJSFServlet(ServletsMetaData servlets)
+    {
+       if (servlets == null) return false;
+
+       for (ServletMetaData servletMetaData : servlets)
        {
           String servletClass = servletMetaData.getServletClass();
           if (this.facesServlets.contains(servletClass))
@@ -145,9 +157,27 @@
           }
        }
 
-        return false;
+       return false;
     }
 
+    private boolean isJSFServletInWebFragment(VFSDeploymentUnit unit)
+    {
+       String fragmentName = WebFragmentMetaData.class.getName();
+       Map<String, Object> attachments = unit.getAttachments();
+
+       for (Map.Entry<String, Object> entry : attachments.entrySet())
+       {
+          WebFragmentMetaData fragment = null;
+          if (entry.getKey().startsWith(fragmentName))
+          {
+             fragment = (WebFragmentMetaData)entry.getValue();
+             if (hasJSFServlet(fragment.getServlets())) return true;
+          }
+       }
+
+       return false;
+    }
+
     private String getContextParam(String paramName, WebMetaData metaData)
     {
        List<ParamValueMetaData> contextParams = metaData.getContextParams();
@@ -173,7 +203,7 @@
     @Override
     public void deploy(VFSDeploymentUnit unit, WebMetaData metaData) throws DeploymentException
     {
-        if (!isJSFDeployment(metaData) || isWarBundlesJSF(metaData)) return;
+        if (!isJSFDeployment(unit, metaData) || isWarBundlesJSF(metaData)) return;
         
         JSFImplMetaData jsfImpl = findWhichJSFImplToUse(metaData);
         unit.addAttachment(JSFImplMetaData.class, jsfImpl);



More information about the jboss-cvs-commits mailing list