You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2014/06/09 17:42:33 UTC

git commit: [CXF-5479] Optional support for the auto-discovery of root resources

Repository: cxf
Updated Branches:
  refs/heads/master 9e51e56a7 -> 1900e1f4a


[CXF-5479] Optional support for the auto-discovery of root resources


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/1900e1f4
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/1900e1f4
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/1900e1f4

Branch: refs/heads/master
Commit: 1900e1f4ace53bc112c16f36d846f25905daab4c
Parents: 9e51e56
Author: Sergey Beryozkin <sb...@talend.com>
Authored: Mon Jun 9 16:42:06 2014 +0100
Committer: Sergey Beryozkin <sb...@talend.com>
Committed: Mon Jun 9 16:42:06 2014 +0100

----------------------------------------------------------------------
 .../maven_plugin/javatowadl/Java2WADLMojo.java  | 49 +++++++++++++++-----
 1 file changed, 37 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/1900e1f4/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/Java2WADLMojo.java
----------------------------------------------------------------------
diff --git a/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/Java2WADLMojo.java b/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/Java2WADLMojo.java
index f2881bd..4b0065c 100644
--- a/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/Java2WADLMojo.java
+++ b/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/Java2WADLMojo.java
@@ -23,13 +23,19 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.lang.annotation.Annotation;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.Path;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
+import org.apache.cxf.common.util.ClasspathScanner;
 import org.apache.cxf.helpers.FileUtils;
 import org.apache.cxf.jaxrs.model.ClassResourceInfo;
 import org.apache.cxf.jaxrs.model.wadl.DocumentationProvider;
@@ -97,6 +103,10 @@ public class Java2WADLMojo extends AbstractMojo {
      */
     private List<String> classResourceNames;
     
+    /**
+     * @parameter
+     */
+    private String basePackages;
     
     /**
      * @parameter expression="${project}"
@@ -170,8 +180,8 @@ public class Java2WADLMojo extends AbstractMojo {
     private String outputFileExtension;
     
     public void execute() throws MojoExecutionException {
-        
-        getResourcesList();
+        List<Class<?>> resourceClasses = loadResourceClasses();
+        initClassResourceInfoList(resourceClasses);
         WadlGenerator wadlGenerator = new WadlGenerator(getBus());
         DocumentationProvider documentationProvider = null;
         if (docProvider != null) {
@@ -188,7 +198,7 @@ public class Java2WADLMojo extends AbstractMojo {
         
         StringBuilder sbMain = wadlGenerator.generateWADL(getBaseURI(), classResourceInfos, useJson, null, null);
         getLog().debug("the wadl is =====> \n" + sbMain.toString());
-        generateWadl(sbMain.toString());
+        generateWadl(resourceClasses, sbMain.toString());
     }
     
     private void setExtraProperties(WadlGenerator wg) {
@@ -207,7 +217,7 @@ public class Java2WADLMojo extends AbstractMojo {
         }
     }
     
-    private void generateWadl(String wadl) throws MojoExecutionException {
+    private void generateWadl(List<Class<?>> resourceClasses, String wadl) throws MojoExecutionException {
      
         if (outputFile == null && project != null) {
             // Put the wadl in target/generated/wadl
@@ -215,10 +225,8 @@ public class Java2WADLMojo extends AbstractMojo {
             String name = null;
             if (outputFileName != null) {
                 name = outputFileName;
-            } else if (classResourceNames.size() == 1) {
-                String className = classResourceNames.get(0);
-                int i = className.lastIndexOf('.');
-                name = className.substring(i + 1);
+            } else if (resourceClasses.size() == 1) {
+                name = resourceClasses.get(0).getSimpleName();
             } else {
                 name = "application";
             }
@@ -288,15 +296,32 @@ public class Java2WADLMojo extends AbstractMojo {
             throw new MojoExecutionException(e.getMessage(), e);
         }
     }
-    
-    private void getResourcesList() throws MojoExecutionException {
+    private List<Class<?>> loadResourceClasses() throws MojoExecutionException {
+        List<Class<?>> resourceClasses = new ArrayList<Class<?>>(classResourceNames.size());
         for (String className : classResourceNames) {
-            Class<?> beanClass = null;
             try {
-                beanClass = getClassLoader().loadClass(className);
+                resourceClasses.add(getClassLoader().loadClass(className));
             } catch (Exception e) {
                 throw new MojoExecutionException(e.getMessage(), e);
             } 
+        }
+        if (resourceClasses.isEmpty() && basePackages != null) {
+            try {
+                @SuppressWarnings("unchecked")
+                final Map< Class< ? extends Annotation >, Collection< Class< ? > > > discoveredClasses = 
+                    ClasspathScanner.findClasses(ClasspathScanner.parsePackages(basePackages), Path.class);
+                if (discoveredClasses.containsKey(Path.class)) {
+                    resourceClasses.addAll(discoveredClasses.get(Path.class));
+                }
+            } catch (Exception ex) {
+                // ignore
+            }
+        }
+        return resourceClasses;
+    }
+    
+    private void initClassResourceInfoList(List<Class<?>> resourceClasses) throws MojoExecutionException {
+        for (Class<?> beanClass : resourceClasses) {
             ClassResourceInfo cri = getCreatedFromModel(beanClass);
             if (cri != null) {
                 if (!InjectionUtils.isConcreteClass(cri.getServiceClass())) {