Modify web module descrimination code in DelegateToGlassfishAnnotationScanner http://java.net/jira/browse/GLASSFISH-16847 SECTION: Modified Files ---------------------------- M jsf-ri/src/main/java/com/sun/faces/config/DelegateToGlassFishAnnotationScanner.java - In order to keep JAVASERVERFACES-1995 from re-opening, we need to specifically account for the EAR case and the WAR case when working through the information returned from getAnnotatedClassesInCurrentModule() in the jsf-connector.jar module. M jsf-test/build.xml Hook up new test A jsf-test/GLASSFISH-16847 A jsf-test/GLASSFISH-16847/jsftest A jsf-test/GLASSFISH-16847/jsftest/src A jsf-test/GLASSFISH-16847/jsftest/src/test A jsf-test/GLASSFISH-16847/jsftest/src/test/java A jsf-test/GLASSFISH-16847/jsftest/src/test/java/org A jsf-test/GLASSFISH-16847/jsftest/src/test/java/org/glassfish A jsf-test/GLASSFISH-16847/jsftest/src/test/java/org/glassfish/tests A jsf-test/GLASSFISH-16847/jsftest/src/test/java/org/glassfish/tests/embedded A jsf-test/GLASSFISH-16847/jsftest/src/test/java/org/glassfish/tests/embedded/jsftest A jsf-test/GLASSFISH-16847/jsftest/src/test/java/org/glassfish/tests/embedded/jsftest/JSFTest.java A jsf-test/GLASSFISH-16847/jsftest/src/main A jsf-test/GLASSFISH-16847/jsftest/src/main/java A jsf-test/GLASSFISH-16847/jsftest/src/main/java/test A jsf-test/GLASSFISH-16847/jsftest/src/main/java/org A jsf-test/GLASSFISH-16847/jsftest/src/main/java/org/glassfish A jsf-test/GLASSFISH-16847/jsftest/src/main/java/org/glassfish/tests A jsf-test/GLASSFISH-16847/jsftest/src/main/java/org/glassfish/tests/embedded A jsf-test/GLASSFISH-16847/jsftest/src/main/java/org/glassfish/tests/embedded/jsftest A jsf-test/GLASSFISH-16847/jsftest/src/main/java/org/glassfish/tests/embedded/jsftest/JSFTestServlet.java A jsf-test/GLASSFISH-16847/jsftest/src/main/java/org/glassfish/tests/embedded/jsftest/JSFTestBean.java A jsf-test/GLASSFISH-16847/jsftest/src/main/webapp A jsf-test/GLASSFISH-16847/jsftest/src/main/webapp/index.xhtml A jsf-test/GLASSFISH-16847/jsftest/src/main/webapp/WEB-INF A jsf-test/GLASSFISH-16847/jsftest/src/main/webapp/WEB-INF/sun-web.xml A jsf-test/GLASSFISH-16847/jsftest/src/main/webapp/WEB-INF/web.xml A jsf-test/GLASSFISH-16847/jsftest/pom.xml A jsf-test/GLASSFISH-16847/build.xml - The new test. SECTION: Diffs ---------------------------- Index: jsf-ri/src/main/java/com/sun/faces/config/DelegateToGlassFishAnnotationScanner.java =================================================================== --- jsf-ri/src/main/java/com/sun/faces/config/DelegateToGlassFishAnnotationScanner.java (revision 9175) +++ jsf-ri/src/main/java/com/sun/faces/config/DelegateToGlassFishAnnotationScanner.java (working copy) @@ -45,15 +45,21 @@ import com.sun.faces.util.FacesLogger; import static com.sun.faces.spi.AnnotationScanner.ScannedAnnotation; import java.lang.annotation.Annotation; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.net.URI; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import javax.el.PropertyNotFoundException; +import javax.faces.FacesException; +import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.servlet.ServletContext; @@ -86,9 +92,52 @@ return processClassList(classList); } - + + private String getCurrentWebModulePrefix(ExternalContext extContext) { + String result = null; + Object deploymentContext = extContext.getApplicationMap().get("com.sun.enterprise.web.WebModule.DeploymentContext"); + if (null != deploymentContext) { + try { + // If this module is a war or an exploded war, then this will give the + // prefix. + Method getSource = deploymentContext.getClass().getDeclaredMethod("getSource"); + Object source = getSource.invoke(deploymentContext, (Object[]) null); + if (null != source) { + Method getName = source.getClass().getDeclaredMethod("getName"); + if (null != getName) { + result = (String) getName.invoke(source, (Object[]) null); + } + + } + + } catch (Exception e) { + } + } + if (null == result) { + try { + // If this module is an ear, then this will give the prefix. + Method getModuleUri = deploymentContext.getClass().getMethod("getModuleUri"); + if (null != getModuleUri) { + result = (String) getModuleUri.invoke(deploymentContext, (Object[]) null); + if (null != result && result.endsWith(".war")) { + result = result.substring(0, result.length() - 4); + } + } + + } catch (Exception e) { + + } + } + + if (null == result) { + result = extContext.getApplicationContextPath(); + } + + return result; + } + private void processAnnotations(Set classList) { - String contextPath = FacesContext.getCurrentInstance().getExternalContext().getApplicationContextPath(); + String archiveName = getCurrentWebModulePrefix(FacesContext.getCurrentInstance().getExternalContext()); try { Map> classesByAnnotation = annotationScanner.getAnnotatedClassesInCurrentModule(this.sc); @@ -107,11 +156,11 @@ // If the class is in the current web module boolean currentClassIsInCurrentWebModule = (uriString.endsWith("WEB-INF/classes") || uriString.endsWith("WEB-INF/classes/")) && - uriString.contains(contextPath); + uriString.contains(archiveName); // or it is from a jar that is *not* within a web module... boolean currentClassIsInJarNotInAnyWebModule = uriString.endsWith(".jar") && - !uriString.contains(contextPath) && + !uriString.contains(archiveName) && !uriString.contains("WEB-INF/classes"); if (currentClassIsInCurrentWebModule || currentClassIsInJarNotInAnyWebModule) { Index: jsf-test/build.xml =================================================================== --- jsf-test/build.xml (revision 9175) +++ jsf-test/build.xml (working copy) @@ -62,7 +62,8 @@ value="GLASSFISH-11636, GLASSFISH-15985, JAVASERVERFACES-1856,JAVASERVERFACES-1655, - JAVASERVERFACES-2033" /> + JAVASERVERFACES-2033, + GLASSFISH-16847" /> + + + + + + JSF Test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: jsf-test/GLASSFISH-16847/jsftest/src/main/webapp/WEB-INF/sun-web.xml =================================================================== --- jsf-test/GLASSFISH-16847/jsftest/src/main/webapp/WEB-INF/sun-web.xml (revision 0) +++ jsf-test/GLASSFISH-16847/jsftest/src/main/webapp/WEB-INF/sun-web.xml (revision 0) @@ -0,0 +1,51 @@ + + + + + + /hellojsf + + + + Keep a copy of the generated servlet class' java code. + + + Index: jsf-test/GLASSFISH-16847/jsftest/src/main/webapp/WEB-INF/web.xml =================================================================== --- jsf-test/GLASSFISH-16847/jsftest/src/main/webapp/WEB-INF/web.xml (revision 0) +++ jsf-test/GLASSFISH-16847/jsftest/src/main/webapp/WEB-INF/web.xml (revision 0) @@ -0,0 +1,72 @@ + + + + + + javax.faces.PROJECT_STAGE + Development + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + JSFTestServlet + org.glassfish.tests.embedded.jsftest.JSFTestServlet + + + Faces Servlet + /faces/* + + + JSFTestServlet + /JSFTestServlet + + + + 30 + + + + faces/index.xhtml + + Index: jsf-test/GLASSFISH-16847/jsftest/pom.xml =================================================================== --- jsf-test/GLASSFISH-16847/jsftest/pom.xml (revision 0) +++ jsf-test/GLASSFISH-16847/jsftest/pom.xml (revision 0) @@ -0,0 +1,103 @@ + + + + + 4.0.0 + + org.glassfish.tests.embedded.maven-plugin + jsftest + war + 3.2-SNAPSHOT + Test JSF (maven-plugin/jsftest) + + + install + src/test/java + jsftest + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-war-plugin + + false + + + + + + + + org.jvnet.wagon-svn + wagon-svn + 1.8 + + + + + + + javax.faces + jsf-api + 2.1 + provided + + + javax + javaee-api + 6.0 + provided + + + + + Index: jsf-test/GLASSFISH-16847/build.xml =================================================================== --- jsf-test/GLASSFISH-16847/build.xml (revision 0) +++ jsf-test/GLASSFISH-16847/build.xml (revision 0) @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SECTION: New Files ---------------------------- SEE ATTACHMENTS