You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/01/28 18:04:16 UTC

svn commit: r1439504 - /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java

Author: rmannibucau
Date: Mon Jan 28 17:04:16 2013
New Revision: 1439504

URL: http://svn.apache.org/viewvc?rev=1439504&view=rev
Log:
managing @Web in jars even in embedded mode with lightweightwebappbuilder

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java?rev=1439504&r1=1439503&r2=1439504&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java Mon Jan 28 17:04:16 2013
@@ -174,9 +174,7 @@ public class LightweightWebAppBuilder im
             for (ClassListInfo info : webAppInfo.webAnnotatedClasses) {
                 final String url = info.name;
                 for (String filterPath : info.list) {
-                    String classname = nameFromUrls(url, filterPath);
-
-                    final Class<?> clazz = webContext.getClassLoader().loadClass(classname);
+                    final Class<?> clazz = loadFromUrls(webContext.getClassLoader(), url, filterPath);
                     final WebFilter annotation = clazz.getAnnotation(WebFilter.class);
                     if (annotation != null) {
                         final Properties initParams = new Properties();
@@ -187,7 +185,7 @@ public class LightweightWebAppBuilder im
                         final FilterConfig config = new SimpleFilterConfig(sce.getServletContext(), info.name, initParams);
                         for (String mapping: annotation.urlPatterns()) {
                             try {
-                                addFilterMethod.invoke(null, classname, webContext, mapping, config);
+                                addFilterMethod.invoke(null, clazz.getName(), webContext, mapping, config);
                                 deployedWebObjects.filterMappings.add(mapping);
                             } catch (Exception e) {
                                 LOGGER.warning(e.getMessage(), e);
@@ -236,14 +234,12 @@ public class LightweightWebAppBuilder im
             for (ClassListInfo info : webAppInfo.webAnnotatedClasses) {
                 final String url = info.name;
                 for (String servletPath : info.list) {
-                    String classname = nameFromUrls(url, servletPath);
-
-                    final Class<?> clazz = webContext.getClassLoader().loadClass(classname);
+                    final Class<?> clazz = loadFromUrls(webContext.getClassLoader(), url, servletPath);
                     final WebServlet annotation = clazz.getAnnotation(WebServlet.class);
                     if (annotation != null) {
                         for (String mapping: annotation.urlPatterns()) {
                             try {
-                                addServletMethod.invoke(null, classname, webContext, mapping);
+                                addServletMethod.invoke(null, clazz.getName(), webContext, mapping);
                                 deployedWebObjects.mappings.add(mapping);
                             } catch (Exception e) {
                                 LOGGER.warning(e.getMessage(), e);
@@ -255,9 +251,16 @@ public class LightweightWebAppBuilder im
         }
     }
 
-    private static String nameFromUrls(final String url, final String path) {
-        final String value = path.substring(url.length()).replace(File.separatorChar, '/').replace('/', '.');
-        return value.substring(0, value.length() - ".class".length());
+    private static Class<?> loadFromUrls(final ClassLoader loader, final String url, final String path) throws ClassNotFoundException {
+        try { // in WEB-INF/classes
+            return loader.loadClass(className(path.substring(url.length())));
+        } catch (ClassNotFoundException cnfe) { // in a dependency (jar)
+            return loader.loadClass(className(path.substring(path.indexOf("!") + 2)));
+        }
+    }
+
+    private static String className(final String value) {
+        return value.substring(0, value.length() - ".class".length()).replace(File.separatorChar, '/').replace('/', '.');
     }
 
     @Override