[jboss-cvs] JBossAS SVN: r109242 - in trunk: resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers and 37 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 10 13:48:57 EST 2010


Author: bill.burke at jboss.com
Date: 2010-11-10 13:48:56 -0500 (Wed, 10 Nov 2010)
New Revision: 109242

Added:
   trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentData.java
   trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyProviderFactoryInitializer.java
   trunk/resteasy-int/test/application-scanned-ejb-war/
   trunk/resteasy-int/test/application-scanned-ejb-war/pom.xml
   trunk/resteasy-int/test/application-scanned-ejb-war/src/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/AppConfig.java
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyException.java
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyExceptionMapper.java
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyResource.java
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyResourceBean.java
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/webapp/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/webapp/WEB-INF/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/webapp/WEB-INF/web.xml
   trunk/resteasy-int/test/application-scanned-ejb-war/src/main/webapp/index.jsp
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/java/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/java/org/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/java/org/jboss/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/java/org/jboss/resteasy/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/java/org/jboss/resteasy/test/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/java/org/jboss/resteasy/test/jboss/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/java/org/jboss/resteasy/test/jboss/EjbTest.java
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/resources/
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/resources/jndi.properties
   trunk/resteasy-int/test/application-scanned-ejb-war/src/test/resources/log4j.xml
   trunk/resteasy-int/test/application-uses-scanning/
   trunk/resteasy-int/test/application-uses-scanning/pom.xml
   trunk/resteasy-int/test/application-uses-scanning/src/
   trunk/resteasy-int/test/application-uses-scanning/src/main/
   trunk/resteasy-int/test/application-uses-scanning/src/main/java/
   trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/
   trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/
   trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/
   trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/
   trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/AppConfig.java
   trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyContextResolver.java
   trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyIntf.java
   trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyIntfResource.java
   trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyResource.java
   trunk/resteasy-int/test/application-uses-scanning/src/main/webapp/
   trunk/resteasy-int/test/application-uses-scanning/src/main/webapp/WEB-INF/
   trunk/resteasy-int/test/application-uses-scanning/src/main/webapp/WEB-INF/web.xml
   trunk/resteasy-int/test/application-uses-scanning/src/main/webapp/index.jsp
   trunk/resteasy-int/test/application-uses-scanning/src/test/
   trunk/resteasy-int/test/application-uses-scanning/src/test/java/
   trunk/resteasy-int/test/application-uses-scanning/src/test/java/org/
   trunk/resteasy-int/test/application-uses-scanning/src/test/java/org/jboss/
   trunk/resteasy-int/test/application-uses-scanning/src/test/java/org/jboss/resteasy/
   trunk/resteasy-int/test/application-uses-scanning/src/test/java/org/jboss/resteasy/test/
   trunk/resteasy-int/test/application-uses-scanning/src/test/java/org/jboss/resteasy/test/jboss/
   trunk/resteasy-int/test/application-uses-scanning/src/test/java/org/jboss/resteasy/test/jboss/ScanningTest.java
   trunk/resteasy-int/test/application-uses-scanning/src/test/resources/
   trunk/resteasy-int/test/application-uses-scanning/src/test/resources/jndi.properties
   trunk/resteasy-int/test/application-uses-scanning/src/test/resources/log4j.xml
Modified:
   trunk/component-matrix/pom.xml
   trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java
   trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyIntegrationDeployer.java
   trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyScannerDeployer.java
   trunk/resteasy-int/test/pom.xml
Log:
resteasy update/fixes

Modified: trunk/component-matrix/pom.xml
===================================================================
--- trunk/component-matrix/pom.xml	2010-11-10 18:32:44 UTC (rev 109241)
+++ trunk/component-matrix/pom.xml	2010-11-10 18:48:56 UTC (rev 109242)
@@ -121,7 +121,7 @@
     <version.org.jboss.profileservice>0.1.0.Alpha1</version.org.jboss.profileservice>
     <version.org.jboss.reflect>2.2.0.Alpha9</version.org.jboss.reflect>
     <version.org.jboss.reloaded.naming>0.2.0</version.org.jboss.reloaded.naming>
-    <version.org.jboss.resteasy>2.0.0.GA</version.org.jboss.resteasy>
+    <version.org.jboss.resteasy>2.1-beta-1</version.org.jboss.resteasy>
     <version.org.jboss.remoting>2.5.3</version.org.jboss.remoting>
     <version.org.jboss.remoting3>3.1.0.Beta2</version.org.jboss.remoting3>
     <version.org.jboss.remoting3.metadata>1.0.0.Beta2</version.org.jboss.remoting3.metadata>

