diff --git a/tools/build/bazel/osgi_java_library.bzl b/tools/build/bazel/osgi_java_library.bzl
index 0014eb8..b3497c2 100644
--- a/tools/build/bazel/osgi_java_library.bzl
+++ b/tools/build/bazel/osgi_java_library.bzl
@@ -175,12 +175,13 @@
 def _cfgdef_impl(ctx):
     output_jar = ctx.outputs.cfgdef_jar.path
 
-    # call swagger generator to make the swagger JSON and java files
     arguments = [
         output_jar,
-        ctx.files.srcs,
     ]
 
+    for src in ctx.files.srcs:
+        arguments.append(src.path)
+
     ctx.actions.run(
         inputs = ctx.files.srcs,
         outputs = [ctx.outputs.cfgdef_jar],
@@ -225,11 +226,9 @@
 
     srcs_arg = ""
     resources_arg = ""
-    input_dependencies = []
 
     for file in ctx.files.srcs:
         srcs_arg += file.path + ","
-        input_dependencies.append(file)
 
     for resource in resources_arg:
         resources_arg += resource.path + ","
@@ -275,11 +274,9 @@
 
     srcs_arg = ""
     resources_arg = ""
-    input_dependencies = []
 
     for file in ctx.files.srcs:
         srcs_arg += file.path + ","
-        input_dependencies.append(file)
 
     for resource in resources_arg:
         resources_arg += resource.path + ","
@@ -454,13 +451,6 @@
     native_srcs = srcs
     native_resources = resources
 
-    #    _cfgdef(
-    #        name = name + "_cfgdef",
-    #        srcs = native_srcs,
-    #        visibility = visibility,
-    #    )
-    #    native_resources.append(name + "_cfgdef_jar")
-
     if web_context != None and api_title != "" and len(resources) != 0:
         # generate Swagger files if needed
         _swagger_java(
@@ -496,12 +486,19 @@
 
     javacopts = ["-XepDisableAllChecks"] if suppress_errorprone else []
 
+    _cfgdef(
+        name = name + "_cfgdef_jar",
+        srcs = native_srcs,
+        visibility = visibility,
+        cfgdef_jar = name + "_cfgdef.jar",
+    )
+
     # compile the Java code
     if len(resource_jars) > 0:
         native.java_library(
             name = name + "-native",
             srcs = native_srcs,
-            resource_jars = resource_jars,
+            resource_jars = resource_jars + [name + "_cfgdef_jar"],
             deps = deps,
             visibility = visibility,
             javacopts = javacopts,
@@ -510,6 +507,7 @@
         native.java_library(
             name = name + "-native",
             srcs = native_srcs,
+            resource_jars = [name + "_cfgdef_jar"],
             resources = native_resources,
             deps = deps,
             visibility = visibility,
diff --git a/tools/build/cfgdef/src/main/java/org/onosproject/cfgdef/CfgDefGenerator.java b/tools/build/cfgdef/src/main/java/org/onosproject/cfgdef/CfgDefGenerator.java
index 696918d..89954f2 100644
--- a/tools/build/cfgdef/src/main/java/org/onosproject/cfgdef/CfgDefGenerator.java
+++ b/tools/build/cfgdef/src/main/java/org/onosproject/cfgdef/CfgDefGenerator.java
@@ -24,6 +24,7 @@
 import com.thoughtworks.qdox.model.expression.AnnotationValue;
 import com.thoughtworks.qdox.model.expression.AnnotationValueList;
 import com.thoughtworks.qdox.model.expression.FieldRef;
+import com.thoughtworks.qdox.parser.ParseException;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -45,8 +46,10 @@
     private static final String PROPERTY = "property";
     private static final String SEP = "|";
     private static final String UTF_8 = "UTF-8";
+    private static final String JAVA = ".java";
     private static final String EXT = ".cfgdef";
     private static final String STRING = "STRING";
+    private static final String NO_DESCRIPTION = "no description provided";
 
     private final File resourceJar;
     private final JavaProjectBuilder builder;
@@ -68,7 +71,10 @@
         this.builder = new JavaProjectBuilder();
         Arrays.stream(sourceFilePaths).forEach(filename -> {
             try {
+                if (filename.endsWith(JAVA))
                 builder.addSource(new File(filename));
+            } catch (ParseException e) {
+                // When unable to parse, skip the source; leave it to javac to fail.
             } catch (IOException e) {
                 throw new IllegalArgumentException("Unable to open file", e);
             }
@@ -127,19 +133,19 @@
 
             String line = name + SEP + type + SEP + def + SEP + desc + "\n";
             lines.add(line);
-            System.err.print(line);
         }
     }
 
-    // Retrieve description from a comment preceeding the field named the same
+    // Retrieve description from a comment preceding the field named the same
     // as the property or
     // TODO: from an annotated comment.
     private String description(JavaClass javaClass, String name) {
         JavaField field = javaClass.getFieldByName(name);
         if (field != null) {
-            return field.getComment();
+            String comment = field.getComment();
+            return comment != null ? comment : NO_DESCRIPTION;
         }
-        return "no description provided";
+        return NO_DESCRIPTION;
     }
 
     private String elaborate(AnnotationValue value) {
@@ -147,8 +153,10 @@
             return elaborate(((Add) value).getLeft()) + elaborate(((Add) value).getRight());
         } else if (value instanceof FieldRef) {
             return stripped(constants.get(((FieldRef) value).getName()));
-        } else {
+        } else if (value != null) {
             return stripped(value.toString());
+        } else {
+            return "";
         }
     }
 
