aboutsummaryrefslogtreecommitdiffstats
path: root/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/JsonHttpResult.java
diff options
context:
space:
mode:
Diffstat (limited to 'clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/JsonHttpResult.java')
-rw-r--r--clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/JsonHttpResult.java74
1 files changed, 74 insertions, 0 deletions
diff --git a/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/JsonHttpResult.java b/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/JsonHttpResult.java
new file mode 100644
index 00000000000..e26ea4fc3a2
--- /dev/null
+++ b/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/JsonHttpResult.java
@@ -0,0 +1,74 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.clustercontroller.utils.communication.http;
+
+import com.yahoo.vespa.clustercontroller.utils.util.JSONObjectWrapper;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+
+public class JsonHttpResult extends HttpResult {
+ private JSONObject json;
+ private boolean failedParsing = false;
+
+
+ public JsonHttpResult() {
+ addHeader("Content-Type", "application/json");
+ }
+
+ public JsonHttpResult(HttpResult other) {
+ super(other);
+
+ if (other.getContent() == null) {
+ setParsedJson(new JSONObject());
+ return;
+ }
+ try{
+ if (other.getContent() instanceof JSONObject) {
+ setParsedJson((JSONObject) other.getContent());
+ } else {
+ setParsedJson(new JSONObject(other.getContent().toString()));
+ }
+ } catch (JSONException e) {
+ failedParsing = true;
+ setParsedJson(createErrorJson(e.getMessage(), other));
+ }
+ }
+
+ private JSONObject createErrorJson(String error, HttpResult other) {
+ return new JSONObjectWrapper()
+ .put("error", "Invalid JSON in output: " + error)
+ .put("output", other.getContent().toString());
+ }
+
+ public JsonHttpResult setJson(JSONObject o) {
+ setContent(o);
+ json = o;
+ return this;
+ }
+
+ private void setParsedJson(JSONObject o) {
+ json = o;
+ }
+
+ public JSONObject getJson() {
+ return json;
+ }
+
+ @Override
+ public void printContent(StringBuilder sb) {
+ if (failedParsing) {
+ super.printContent(sb);
+ return;
+ }
+ if (json != null) {
+ sb.append("JSON: ");
+ try{
+ sb.append(json.toString(2));
+ } catch (JSONException e) {
+ sb.append(json.toString());
+ }
+ } else {
+ super.printContent(sb);
+ }
+ }
+
+}