Added: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentData.java
===================================================================
--- trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentData.java	                        (rev 0)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyDeploymentData.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,133 @@
+package org.jboss.resteasy.integration.deployers;
+
+import javax.ws.rs.core.Application;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+public class ResteasyDeploymentData
+{
+   private boolean scanAll;
+   private boolean scanResources;
+   private boolean scanProviders;
+   private boolean dispatcherCreated;
+   private Set<String> scannedResourceClasses = new LinkedHashSet<String>();
+   private Set<String> scannedProviderClasses = new LinkedHashSet<String>();
+   private Class<? extends Application> scannedApplicationClass;
+   private boolean bootClasses;
+   private boolean unwrappedExceptionsParameterSet;
+   private Set<String> scannedJndiComponentResources = new LinkedHashSet<String>();
+
+   public Set<String> getScannedJndiComponentResources()
+   {
+      return scannedJndiComponentResources;
+   }
+
+   public void setScannedJndiComponentResources(Set<String> scannedJndiComponentResources)
+   {
+      this.scannedJndiComponentResources = scannedJndiComponentResources;
+   }
+
+   public boolean isDispatcherCreated()
+   {
+      return dispatcherCreated;
+   }
+
+   public void setDispatcherCreated(boolean dispatcherCreated)
+   {
+      this.dispatcherCreated = dispatcherCreated;
+   }
+
+   public Class<? extends Application> getScannedApplicationClass()
+   {
+      return scannedApplicationClass;
+   }
+
+   public void setScannedApplicationClass(Class<? extends Application> scannedApplicationClass)
+   {
+      this.scannedApplicationClass = scannedApplicationClass;
+   }
+
+   public boolean hasBootClasses()
+   {
+      return bootClasses;
+   }
+
+   public void setBootClasses(boolean bootClasses)
+   {
+      this.bootClasses = bootClasses;
+   }
+
+   public boolean shouldScan()
+   {
+      return scanAll || scanResources || scanProviders;
+   }
+
+   public boolean isScanAll()
+   {
+      return scanAll;
+   }
+
+   public void setScanAll(boolean scanAll)
+   {
+      if (scanAll)
+      {
+         scanResources = true;
+         scanProviders = true;
+      }
+      this.scanAll = scanAll;
+   }
+
+   public boolean isScanResources()
+   {
+      return scanResources;
+   }
+
+   public void setScanResources(boolean scanResources)
+   {
+      this.scanResources = scanResources;
+   }
+
+   public boolean isScanProviders()
+   {
+      return scanProviders;
+   }
+
+   public void setScanProviders(boolean scanProviders)
+   {
+      this.scanProviders = scanProviders;
+   }
+
+   public Set<String> getScannedResourceClasses()
+   {
+      return scannedResourceClasses;
+   }
+
+   public void setScannedResourceClasses(Set<String> scannedResourceClasses)
+   {
+      this.scannedResourceClasses = scannedResourceClasses;
+   }
+
+   public Set<String> getScannedProviderClasses()
+   {
+      return scannedProviderClasses;
+   }
+
+   public void setScannedProviderClasses(Set<String> scannedProviderClasses)
+   {
+      this.scannedProviderClasses = scannedProviderClasses;
+   }
+
+   public boolean isUnwrappedExceptionsParameterSet()
+   {
+      return unwrappedExceptionsParameterSet;
+   }
+
+   public void setUnwrappedExceptionsParameterSet(boolean unwrappedExceptionsParameterSet)
+   {
+      this.unwrappedExceptionsParameterSet = unwrappedExceptionsParameterSet;
+   }
+}

Modified: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java
===================================================================
--- trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java	2010-11-10 18:32:44 UTC (rev 109241)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyEjbDeployer.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -11,7 +11,6 @@
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
-import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters;
 import org.jboss.resteasy.util.GetRestful;
 
 import javax.ejb.Local;
@@ -33,7 +32,7 @@
       super();
 
       addRequiredInput(JBossWebMetaData.class);
-      addRequiredInput(ResteasyDeploymentScanningData.class);
+      addRequiredInput(ResteasyDeploymentData.class);
       addRequiredInput(MergedJBossMetaDataDeployer.EJB_MERGED_ATTACHMENT_NAME);
       addOutput(JBossWebMetaData.class);
       setStage(DeploymentStages.PRE_REAL); // TODO -- right stage?
