From 10f73445a2ea8e9829f829c1bb3bd39463c74f58 Mon Sep 17 00:00:00 2001 From: "Stan Bonev (sb5356)" Date: Fri, 19 Nov 2021 15:33:12 -0500 Subject: Restapi-call-node: Support for "" values in JSON Issue-ID: CCSDK-3529 Signed-off-by: Stan Bonev (sb5356) Change-Id: I30e903a4b7028c707f73f3516ef11eecf032c5c2 (cherry picked from commit d4c076118ff231d9ab5165a873185515896380eb) --- .../sli/plugins/restapicall/RestapiCallNode.java | 3 +- .../ccsdk/sli/plugins/restapicall/XmlJsonUtil.java | 12 +++-- .../plugins/restapicall/TestRestapiCallNode.java | 55 ++++++++++++++++++++++ 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/plugins/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java b/plugins/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java index e42dfa484..1f38b7f0f 100755 --- a/plugins/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java +++ b/plugins/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java @@ -605,8 +605,9 @@ public class RestapiCallNode implements SvcLogicJavaPlugin { } String var1 = template.substring(i1 + 2, i2); + boolean keepEmpty = var1.startsWith("~"); String value1 = format == Format.XML ? XmlJsonUtil.getXml(mm, var1) : XmlJsonUtil.getJson(mm, var1); - if (value1 == null || value1.trim().length() == 0) { + if (value1 == null || (value1.trim().length() == 0 && !keepEmpty)) { // delete the whole element (line) int i3 = template.lastIndexOf('\n', i1); if (i3 < 0) { diff --git a/plugins/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java b/plugins/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java index 9870221d7..d6ef7463a 100644 --- a/plugins/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java +++ b/plugins/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java @@ -51,6 +51,12 @@ public final class XmlJsonUtil { } public static String getJson(Map varmap, String var) { + boolean keepEmpty = false; + if (var.startsWith("~")) { + var = var.substring(1); + keepEmpty = true; + } + boolean escape = true; if (var.startsWith("'")) { var = var.substring(1); @@ -64,7 +70,7 @@ public final class XmlJsonUtil { } Object o = createStructure(varmap, var); - return generateJson(o, escape, quotes); + return generateJson(o, escape, quotes, keepEmpty); } private static Object createStructure(Map flatmap, String var) { @@ -286,11 +292,11 @@ public final class XmlJsonUtil { return null; } - private static String generateJson(Object o, boolean escape, boolean quotes) { + private static String generateJson(Object o, boolean escape, boolean quotes, boolean keepEmpty) { if (o == null) { return null; } - if (o instanceof String && ((String) o).length() == 0) { + if (o instanceof String && ((String) o).length() == 0 && !keepEmpty) { return null; } diff --git a/plugins/restapi-call-node/provider/src/test/java/org/onap/ccsdk/sli/plugins/restapicall/TestRestapiCallNode.java b/plugins/restapi-call-node/provider/src/test/java/org/onap/ccsdk/sli/plugins/restapicall/TestRestapiCallNode.java index a993bb946..595fc1de2 100755 --- a/plugins/restapi-call-node/provider/src/test/java/org/onap/ccsdk/sli/plugins/restapicall/TestRestapiCallNode.java +++ b/plugins/restapi-call-node/provider/src/test/java/org/onap/ccsdk/sli/plugins/restapicall/TestRestapiCallNode.java @@ -601,4 +601,59 @@ public class TestRestapiCallNode { assertTrue(RestapiCallNode.containsMultipleUrls("https://wiki.onap.org/test=4,5,6,http://localhost:7001/test=1,2,3,http://wiki.onap.org/test=7,8,9,10")); } + @Test + public void testKeepEmptyValue() throws Exception { + log.info("================= Testing keeping empty values ======================="); + + String template = "{\n" + + " \"name1\": \"value1\",\n" + + " \"name2\": ${empty},\n" + + " \"name3\": ${~empty},\n" + + " \"name4\": {\n" + + " \"name41\": \"value41\",\n" + + " \"name42\": ${~empty},\n" + + " \"name43\": ${~not_empty}\n" + + " },\n" + + " \"name5\": {\n"+ + " \"name51\": ${~empty},\n"+ + " \"name52\": ${empty}\n"+ + " },\n" + + " \"name6\": {\n"+ + " \"name61\": ${empty},\n"+ + " \"name62\": ${empty}\n"+ + " },\n" + + " \"name7\": \"${\"not_empty}\",\n" + + " \"name8\": \"${~\"not_empty}\",\n" + + " \"name9\": \"${\"empty}\",\n" + + " \"name10\": \"${~\"empty}\"\n" + + "}"; + + String expect = "{\n" + + " \"name1\": \"value1\",\n" + + " \"name3\": \"\",\n" + + " \"name4\": {\n" + + " \"name41\": \"value41\",\n" + + " \"name42\": \"\",\n" + + " \"name43\": \"some value\"\n" + + " },\n" + + " \"name5\": {\n" + + " \"name51\": \"\"\n" + + " },\n" + + " \"name7\": \"some value\",\n" + + " \"name8\": \"some value\",\n" + + " \"name10\": \"\"\n" + + "}"; + + SvcLogicContext ctx = new SvcLogicContext(); + ctx.setAttribute("empty", ""); + ctx.setAttribute("not_empty", "some value"); + + RestapiCallNode rcn = new RestapiCallNode(); + String req = rcn.buildXmlJsonRequest(ctx, template, Format.JSON); + + log.info("Result:\n" + req); + log.info("=================================================================="); + + assertEquals(expect, req); + } } -- cgit 1.2.3-korg