diff --git a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java
index 5958708..d15ad63 100644
--- a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java
+++ b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java
@@ -107,15 +107,16 @@
 
     @Override
     public void registerProperties(Class<?> componentClass) {
-        if (true) {
-            return;
-        }
-
         checkPermission(CONFIG_WRITE);
 
         String componentName = componentClass.getName();
         String resourceName = componentClass.getSimpleName() + RESOURCE_EXT;
         try (InputStream ris = componentClass.getResourceAsStream(resourceName)) {
+            // FIXME: Eliminate the following soft-fail after property refactoring is complete.
+            if (ris == null) {
+                log.info("Property definitions not found at resource {}; please fix this", resourceName);
+                return;
+            }
             checkArgument(ris != null, "Property definitions not found at resource %s",
                           resourceName);
 
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 "";
         }
     }
 