@@ -41,7 +40,7 @@
 
    protected void internalDeploy(DeploymentUnit du) throws DeploymentException
    {
-      ResteasyDeploymentScanningData resteasy = du.getAttachment(ResteasyDeploymentScanningData.class);
+      ResteasyDeploymentData resteasy = du.getAttachment(ResteasyDeploymentData.class);
 
       /*
       log.info("*******************");
@@ -59,11 +58,9 @@
       if (!resteasy.isScanResources()) return;
       if (((VFSDeploymentUnit) du).getMetaDataFile("beans.xml") != null) return;
 
-      JBossWebMetaData webdata = du.getAttachment(JBossWebMetaData.class);
       JBossMetaData ejbs = (JBossMetaData) du
               .getAttachment(MergedJBossMetaDataDeployer.EJB_MERGED_ATTACHMENT_NAME);
       ClassLoader loader = du.getClassLoader();
-      StringBuffer buf = null;
       for (final JBossEnterpriseBeanMetaData ejb : ejbs.getEnterpriseBeans())
       {
          Class ejbClass = null;
@@ -78,26 +75,13 @@
          if (!GetRestful.isRootResource(ejbClass)) continue;
          String jndiName = getLocalJndiName(ejb, ejbClass);
          log.debug("Found JAX-RS EJB: " + ejbClass.getName() + " local jndi name: " + jndiName);
-         if (buf == null)
-         {
-            buf = new StringBuffer();
-         }
-         else
-         {
-            buf.append(",");
-         }
+         StringBuffer buf = new StringBuffer();
          buf.append(jndiName).append(";").append(ejbClass.getName()).append(";").append("true");
 
+         resteasy.getScannedJndiComponentResources().add(buf.toString());
          // make sure its removed from list
-         resteasy.getResources().remove(ejbClass.getName());
+         resteasy.getScannedResourceClasses().remove(ejbClass.getName());
       }
-      if (buf != null)
-      {
-         resteasy.createDispatcher();
-         String paramValue = buf.toString();
-         log.debug("*** Adding RESTEasy JNDi Component Resources: " + paramValue);
-         ResteasyIntegrationDeployer.setContextParameter(webdata, ResteasyContextParameters.RESTEASY_JNDI_COMPONENT_RESOURCES, paramValue);
-      }
    }
 
    private static String getLocalJndiName(JBossEnterpriseBeanMetaData ejb, Class<?> ejbClass)

Modified: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyIntegrationDeployer.java
===================================================================
--- trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyIntegrationDeployer.java	2010-11-10 18:32:44 UTC (rev 109241)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyIntegrationDeployer.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -32,7 +32,7 @@
       super();
 
       addRequiredInput(JBossWebMetaData.class);
-      addRequiredInput(ResteasyDeploymentScanningData.class);
+      addRequiredInput(ResteasyDeploymentData.class);
       addOutput(JBossWebMetaData.class);
       setStage(DeploymentStages.PRE_REAL); // TODO -- right stage?
    }
@@ -90,12 +90,13 @@
    protected void internalDeploy(DeploymentUnit du) throws DeploymentException
    {
       JBossWebMetaData webdata = du.getAttachment(JBossWebMetaData.class);
-      ResteasyDeploymentScanningData resteasy = du.getAttachment(ResteasyDeploymentScanningData.class);
+      ResteasyDeploymentData resteasy = du.getAttachment(ResteasyDeploymentData.class);
+      if (resteasy == null) return;
 
-      if (!resteasy.getResources().isEmpty())
+      if (!resteasy.getScannedResourceClasses().isEmpty())
       {
          StringBuffer buf = null;
-         for (String resource : resteasy.getResources())
+         for (String resource : resteasy.getScannedResourceClasses())
          {
             if (buf == null)
             {
@@ -108,13 +109,13 @@
             }
          }
          String resources = buf.toString();
-         log.debug("*** Adding JAX-RS resource classes: " + resources);
-         setContextParameter(webdata, ResteasyContextParameters.RESTEASY_RESOURCES, resources);
+         log.info("*** Adding JAX-RS resource classes: " + resources);
+         setContextParameter(webdata, ResteasyContextParameters.RESTEASY_SCANNED_RESOURCES, resources);
       }
-      if (!resteasy.getProviders().isEmpty())
+      if (!resteasy.getScannedProviderClasses().isEmpty())
       {
          StringBuffer buf = null;
-         for (String provider : resteasy.getProviders())
+         for (String provider : resteasy.getScannedProviderClasses())
          {
             if (buf == null)
             {
@@ -127,18 +128,38 @@
             }
          }
          String providers = buf.toString();
-         log.debug("*** Adding JAX-RS provider classes: " + providers);
-         setContextParameter(webdata, ResteasyContextParameters.RESTEASY_PROVIDERS, providers);
+         log.info("*** Adding JAX-RS provider classes: " + providers);
+         setContextParameter(webdata, ResteasyContextParameters.RESTEASY_SCANNED_PROVIDERS, providers);
       }
 
+      if (!resteasy.getScannedJndiComponentResources().isEmpty())
+      {
+         StringBuffer buf = null;
+         for (String resource : resteasy.getScannedJndiComponentResources())
+         {
+            if (buf == null)
+            {
+               buf = new StringBuffer();
+               buf.append(resource);
+            }
+            else
+            {
+               buf.append(",").append(resource);
+            }
+         }
+         String providers = buf.toString();
+         log.info("*** Adding JAX-RS jndi component resource classes: " + providers);
+         setContextParameter(webdata, ResteasyContextParameters.RESTEASY_SCANNED_JNDI_RESOURCES, providers);
+      }
+
       boolean useScannedApplicationClass = false;
 
-      if (resteasy.getApplicationClass() != null)
+      if (resteasy.getScannedApplicationClass() != null)
       {
          if (findContextParam(webdata, "javax.ws.rs.Application") == null)
          {
             useScannedApplicationClass = true;
-            setContextParameter(webdata, "javax.ws.rs.Application", resteasy.getApplicationClass().getName());
+            setContextParameter(webdata, "javax.ws.rs.Application", resteasy.getScannedApplicationClass().getName());
          }
       }
 
@@ -162,7 +183,11 @@
          setContextParameter(webdata, ResteasyContextParameters.RESTEASY_UNWRAPPED_EXCEPTIONS, "javax.ejb.EJBException");
       }
 
-      if (resteasy.hasBootClasses()) return;
+      if (resteasy.hasBootClasses() || resteasy.isDispatcherCreated()) return;
+      if (resteasy.getScannedApplicationClass() == null
+              && resteasy.getScannedJndiComponentResources().isEmpty()
+              && resteasy.getScannedProviderClasses().isEmpty()
+              && resteasy.getScannedResourceClasses().isEmpty()) return; 
 
       FilterMetaData filter = new FilterMetaData();
       filter.setFilterClass(Filter30Dispatcher.class.getName());
@@ -172,12 +197,25 @@
       FilterMappingMetaData mapping = new FilterMappingMetaData();
       mapping.setFilterName("Resteasy");
       List<String> patterns = new ArrayList<String>();
-      if (useScannedApplicationClass && resteasy.getApplicationClass().isAnnotationPresent(ApplicationPath.class))
+      if (useScannedApplicationClass && resteasy.getScannedApplicationClass().isAnnotationPresent(ApplicationPath.class))
       {
-         ApplicationPath path = resteasy.getApplicationClass().getAnnotation(ApplicationPath.class);
-         String pathValue = path.value();
-         patterns.add(pathValue + "/*");
-         setContextParameter(webdata, "resteasy.servlet.mapping.prefix", pathValue);
+         ApplicationPath path = resteasy.getScannedApplicationClass().getAnnotation(ApplicationPath.class);
+         String pathValue = path.value().trim();
+         if (!pathValue.startsWith("/"))
+         {
+            pathValue = "/" + pathValue;
+         }
+         String prefix = pathValue;
+         if (pathValue.endsWith("/"))
+         {
+            pathValue += "*";
+         }
+         else
+         {
+            pathValue += "/*";
+         }
+         patterns.add(pathValue);
+         setContextParameter(webdata, "resteasy.servlet.mapping.prefix", prefix);
       }
       else
       {

Added: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyProviderFactoryInitializer.java
===================================================================
--- trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyProviderFactoryInitializer.java	                        (rev 0)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyProviderFactoryInitializer.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,38 @@
+package org.jboss.resteasy.integration.deployers;
+
+import org.jboss.resteasy.core.ThreadLocalResteasyProviderFactory;
+import org.jboss.resteasy.spi.ResteasyProviderFactory;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+public class ResteasyProviderFactoryInitializer
+{
+   private boolean useThreadLocalFactory = true;
+
+   public boolean isUseThreadLocalFactory()
+   {
+      return useThreadLocalFactory;
+   }
+
+   public void setUseThreadLocalFactory(boolean useThreadLocalFactory)
+   {
+      this.useThreadLocalFactory = useThreadLocalFactory;
+   }
+
+   public void start()
+   {
+      ResteasyProviderFactory instance = ResteasyProviderFactory.getInstance();
+      if (useThreadLocalFactory)
+      {
+         ThreadLocalResteasyProviderFactory factory = new ThreadLocalResteasyProviderFactory(instance);
+         ResteasyProviderFactory.setInstance(factory);
+      }
+   }
+
+   public void stop()
+   {
+      ResteasyProviderFactory.setInstance(null);
+   }
+}

Modified: trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyScannerDeployer.java
===================================================================
--- trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyScannerDeployer.java	2010-11-10 18:32:44 UTC (rev 109241)
+++ trunk/resteasy-int/jar/src/main/java/org/jboss/resteasy/integration/deployers/ResteasyScannerDeployer.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -10,6 +10,7 @@
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
 import org.jboss.metadata.web.spec.FilterMetaData;
 import org.jboss.metadata.web.spec.ServletMetaData;
+import org.jboss.resteasy.plugins.server.servlet.Filter30Dispatcher;
 import org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher;
 import org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrapClasses;
 import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters;
@@ -21,6 +22,7 @@
 import javax.ws.rs.Path;
 import javax.ws.rs.core.Application;
 import javax.ws.rs.ext.Provider;
+import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -52,18 +54,13 @@
       addRequiredInput(JBossWebMetaData.class);
       addInput(AnnotationRepository.class);
       addOutput(JBossWebMetaData.class);
-      addOutput(ResteasyDeploymentScanningData.class);
+      addOutput(ResteasyDeploymentData.class);
       setStage(DeploymentStages.PRE_REAL); // TODO -- right stage?
    }
 
    protected void internalDeploy(DeploymentUnit du) throws DeploymentException
    {
       JBossWebMetaData webdata = du.getAttachment(JBossWebMetaData.class);
-      boolean applicationClassDeployed = deployApplicationClass(du, webdata);
-
-      // If an Application class is present, we assume the user wants to totally control deployment
-      if (applicationClassDeployed) return;
-
       scan(du, webdata);
 
    }
@@ -78,7 +75,6 @@
     */
    protected boolean hasBootClasses(DeploymentUnit du, JBossWebMetaData webdata) throws DeploymentException
    {
-      ClassLoader loader = du.getClassLoader();
       if (webdata.getServlets() != null)
       {
          for (ServletMetaData servlet : webdata.getServlets())
@@ -98,86 +94,34 @@
 
    }
 
-   protected boolean deployApplicationClass(DeploymentUnit du, JBossWebMetaData webdata) throws DeploymentException
-   {
-      ClassLoader loader = du.getClassLoader();
-      if (webdata.getServlets() == null) return false;
-
-      for (ServletMetaData servlet : webdata.getServlets())
-      {
-         String servletClass = servlet.getServletClass();
-         if (servletClass == null) continue;
-         Class clazz = null;
-         try
-         {
-            clazz = loader.loadClass(servletClass);
-         }
-         catch (ClassNotFoundException e)
-         {
-            throw new DeploymentException(e);
-         }
-         if (Application.class.isAssignableFrom(clazz))
-         {
-            servlet.setServletClass(HttpServlet30Dispatcher.class.getName());
-            servlet.setAsyncSupported(true);
-            ParamValueMetaData param = new ParamValueMetaData();
-            param.setParamName("javax.ws.rs.Application");
-            param.setParamValue(servletClass);
-            List<ParamValueMetaData> params = servlet.getInitParam();
-            if (params == null)
-            {
-               params = new ArrayList<ParamValueMetaData>();
-               servlet.setInitParam(params);
-            }
-            params.add(param);
-
-            try
-            {
-               Thread.currentThread().getContextClassLoader().loadClass(ResteasyIntegrationDeployer.CDI_INJECTOR_FACTORY_CLASS);
-               // don't set this param if it is not in classpath
-               if (((VFSDeploymentUnit) du).getMetaDataFile("beans.xml") != null)
-               {
-                  ResteasyIntegrationDeployer.setContextParameter(webdata, "resteasy.injector.factory", ResteasyIntegrationDeployer.CDI_INJECTOR_FACTORY_CLASS);
-               }
-            }
-            catch (ClassNotFoundException ignored)
-            {
-            }
-            return true;
-         }
-      }
-      return false;
-
-   }
-
-   protected void addApplicationClass(Class<? extends Application> applicationClass, DeploymentUnit du, JBossWebMetaData webdata)
-   {
-
-   }
-
    protected void scan(DeploymentUnit du, JBossWebMetaData webdata)
            throws DeploymentException
    {
-      ResteasyDeploymentScanningData scanningData = new ResteasyDeploymentScanningData();
+      ResteasyDeploymentData resteasyDeploymentData = new ResteasyDeploymentData();
+      du.addAttachment(ResteasyDeploymentData.class, resteasyDeploymentData);
 
       // If there is a resteasy boot class in web.xml, then the default should be to not scan
+      // make sure this call happens before checkDeclaredApplicationClassAsServlet!!!
       boolean hasBoot = hasBootClasses(du, webdata);
-      scanningData.setBootClasses(hasBoot);
+      resteasyDeploymentData.setBootClasses(hasBoot);
 
+      Class declaredApplicationClass = checkDeclaredApplicationClassAsServlet(du, webdata);
+      // Assume that checkDeclaredApplicationClassAsServlet created the dispatcher
+      if (declaredApplicationClass != null) resteasyDeploymentData.setDispatcherCreated(true);
+
+
+      // set scanning on only if there are no boot classes
       if (hasBoot == false && !webdata.isMetadataComplete())
       {
-         scanningData.setScanAll(true);
-         scanningData.setScanProviders(true);
-         scanningData.setScanResources(true);
+         resteasyDeploymentData.setScanAll(true);
+         resteasyDeploymentData.setScanProviders(true);
+         resteasyDeploymentData.setScanResources(true);
       }
 
       // check resteasy configuration flags
 
 
       List<ParamValueMetaData> contextParams = webdata.getContextParams();
-      boolean hasResourceParam = false;
-      boolean hasProviderParam = false;
-      boolean hasJndiParam = false;
 
       if (contextParams != null)
       {
@@ -185,96 +129,68 @@
          {
             if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_SCAN))
             {
-               scanningData.setScanAll(Boolean.valueOf(param.getParamValue()));
+               resteasyDeploymentData.setScanAll(Boolean.valueOf(param.getParamValue()));
             }
             else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_SCAN_PROVIDERS))
             {
-               scanningData.setScanProviders(Boolean.valueOf(param.getParamValue()));
+               resteasyDeploymentData.setScanProviders(Boolean.valueOf(param.getParamValue()));
             }
             else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_SCAN_RESOURCES))
             {
-               scanningData.setScanResources(Boolean.valueOf(param.getParamValue()));
+               resteasyDeploymentData.setScanResources(Boolean.valueOf(param.getParamValue()));
             }
