From 832fa27e7002efb57f9c141e1e8d04186a956df9 Mon Sep 17 00:00:00 2001 From: Kanagaraj Manickam k00365106 Date: Tue, 13 Mar 2018 11:28:32 +0530 Subject: Add context in http to ignore empty nodes Issue-ID: CLI-101 Change-Id: Ie84158a516f66a7d957db25386d9942e112b6ebf Signed-off-by: Kanagaraj Manickam k00365106 --- .../cli/fw/http/conf/OnapCommandHttpConstants.java | 4 ++ .../org/onap/cli/fw/http/connect/HttpInput.java | 8 +++- .../error/OnapCommandHttpInvalidRequestBody.java | 43 ++++++++++++++++++++++ .../http/schema/OnapCommandSchemaHttpLoader.java | 5 +++ .../cli/fw/http/utils/OnapCommandHttpUtils.java | 36 ++++++++++++++++++ 5 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 profiles/http/src/main/java/org/onap/cli/fw/http/error/OnapCommandHttpInvalidRequestBody.java (limited to 'profiles/http/src/main/java/org') 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 reqCookies = new HashMap<>(); + private Map context = new HashMap<>(); + private boolean binaryData; public String getUri() { @@ -116,6 +118,10 @@ public class HttpInput { return reqCookies; } + public Map getContext() { + return context; + } + public HttpInput setReqCookies(Map 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 context = (Map) 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 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); + } + + } } -- cgit 1.2.3-korg