Convert API to throw exceptions instead of return values
diff --git a/src/main/java/com/intel/jndn/management/ManagementException.java b/src/main/java/com/intel/jndn/management/ManagementException.java
new file mode 100644
index 0000000..70a15d1
--- /dev/null
+++ b/src/main/java/com/intel/jndn/management/ManagementException.java
@@ -0,0 +1,73 @@
+/*
+ * jndn-management
+ * Copyright (c) 2015, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 3, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
+ * more details.
+ */
+package com.intel.jndn.management;
+
+import com.intel.jndn.management.types.ControlResponse;
+import net.named_data.jndn.encoding.EncodingException;
+import net.named_data.jndn.util.Blob;
+
+/**
+ * Represent a failure to correctly manage the NDN Forwarding Daemon (NFD).
+ * Inspect this object with getCause() to see why the management operation
+ * failed.
+ *
+ * @author Andrew Brown <andrew.brown@intel.com>
+ */
+public class ManagementException extends Exception {
+
+  /**
+   *
+   * @param message
+   */
+  public ManagementException(String message) {
+    super(message);
+  }
+
+  /**
+   *
+   * @param message
+   * @param cause
+   */
+  public ManagementException(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+  /**
+   * Parse an NFD response to create a ManagementException.
+   *
+   * @param forwarderResponse
+   * @return
+   */
+  public static ManagementException fromResponse(Blob forwarderResponse) {
+    ControlResponse response = new ControlResponse();
+    try {
+      response.wireDecode(forwarderResponse.buf());
+      String message = "Action failed, forwarder returned: " + response.getStatusCode() + " " + response.getStatusText();
+      return new ManagementException(message);
+    } catch (EncodingException e) {
+      return new ManagementException("Action failed and forwarder response was unparseable.", e);
+    }
+  }
+
+  /**
+   * Parse an NFD response to create a ManagementException.
+   *
+   * @param forwarderResponse
+   * @return
+   */
+  public static ManagementException fromResponse(ControlResponse response) {
+    String message = "Action failed, forwarder returned: " + response.getStatusCode() + " " + response.getStatusText();
+    return new ManagementException(message);
+  }
+}