-            else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_RESOURCES))
-            {
-               hasResourceParam = true;
-            }
-            else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_PROVIDERS))
-            {
-               hasProviderParam = true;
-            }
-            else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_JNDI_RESOURCES))
-            {
-               hasJndiParam = true;
-            }
             else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_UNWRAPPED_EXCEPTIONS))
             {
-               scanningData.setUnwrappedExceptionsParameterSet(true);
+               resteasyDeploymentData.setUnwrappedExceptionsParameterSet(true);
             }
          }
       }
 
-      if (hasResourceParam)
+      if (!resteasyDeploymentData.shouldScan())
       {
-         scanningData.setScanAll(false);
-         scanningData.setScanResources(false);
-      }
-
-      if (hasProviderParam)
-      {
-         scanningData.setScanAll(false);
-         scanningData.setScanProviders(false);
-      }
-
-      if (!scanningData.shouldScan())
-      {
-         if (hasResourceParam || hasProviderParam || hasJndiParam)
-         {
-            if (hasBoot == false)
-            {
-               scanningData.createDispatcher();
-               du.addAttachment(ResteasyDeploymentScanningData.class, scanningData);
-            }
-         }
          return;
       }
-      else
-      {
-      }
 
-      du.addAttachment(ResteasyDeploymentScanningData.class, scanningData);
-
-      // look for Application class, return if there is one
-
-      HierarchyIndex hier = du.getAttachment(HierarchyIndex.class);
-      if (hier != null)
+      // look for Application class.  Don't scan for one if there is a declared one.
+      if (declaredApplicationClass == null)
       {
-         Set<Class<? extends Application>> applicationClass = hier.getSubClassesOf(null, Application.class);
-         if (applicationClass != null)
+         HierarchyIndex hier = du.getAttachment(HierarchyIndex.class);
+         if (hier != null)
          {
-            if (applicationClass.size() > 1)
+            Set<Class<? extends Application>> applicationClass = hier.getSubClassesOf(null, Application.class);
+            if (applicationClass != null)
             {
-               StringBuilder builder = new StringBuilder("Only one JAX-RS Application Class allowed.");
-               for (Class c : applicationClass)
+               if (applicationClass.size() > 1)
                {
-                  builder.append(" ").append(c.getName());
+                  StringBuilder builder = new StringBuilder("Only one JAX-RS Application Class allowed.");
+                  Set<Class<? extends Application>> aClasses = new HashSet<Class<? extends Application>>();
+                  for (Class c : applicationClass)
+                  {
+                     if (!c.isAnonymousClass() && !Modifier.isAbstract(c.getModifiers()))
+                     {
+                        aClasses.add(c);
+                     }
+                     builder.append(" ").append(c.getName());
+                  }
+                  if (aClasses.size() > 1) throw new DeploymentException(builder.toString());
+                  else if (aClasses.size() == 1)
+                  {
+                     Class<? extends Application> aClass = applicationClass.iterator().next();
+                     resteasyDeploymentData.setScannedApplicationClass(aClass);
+                  }
                }
-               throw new DeploymentException(builder.toString());
+               else if (applicationClass.size() == 1)
+               {
+                  Class<? extends Application> aClass = applicationClass.iterator().next();
+                  resteasyDeploymentData.setScannedApplicationClass(aClass);
+               }
             }
-            else if (applicationClass.size() == 1)
-            {
-               Class<? extends Application> aClass = applicationClass.iterator().next();
-               scanningData.setApplicationClass(aClass);
-
-               // don't scan for anything else
-               return;
-            }
          }
+         else
+         {
+            LOGGER.debug("Expecting HierarchyIndex class for scanning WAR for JAX-RS Application class");
+         }
       }
