diff --git a/pom.xml b/pom.xml
index 6e3730b9e9c..fa019ef7c31 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,7 +88,7 @@
2.6
2.4
1.4.0
- 0.9.8
+ 0.9.9
0.15
build/replace.properties
0.5.1
diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
index 2d2cada0a31..166af4bafd0 100644
--- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
+++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java
@@ -96,12 +96,15 @@ public class ApiXmlDocWriter {
}
public static void main(String[] args) {
-
Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, new String[] {"org.apache.cloudstack.api", "com.cloud.api",
"com.cloud.api.commands", "com.globo.globodns.cloudstack.api", "org.apache.cloudstack.network.opendaylight.api",
"com.cloud.api.commands.netapp", "org.apache.cloudstack.api.command.admin.zone", "org.apache.cloudstack.network.contrail.api.command"});
for (Class> cmdClass : cmdClasses) {
+ if(cmdClass.getAnnotation(APICommand.class)==null){
+ System.out.println("Warning, API Cmd class " + cmdClass.getName() + " has no APICommand annotation ");
+ continue;
+ }
String apiName = cmdClass.getAnnotation(APICommand.class).name();
if (s_apiNameCmdClassMap.containsKey(apiName)) {
// handle API cmd separation into admin cmd and user cmd with the common api name
diff --git a/utils/src/com/cloud/utils/ReflectUtil.java b/utils/src/com/cloud/utils/ReflectUtil.java
index 9c09980e0fc..c8ae954b7d3 100644
--- a/utils/src/com/cloud/utils/ReflectUtil.java
+++ b/utils/src/com/cloud/utils/ReflectUtil.java
@@ -37,6 +37,10 @@ import java.util.Set;
import org.apache.log4j.Logger;
import org.reflections.Reflections;
+import org.reflections.util.ConfigurationBuilder;
+import org.reflections.util.ClasspathHelper;
+import org.reflections.scanners.SubTypesScanner;
+import org.reflections.scanners.TypeAnnotationsScanner;
import com.google.common.collect.ImmutableSet;
@@ -45,6 +49,7 @@ import com.cloud.utils.exception.CloudRuntimeException;
public class ReflectUtil {
private static final Logger s_logger = Logger.getLogger(ReflectUtil.class);
+ private static final Logger logger = Logger.getLogger(Reflections.class);
public static Pair, Field> getAnyField(Class> clazz, String fieldName) {
try {
@@ -65,10 +70,13 @@ public class ReflectUtil {
public static Set> getClassesWithAnnotation(Class extends Annotation> annotation, String[] packageNames) {
Reflections reflections;
Set> classes = new HashSet>();
+ ConfigurationBuilder builder=new ConfigurationBuilder();
for (String packageName : packageNames) {
- reflections = new Reflections(packageName);
- classes.addAll(reflections.getTypesAnnotatedWith(annotation));
+ builder.addUrls(ClasspathHelper.forPackage(packageName));
}
+ builder.setScanners(new SubTypesScanner(),new TypeAnnotationsScanner());
+ reflections = new Reflections(builder);
+ classes.addAll(reflections.getTypesAnnotatedWith(annotation));
return classes;
}