aboutsummaryrefslogtreecommitdiffstats
path: root/profiles/http/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'profiles/http/src/main')
-rw-r--r--profiles/http/src/main/java/org/onap/cli/fw/http/conf/OnapCommandHttpConstants.java4
-rw-r--r--profiles/http/src/main/java/org/onap/cli/fw/http/connect/HttpInput.java8
-rw-r--r--profiles/http/src/main/java/org/onap/cli/fw/http/error/OnapCommandHttpInvalidRequestBody.java43
-rw-r--r--profiles/http/src/main/java/org/onap/cli/fw/http/schema/OnapCommandSchemaHttpLoader.java5
-rw-r--r--profiles/http/src/main/java/org/onap/cli/fw/http/utils/OnapCommandHttpUtils.java36
-rw-r--r--profiles/http/src/main/resources/open-cli-http.properties2
6 files changed, 96 insertions, 2 deletions
diff --git a/profiles/http/src/main/java/org/onap/cli/fw/http/conf/OnapCommandHttpConstants.java b/profiles/http/src/main/java/org/onap/cli/fw/http/conf/OnapCommandHttpConstants.java
index a5174a4b..9663f87b 100644
--- a/profiles/http/src/main/java/org/onap/cli/fw/http/conf/OnapCommandHttpConstants.java
+++ b/profiles/http/src/main/java/org/onap/cli/fw/http/conf/OnapCommandHttpConstants.java
@@ -89,6 +89,10 @@ public class OnapCommandHttpConstants {
public static final String SERVICE_PARAMS_MANDATORY_LIST = "cli.schema.http.service.sections.mandatory";
public static final String DEFAULT_PARAMETER_NO_CATALOG = "no-catalog";
+
+ //context param
+ public static final String CONTEXT = "context";
+ public static final String CONTEXT_REMOVE_EMPTY_JSON_NODES = "remove_empty_node";
}
diff --git a/profiles/http/src/main/java/org/onap/cli/fw/http/connect/HttpInput.java b/profiles/http/src/main/java/org/onap/cli/fw/http/connect/HttpInput.java
index 722dd12e..f5922796 100644
--- a/profiles/http/src/main/java/org/onap/cli/fw/http/connect/HttpInput.java
+++ b/profiles/http/src/main/java/org/onap/cli/fw/http/connect/HttpInput.java
@@ -38,6 +38,8 @@ public class HttpInput {
private Map<String, String> reqCookies = new HashMap<>();
+ private Map<String, String> context = new HashMap<>();
+
private boolean binaryData;
public String getUri() {
@@ -116,6 +118,10 @@ public class HttpInput {
return reqCookies;
}
+ public Map<String, String> getContext() {
+ return context;
+ }
+
public HttpInput setReqCookies(Map<String, String> reqCookies) {
this.reqCookies = reqCookies;
return this;
@@ -134,6 +140,6 @@ public class HttpInput {
return "\nURL: " + this.getUri() + "\nMethod: " + this.getMethod() + "\nRequest Queries: "
+ this.getReqQueries() + "\nRequest Body: " + this.getBody() + "\nRequest Headers: "
+ this.getReqHeaders().toString() + "\nRequest Cookies: " + this.getReqCookies().toString()
- + "\nbinaryData=" + this.binaryData;
+ + "\nbinaryData=" + this.binaryData + "\nContext=" + this.context;
}
}
diff --git a/profiles/http/src/main/java/org/onap/cli/fw/http/error/OnapCommandHttpInvalidRequestBody.java b/profiles/http/src/main/java/org/onap/cli/fw/http/error/OnapCommandHttpInvalidRequestBody.java
new file mode 100644
index 00000000..73c721e3
--- /dev/null
+++ b/profiles/http/src/main/java/org/onap/cli/fw/http/error/OnapCommandHttpInvalidRequestBody.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.cli.fw.http.error;
+
+import org.onap.cli.fw.error.OnapCommandException;
+
+/**
+ * OnapCommandParameterNotFound.
+ *
+ */
+public class OnapCommandHttpInvalidRequestBody extends OnapCommandException {
+
+ private static final long serialVersionUID = 6676137916079057963L;
+
+ private static final String ERROR_CODE = "0x3008";
+ private static final String ERR_MSG = "Http request body does not have valid json ";
+
+ public OnapCommandHttpInvalidRequestBody(String name, String error) {
+ super(ERROR_CODE, ERR_MSG + name + ", " + error);
+ }
+
+ public OnapCommandHttpInvalidRequestBody(String name, Throwable throwable) {
+ super(ERROR_CODE, ERR_MSG + name, throwable);
+ }
+
+ public OnapCommandHttpInvalidRequestBody(Throwable e) {
+ this(ERROR_CODE, e.getMessage());
+ }
+}
diff --git a/profiles/http/src/main/java/org/onap/cli/fw/http/schema/OnapCommandSchemaHttpLoader.java b/profiles/http/src/main/java/org/onap/cli/fw/http/schema/OnapCommandSchemaHttpLoader.java
index 8e01b585..973c4ae1 100644
--- a/profiles/http/src/main/java/org/onap/cli/fw/http/schema/OnapCommandSchemaHttpLoader.java
+++ b/profiles/http/src/main/java/org/onap/cli/fw/http/schema/OnapCommandSchemaHttpLoader.java
@@ -132,6 +132,11 @@ public class OnapCommandSchemaHttpLoader {
cmd.getInput().setReqQueries(query);
break;
+ case OnapCommandHttpConstants.CONTEXT:
+ Map<String, String> context = (Map<String, String>) map.get(key2);
+
+ cmd.getInput().getContext().putAll(context);
+ break;
case OnapCommandHttpConstants.MULTIPART_ENTITY_NAME:
Object multipartEntityName = map.get(key2);
cmd.getInput().setMultipartEntityName(multipartEntityName.toString());
diff --git a/profiles/http/src/main/java/org/onap/cli/fw/http/utils/OnapCommandHttpUtils.java b/profiles/http/src/main/java/org/onap/cli/fw/http/utils/OnapCommandHttpUtils.java
index 7b10dbce..43a80181 100644
--- a/profiles/http/src/main/java/org/onap/cli/fw/http/utils/OnapCommandHttpUtils.java
+++ b/profiles/http/src/main/java/org/onap/cli/fw/http/utils/OnapCommandHttpUtils.java
@@ -18,6 +18,7 @@ package org.onap.cli.fw.http.utils;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -27,9 +28,11 @@ import org.onap.cli.fw.error.OnapCommandInvalidParameterValue;
import org.onap.cli.fw.error.OnapCommandParameterNotFound;
import org.onap.cli.fw.error.OnapCommandResultEmpty;
import org.onap.cli.fw.error.OnapCommandResultMapProcessingFailed;
+import org.onap.cli.fw.http.conf.OnapCommandHttpConstants;
import org.onap.cli.fw.http.connect.HttpInput;
import org.onap.cli.fw.http.connect.HttpResult;
import org.onap.cli.fw.http.error.OnapCommandHttpHeaderNotFound;
+import org.onap.cli.fw.http.error.OnapCommandHttpInvalidRequestBody;
import org.onap.cli.fw.http.error.OnapCommandHttpInvalidResponseBody;
import org.onap.cli.fw.input.OnapCommandParameter;
import org.onap.cli.fw.input.OnapCommandParameterType;
@@ -37,6 +40,8 @@ import org.onap.cli.fw.utils.OnapCommandUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.PathNotFoundException;
@@ -81,6 +86,12 @@ public class OnapCommandHttpUtils {
inp.getReqQueries().put(h, OnapCommandUtils.replaceLineFromInputParameters(value, params));
}
+ boolean isRemoveEmptyNodes = Boolean.parseBoolean(input.getContext().getOrDefault(OnapCommandHttpConstants.CONTEXT_REMOVE_EMPTY_JSON_NODES, "false"));
+
+ if (isRemoveEmptyNodes) {
+ input.setBody(OnapCommandHttpUtils.normalizeJson(input.getBody()));
+ }
+
return inp;
}
@@ -235,5 +246,30 @@ public class OnapCommandHttpUtils {
}
}
+ public static void normalizeJson(JsonNode node) {
+ Iterator<JsonNode> it = node.iterator();
+ while (it.hasNext()) {
+ JsonNode child = it.next();
+ if (child.isTextual() && child.asText().equals(""))
+ it.remove();
+ else if (child.isNull())
+ it.remove();
+ else
+ normalizeJson(child);
+ }
+ }
+
+ public static String normalizeJson(String json) throws OnapCommandHttpInvalidRequestBody {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode node;
+ try {
+ node = mapper.readTree(json);
+ normalizeJson(node);
+ return mapper.writeValueAsString(node);
+ } catch (Exception e) { //NOSONAR
+ throw new OnapCommandHttpInvalidRequestBody(e);
+ }
+
+ }
}
diff --git a/profiles/http/src/main/resources/open-cli-http.properties b/profiles/http/src/main/resources/open-cli-http.properties
index db19d088..bc7d33c9 100644
--- a/profiles/http/src/main/resources/open-cli-http.properties
+++ b/profiles/http/src/main/resources/open-cli-http.properties
@@ -6,7 +6,7 @@ cli.http.api_key_use_cookies=true
cli.schema.http.sections=request,service,success_codes,result_map,sample_response
cli.schema.http.sections.mandatory=request, success_codes
-cli.schema.http.request.sections=uri,method,body,headers,queries,multipart_entity_name
+cli.schema.http.request.sections=uri,method,body,headers,queries,multipart_entity_name,context
cli.schema.http.request.sections.mandatory=uri,method
cli.schema.http.service.sections=name,version,auth,mode