-      else
-      {
-         LOGGER.debug("Expecting HierarchyIndex class for scanning WAR for JAX-RS Application class");
-      }
 
       // Looked for annotated resources and providers
       AnnotationIndex env = du.getAttachment(AnnotationIndex.class);
@@ -287,11 +203,11 @@
 
       Set<Element<Path, Class<?>>> resources = null;
       Set<Element<Provider, Class<?>>> providers = null;
-      if (scanningData.isScanResources())
+      if (resteasyDeploymentData.isScanResources())
       {
          resources = env.classIsAnnotatedWith(Path.class);
       }
-      if (scanningData.isScanProviders())
+      if (resteasyDeploymentData.isScanProviders())
       {
          providers = env.classIsAnnotatedWith(Provider.class);
       }
@@ -306,7 +222,7 @@
             {
                continue;
             }
-            scanningData.getResources().add(e.getOwnerClassName());
+            resteasyDeploymentData.getScannedResourceClasses().add(e.getOwnerClassName());
          }
       }
       if (providers != null)
@@ -314,12 +230,65 @@
          for (Element e : providers)
          {
             if (e.getOwner().isInterface()) continue;
-            scanningData.getProviders().add(e.getOwnerClassName());
+            resteasyDeploymentData.getScannedProviderClasses().add(e.getOwnerClassName());
          }
       }
 
       Set<String> strings = env.classesImplementingInterfacesAnnotatedWith(Path.class.getName());
-      scanningData.getResources().addAll(strings);
+      resteasyDeploymentData.getScannedResourceClasses().addAll(strings);
    }
 
+   protected Class checkDeclaredApplicationClassAsServlet(DeploymentUnit du, JBossWebMetaData webdata) throws DeploymentException
+   {
+      ClassLoader loader = du.getClassLoader();
+      if (webdata.getServlets() == null) return null;
+
+      for (ServletMetaData servlet : webdata.getServlets())
+      {
+         String servletClass = servlet.getServletClass();
+         if (servletClass == null) continue;
+         Class clazz = null;
+         try
+         {
+            clazz = loader.loadClass(servletClass);
+         }
+         catch (ClassNotFoundException e)
+         {
+            throw new DeploymentException(e);
+         }
+         if (Application.class.isAssignableFrom(clazz))
+         {
+            servlet.setServletClass(HttpServlet30Dispatcher.class.getName());
+            servlet.setAsyncSupported(true);
+            ParamValueMetaData param = new ParamValueMetaData();
+            param.setParamName("javax.ws.rs.Application");
+            param.setParamValue(servletClass);
+            List<ParamValueMetaData> params = servlet.getInitParam();
+            if (params == null)
+            {
+               params = new ArrayList<ParamValueMetaData>();
+               servlet.setInitParam(params);
+            }
+            params.add(param);
+
+            try
+            {
+               Thread.currentThread().getContextClassLoader().loadClass(ResteasyIntegrationDeployer.CDI_INJECTOR_FACTORY_CLASS);
+               // don't set this param if it is not in classpath
+               if (((VFSDeploymentUnit) du).getMetaDataFile("beans.xml") != null)
+               {
+                  ResteasyIntegrationDeployer.setContextParameter(webdata, "resteasy.injector.factory", ResteasyIntegrationDeployer.CDI_INJECTOR_FACTORY_CLASS);
+               }
+            }
+            catch (ClassNotFoundException ignored)
+            {
+            }
+            return clazz;
+         }
+      }
+      return null;
+   }
+
+   
+
 }

Added: trunk/resteasy-int/test/application-scanned-ejb-war/pom.xml
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/pom.xml	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/pom.xml	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,95 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <parent>
+        <groupId>org.jboss.jbossas</groupId>
+        <artifactId>jboss-as-parent</artifactId>
+        <version>6.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.jboss.jbossas.resteasy.test</groupId>
+    <artifactId>application-scanned-ejb-test</artifactId>
+    <packaging>war</packaging>
+    <name>Basic Integration Test</name>
+    <url>http://maven.apache.org</url>
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>resteasy-jaxrs</artifactId>
+            <version>${version.org.jboss.resteasy}</version>
+            <scope>provided</scope>
+        </dependency>
+      <dependency>
+           <groupId>org.jboss.spec.javax.ejb</groupId>
+           <artifactId>jboss-ejb-api_3.1_spec</artifactId>
+           <scope>provided</scope>
+      </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.1</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <finalName>ejb-test</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>jboss-maven-plugin</artifactId>
+                <version>1.3.1</version>
+                <configuration>
+                    <jbossHome>${jboss.home}</jbossHome>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>jboss-deploy</id>
+                        <phase>pre-integration-test</phase>
+                        <goals>
+                            <goal>deploy</goal>
+                        </goals>
+                        <configuration>
+                            <fileName>${basedir}/target/ejb-test.war</fileName>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>jboss-undeploy</id>
+                        <phase>post-integration-test</phase>
+                        <goals>
+                            <goal>undeploy</goal>
+                        </goals>
+                        <configuration>
+                            <fileName>${basedir}/target/ejb-test.war</fileName>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>surefire-it</id>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                        <configuration>
+                            <skip>false</skip>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

Added: trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/AppConfig.java
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/AppConfig.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/AppConfig.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,13 @@
+package org.jboss.resteasy.test;
+
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+ at ApplicationPath("prefixed")
+public class AppConfig extends Application
+{
+}

Added: trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyException.java
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyException.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyException.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,9 @@
+package org.jboss.resteasy.test;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+public class MyException extends RuntimeException
+{
+}

Added: trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyExceptionMapper.java
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyExceptionMapper.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyExceptionMapper.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,18 @@
+package org.jboss.resteasy.test;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+ at Provider
+public class MyExceptionMapper implements ExceptionMapper<MyException>
+{
+   public Response toResponse(MyException e)
+   {
+      return Response.status(412).type("text/plain").entity("MyException thrown").build();
+   }
+}

Added: trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyResource.java
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyResource.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyResource.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,30 @@
+package org.jboss.resteasy.test;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+ at Path("/scan")
+public interface MyResource
+{
+   @GET
+   @Produces("text/plain")
+   String get();
+
+   @GET
+   @Produces("text/plain")
+   @Path("exception")
+   public String testException();
+
+   @Path("/custom-exception")
+   @GET
+   String throwException();
+
+   @Path("/ejb-exception")
+   @GET
+   String throwEjbException();
+}

Added: trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyResourceBean.java
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyResourceBean.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/src/main/java/org/jboss/resteasy/test/MyResourceBean.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,58 @@
+package org.jboss.resteasy.test;
+
+import javax.ejb.EJBException;
+import javax.ws.rs.Path;
+import javax.ws.rs.GET;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ejb.Stateless;
+import javax.ejb.EJBContext;
+import javax.annotation.Resource;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+ at Path("/scan")
+ at Stateless
+public class MyResourceBean implements MyResource
+{
+   @Resource
+   private EJBContext ctx;
+
+   @GET
+   @Produces("text/plain")
+   public String get()
+   {
+      if (ctx == null)
+      {
+         System.out.println("NO CONTEXT!!!!!");
+         throw new WebApplicationException(500);
+      }
+      System.out.println("CONTEXT WAS THERE!");
+      return "hello world";
+   }
+
+   @GET
+   @Produces("text/plain")
+   @Path("exception")
+   public String testException()
+   {
+      throw new WebApplicationException(412);
+   }
+
+   @Path("/custom-exception")
+   @GET
+   public String throwException()
+   {
+      throw new MyException();
+   }
+
+
+   @Path("/ejb-exception")
+   @GET
+   public String throwEjbException()
+   {
+      throw new EJBException(new MyException());
+   }
+}

Added: trunk/resteasy-int/test/application-scanned-ejb-war/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/src/main/webapp/WEB-INF/web.xml	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/src/main/webapp/WEB-INF/web.xml	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,4 @@
+<web-app version="3.0" 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_3_0.xsd">
+</web-app>

Added: trunk/resteasy-int/test/application-scanned-ejb-war/src/main/webapp/index.jsp
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/src/main/webapp/index.jsp	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/src/main/webapp/index.jsp	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<h2>Hello World!</h2>
+</body>
+</html>

Added: trunk/resteasy-int/test/application-scanned-ejb-war/src/test/java/org/jboss/resteasy/test/jboss/EjbTest.java
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/src/test/java/org/jboss/resteasy/test/jboss/EjbTest.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/src/test/java/org/jboss/resteasy/test/jboss/EjbTest.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,38 @@
+package org.jboss.resteasy.test.jboss;
+
+import org.jboss.resteasy.client.ClientRequest;
+import org.jboss.resteasy.client.ClientResponse;
+import org.junit.Test;
+import org.junit.Assert;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+public class EjbTest
+{
+   @Test
+   public void testIt() throws Exception
+   {
+      ClientRequest request = new ClientRequest("http://localhost:8080/ejb-test/prefixed/scan");
+      ClientResponse<String> response = request.get(String.class);
+      Assert.assertEquals(200, response.getStatus());
+      Assert.assertEquals("hello world", response.getEntity());
+
+   }
+
+   @Test
+   public void testException() throws Exception
+   {
+      ClientRequest request = new ClientRequest("http://localhost:8080/ejb-test/prefixed/scan/exception");
+      ClientResponse<String> response = request.get(String.class);
+      Assert.assertEquals(412, response.getStatus());
+
+      request = new ClientRequest("http://localhost:8080/ejb-test/prefixed/scan/custom-exception");
+      response = request.get(String.class);
+      Assert.assertEquals(412, response.getStatus());
+
+      request = new ClientRequest("http://localhost:8080/ejb-test/prefixed/scan/ejb-exception");
+      response = request.get(String.class);
+      Assert.assertEquals(412, response.getStatus());
+   }}

Added: trunk/resteasy-int/test/application-scanned-ejb-war/src/test/resources/jndi.properties
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/src/test/resources/jndi.properties	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/src/test/resources/jndi.properties	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,3 @@
+java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
+java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
+java.naming.provider.url=jnp://localhost:1099
\ No newline at end of file

Added: trunk/resteasy-int/test/application-scanned-ejb-war/src/test/resources/log4j.xml
===================================================================
--- trunk/resteasy-int/test/application-scanned-ejb-war/src/test/resources/log4j.xml	                        (rev 0)
+++ trunk/resteasy-int/test/application-scanned-ejb-war/src/test/resources/log4j.xml	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Log4j Configuration                                                  -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+
+<!-- $Id: log4j.xml 64736 2007-08-21 15:49:48Z anil.saldhana at jboss.com $ -->
+
+<!--
+   | For more configuration infromation and examples see the Jakarta Log4j
+   | owebsite: http://jakarta.apache.org/log4j
+ -->
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+   <!-- ================================= -->
+   <!-- Preserve messages in a local file -->
+   <!-- ================================= -->
+
+   <!-- A time/date based rolling appender -->
+   <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
+      <param name="File" value="${build.testlog}/test.log"/>
+      <param name="Append" value="true"/>
+
+      <!-- Rollover at midnight each day -->
+      <param name="DatePattern" value="'.'yyyy-MM-dd"/>
+
+      <!-- Rollover at the top of each hour
+      <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
+      -->
+
+      <layout class="org.apache.log4j.PatternLayout">
+         <!-- The default pattern: Date Priority [Category] Message\n -->
+         <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+
+         <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
+        <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+         -->
+      </layout>
+   </appender>
+
+   <!-- ============================== -->
+   <!-- Append messages to the console -->
+   <!-- ============================== -->
+
+   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+      <param name="Threshold" value="DEBUG"/>
+      <param name="Target" value="System.out"/>
+
+      <layout class="org.apache.log4j.PatternLayout">
+         <!-- The default pattern: Date Priority [Category] Message\n -->
+         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+      </layout>
+   </appender>
+
+
+   <!-- ======================= -->
+   <!-- Setup the Root category -->
+   <!-- ======================= -->
+
+   <root>
+      <appender-ref ref="CONSOLE"/>
+   </root>
+
+</log4j:configuration>

Added: trunk/resteasy-int/test/application-uses-scanning/pom.xml
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/pom.xml	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/pom.xml	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,90 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <parent>
+        <groupId>org.jboss.jbossas</groupId>
+        <artifactId>jboss-as-parent</artifactId>
+        <version>6.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.jboss.jbossas.resteasy.test</groupId>
+    <artifactId>application-uses-scanning</artifactId>
+    <packaging>war</packaging>
+    <name>Basic Integration Test</name>
+    <url>http://maven.apache.org</url>
+    <build>
+        <finalName>scanned-test</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>jboss-maven-plugin</artifactId>
+                <version>1.3.1</version>
+                <configuration>
+                    <jbossHome>${jboss.home}</jbossHome>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>jboss-deploy</id>
+                        <phase>pre-integration-test</phase>
+                        <goals>
+                            <goal>deploy</goal>
+                        </goals>
+                        <configuration>
+                            <fileName>${basedir}/target/scanned-test.war</fileName>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>jboss-undeploy</id>
+                        <phase>post-integration-test</phase>
+                        <goals>
+                            <goal>undeploy</goal>
+                        </goals>
+                        <configuration>
+                            <fileName>${basedir}/target/scanned-test.war</fileName>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>surefire-it</id>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                        <configuration>
+                            <skip>false</skip>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>resteasy-jaxrs</artifactId>
+            <version>${version.org.jboss.resteasy}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.1</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>

Added: trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/AppConfig.java
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/AppConfig.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/AppConfig.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,13 @@
+package org.jboss.resteasy.test;
+
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+ at ApplicationPath("prefixed")
+public class AppConfig extends Application
+{
+}

Added: trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyContextResolver.java
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyContextResolver.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyContextResolver.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,17 @@
+package org.jboss.resteasy.test;
+
+import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.Provider;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+ at Provider
+public class MyContextResolver implements ContextResolver<Integer>
+{
+   public Integer getContext(Class<?> type)
+   {
+      return new Integer(42);
+   }
+}

Added: trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyIntf.java
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyIntf.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyIntf.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,24 @@
+package org.jboss.resteasy.test;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.ext.Providers;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+ at Path("/scan-intf")
+public interface MyIntf
+{
+   @GET
+   @Produces("text/plain")
+   String get();
+
+   @Path("resolver")
+   @GET
+   @Produces("text/plain")
+   String getResolver(@Context Providers providers);
+}

Added: trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyIntfResource.java
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyIntfResource.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyIntfResource.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,27 @@
+package org.jboss.resteasy.test;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.ext.Providers;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+public class MyIntfResource implements MyIntf
+{
+   public String get()
+   {
+      return "hello world";
+   }
+
+   public String getResolver(@Context Providers providers)
+   {
+      System.out.println("IN RESOLVER!!!");
+      MyContextResolver resolver = (MyContextResolver) providers.getContextResolver(Integer.class, MediaType.TEXT_PLAIN_TYPE);
+      return resolver.getContext(null).toString();
+   }
+}
\ No newline at end of file

Added: trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyResource.java
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyResource.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/src/main/java/org/jboss/resteasy/test/MyResource.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,33 @@
+package org.jboss.resteasy.test;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.ext.Providers;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+ at Path("/scan")
+public class MyResource
+{
+   @GET
+   @Produces("text/plain")
+   public String get()
+   {
+      return "hello world";
+   }
+
+   @Path("resolver")
+   @GET
+   @Produces("text/plain")
+   public String getResolver(@Context Providers providers)
+   {
+      System.out.println("IN RESOLVER!!!");
+      MyContextResolver resolver = (MyContextResolver) providers.getContextResolver(Integer.class, MediaType.TEXT_PLAIN_TYPE);
+      return resolver.getContext(null).toString();
+   }
+}

Added: trunk/resteasy-int/test/application-uses-scanning/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/src/main/webapp/WEB-INF/web.xml	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/src/main/webapp/WEB-INF/web.xml	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,4 @@
+<web-app version="3.0" 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_3_0.xsd">
+</web-app>

Added: trunk/resteasy-int/test/application-uses-scanning/src/main/webapp/index.jsp
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/src/main/webapp/index.jsp	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/src/main/webapp/index.jsp	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<h2>Hello World!</h2>
+</body>
+</html>

Added: trunk/resteasy-int/test/application-uses-scanning/src/test/java/org/jboss/resteasy/test/jboss/ScanningTest.java
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/src/test/java/org/jboss/resteasy/test/jboss/ScanningTest.java	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/src/test/java/org/jboss/resteasy/test/jboss/ScanningTest.java	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,50 @@
+package org.jboss.resteasy.test.jboss;
+
+import org.jboss.resteasy.client.ClientRequest;
+import org.jboss.resteasy.client.ClientResponse;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * @author <a href="mailto:bill at burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+public class ScanningTest
+{
+   @Test
+   public void testIt() throws Exception
+   {
+      ClientRequest request = new ClientRequest("http://localhost:8080/scanned-test/prefixed/scan");
+      ClientResponse<String> response = request.get(String.class);
+      Assert.assertEquals(200, response.getStatus());
+      Assert.assertEquals("hello world", response.getEntity());
+
+   }
+
+   @Test
+   public void testScannedContextResolver() throws Exception
+   {
+      ClientRequest request = new ClientRequest("http://localhost:8080/scanned-test/prefixed/scan/resolver");
+      String res = request.getTarget(String.class);
+      Assert.assertEquals(res, "42");
+   }
+
+
+   @Test
+   public void testItIntf() throws Exception
+   {
+      ClientRequest request = new ClientRequest("http://localhost:8080/scanned-test/prefixed/scan-intf");
+      ClientResponse<String> response = request.get(String.class);
+      Assert.assertEquals(200, response.getStatus());
+      Assert.assertEquals("hello world", response.getEntity());
+
+   }
+
+   @Test
+   public void testScannedContextResolverIntf() throws Exception
+   {
+      ClientRequest request = new ClientRequest("http://localhost:8080/scanned-test/prefixed/scan-intf/resolver");
+      String res = request.getTarget(String.class);
+      Assert.assertEquals(res, "42");
+   }
+}

Added: trunk/resteasy-int/test/application-uses-scanning/src/test/resources/jndi.properties
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/src/test/resources/jndi.properties	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/src/test/resources/jndi.properties	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,3 @@
+java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
+java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
+java.naming.provider.url=jnp://localhost:1099
\ No newline at end of file

Added: trunk/resteasy-int/test/application-uses-scanning/src/test/resources/log4j.xml
===================================================================
--- trunk/resteasy-int/test/application-uses-scanning/src/test/resources/log4j.xml	                        (rev 0)
+++ trunk/resteasy-int/test/application-uses-scanning/src/test/resources/log4j.xml	2010-11-10 18:48:56 UTC (rev 109242)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Log4j Configuration                                                  -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+
+<!-- $Id: log4j.xml 64736 2007-08-21 15:49:48Z anil.saldhana at jboss.com $ -->
+
+<!--
+   | For more configuration infromation and examples see the Jakarta Log4j
+   | owebsite: http://jakarta.apache.org/log4j
+ -->
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+   <!-- ================================= -->
+   <!-- Preserve messages in a local file -->
+   <!-- ================================= -->
+
+   <!-- A time/date based rolling appender -->
+   <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
+      <param name="File" value="${build.testlog}/test.log"/>
+      <param name="Append" value="true"/>
+
+      <!-- Rollover at midnight each day -->
+      <param name="DatePattern" value="'.'yyyy-MM-dd"/>
+
+      <!-- Rollover at the top of each hour
+      <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
+      -->
+
+      <layout class="org.apache.log4j.PatternLayout">
+         <!-- The default pattern: Date Priority [Category] Message\n -->
+         <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+
+         <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
+        <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+         -->
+      </layout>
+   </appender>
+
+   <!-- ============================== -->
+   <!-- Append messages to the console -->
+   <!-- ============================== -->
+
+   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+      <param name="Threshold" value="DEBUG"/>
+      <param name="Target" value="System.out"/>
+
+      <layout class="org.apache.log4j.PatternLayout">
+         <!-- The default pattern: Date Priority [Category] Message\n -->
+         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+      </layout>
+   </appender>
+
+
+   <!-- ======================= -->
+   <!-- Setup the Root category -->
+   <!-- ======================= -->
+
+   <root>
+      <appender-ref ref="CONSOLE"/>
+   </root>
+
+</log4j:configuration>

Modified: trunk/resteasy-int/test/pom.xml
===================================================================
--- trunk/resteasy-int/test/pom.xml	2010-11-10 18:32:44 UTC (rev 109241)
+++ trunk/resteasy-int/test/pom.xml	2010-11-10 18:48:56 UTC (rev 109242)
@@ -15,6 +15,8 @@
     <modules>
         <module>application-war</module>
         <module>application-scanned-war</module>
+        <module>application-scanned-ejb-war</module>
+        <module>application-uses-scanning</module>
         <module>scanned-war</module>
         <module>ejb-war</module>
         <module>ejb-jar-war</module>



More information about the jboss-cvs-commits mailing list