summaryrefslogtreecommitdiffstats
path: root/restapi-call-node
diff options
context:
space:
mode:
Diffstat (limited to 'restapi-call-node')
-rwxr-xr-xrestapi-call-node/pom.xml66
-rwxr-xr-xrestapi-call-node/provider/pom.xml176
-rw-r--r--restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/JsonParser.java96
-rw-r--r--restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java1297
-rw-r--r--restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RetryPolicy.java3
-rw-r--r--restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java676
-rw-r--r--restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlParser.java236
-rw-r--r--restapi-call-node/provider/src/main/resources/META-INF/spring/restapi-call-node-context.xml30
-rw-r--r--restapi-call-node/provider/src/main/resources/META-INF/spring/restapi-call-node-osgi-context.xml8
-rw-r--r--restapi-call-node/provider/src/main/resources/default-ueb-message.json12
-rw-r--r--restapi-call-node/provider/src/main/resources/northbound-api-template.json42
-rw-r--r--restapi-call-node/provider/src/main/resources/northbound-api-template.xml2
-rw-r--r--restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestJsonParser.java44
-rw-r--r--restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestRestapiCallNode.java100
-rw-r--r--restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlJsonUtil.java115
-rw-r--r--restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlParser.java58
-rw-r--r--restapi-call-node/provider/src/test/resources/test.json50
-rw-r--r--restapi-call-node/provider/src/test/resources/test.xml280
-rw-r--r--restapi-call-node/provider/src/test/resources/test3.xml116
19 files changed, 1727 insertions, 1680 deletions
diff --git a/restapi-call-node/pom.xml b/restapi-call-node/pom.xml
index e201c270..7e1886f4 100755
--- a/restapi-call-node/pom.xml
+++ b/restapi-call-node/pom.xml
@@ -1,42 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.onap.ccsdk.sli.plugins</groupId>
- <artifactId>sdnc-plugins</artifactId>
- <version>0.1.0-SNAPSHOT</version>
- </parent>
+ <parent>
+ <groupId>org.onap.ccsdk.sli.plugins</groupId>
+ <artifactId>sdnc-plugins</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ </parent>
- <modelVersion>4.0.0</modelVersion>
- <packaging>pom</packaging>
+ <modelVersion>4.0.0</modelVersion>
+ <packaging>pom</packaging>
- <groupId>org.onap.ccsdk.sli.plugins</groupId>
- <artifactId>restapi-call-node</artifactId>
- <version>0.1.0-SNAPSHOT</version>
+ <groupId>org.onap.ccsdk.sli.plugins</groupId>
+ <artifactId>restapi-call-node</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
- <name>RESTAPI Call Node</name>
- <description>This is an implementation of DG Execute Node that makes a call to an external REST API</description>
+ <name>RESTAPI Call Node</name>
+ <description>This is an implementation of DG Execute Node that makes a call to an external REST API</description>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.onap.ccsdk.sli.plugins</groupId>
- <artifactId>restapi-call-node-features</artifactId>
- <classifier>features</classifier>
- <type>xml</type>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onap.ccsdk.sli.plugins</groupId>
- <artifactId>restapi-call-node-provider</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
- </dependencyManagement>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli.plugins</groupId>
+ <artifactId>restapi-call-node-features</artifactId>
+ <classifier>features</classifier>
+ <type>xml</type>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli.plugins</groupId>
+ <artifactId>restapi-call-node-provider</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
- <modules>
- <module>provider</module>
- <module>features</module>
- <module>installer</module>
- </modules>
+ <modules>
+ <module>provider</module>
+ <module>features</module>
+ <module>installer</module>
+ </modules>
</project>
diff --git a/restapi-call-node/provider/pom.xml b/restapi-call-node/provider/pom.xml
index 0d695bb2..ca3f004a 100755
--- a/restapi-call-node/provider/pom.xml
+++ b/restapi-call-node/provider/pom.xml
@@ -1,101 +1,101 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onap.ccsdk.sli.plugins</groupId>
- <artifactId>restapi-call-node</artifactId>
- <version>0.1.0-SNAPSHOT</version>
- </parent>
- <groupId>org.onap.ccsdk.sli.plugins</groupId>
- <artifactId>restapi-call-node-provider</artifactId>
- <version>0.1.0-SNAPSHOT</version>
- <packaging>bundle</packaging>
- <name>RESTAPI Call Node - Provider</name>
- <url>http://maven.apache.org</url>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>${spring.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.ccsdk.sli.core</groupId>
- <artifactId>sli-common</artifactId>
- <version>${sdnctl.sli.version}</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.ccsdk.sli.core</groupId>
- <artifactId>sli-provider</artifactId>
- <version>${sdnctl.sli.version}</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>${slf4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- <version>${slf4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>com.sun.jersey</groupId>
- <artifactId>jersey-client</artifactId>
- <version>${jersey.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jettison</groupId>
- <artifactId>jettison</artifactId>
- <version>${jettison.version}</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.onap.ccsdk.sli.plugins</groupId>
+ <artifactId>restapi-call-node</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ </parent>
+ <groupId>org.onap.ccsdk.sli.plugins</groupId>
+ <artifactId>restapi-call-node-provider</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+ <name>RESTAPI Call Node - Provider</name>
+ <url>http://maven.apache.org</url>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>${spring.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli.core</groupId>
+ <artifactId>sli-common</artifactId>
+ <version>${sdnctl.sli.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli.core</groupId>
+ <artifactId>sli-provider</artifactId>
+ <version>${sdnctl.sli.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-beans</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-client</artifactId>
+ <version>${jersey.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ <version>${jettison.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
- <build>
- <plugins>
+ <build>
+ <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Bundle-SymbolicName>org.onap.ccsdk.sli.restapicall</Bundle-SymbolicName>
- <Export-Package>org.onap.ccsdk.sli.plugins.restapicall</Export-Package>
- <Import-Package>*</Import-Package>
- </instructions>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>org.onap.ccsdk.sli.restapicall</Bundle-SymbolicName>
+ <Export-Package>org.onap.ccsdk.sli.plugins.restapicall</Export-Package>
+ <Import-Package>*</Import-Package>
+ </instructions>
- </configuration>
+ </configuration>
- </plugin>
+ </plugin>
- </plugins>
+ </plugins>
- </build>
+ </build>
</project>
diff --git a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/JsonParser.java b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/JsonParser.java
index f22aa0b3..4de4a34d 100644
--- a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/JsonParser.java
+++ b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/JsonParser.java
@@ -34,52 +34,52 @@ import org.slf4j.LoggerFactory;
public class JsonParser {
- private static final Logger log = LoggerFactory.getLogger(JsonParser.class);
-
- @SuppressWarnings("unchecked")
- public static Map<String, String> convertToProperties(String s) throws JSONException {
- JSONObject json = new JSONObject(s);
-
- Map<String, Object> wm = new HashMap<String, Object>();
- Iterator<String> ii = json.keys();
- while (ii.hasNext()) {
- String key1 = ii.next();
- wm.put(key1, json.get(key1));
- }
-
- Map<String, String> mm = new HashMap<String, String>();
-
- while (!wm.isEmpty())
- for (String key : new ArrayList<>(wm.keySet())) {
- Object o = wm.get(key);
- wm.remove(key);
-
- if (o instanceof Boolean || o instanceof Number || o instanceof String) {
- mm.put(key, o.toString());
-
- log.info("Added property: " + key + ": " + o.toString());
- }
-
- else if (o instanceof JSONObject) {
- JSONObject jo = (JSONObject) o;
- Iterator<String> i = jo.keys();
- while (i.hasNext()) {
- String key1 = i.next();
- wm.put(key + "." + key1, jo.get(key1));
- }
- }
-
- else if (o instanceof JSONArray) {
- JSONArray ja = (JSONArray) o;
- mm.put(key + "_length", String.valueOf(ja.length()));
-
- log.info("Added property: " + key + "_length" + ": " + String.valueOf(ja.length()));
-
- for (int i = 0; i < ja.length(); i++)
- wm.put(key + '[' + i + ']', ja.get(i));
- }
- }
-
- return mm;
- }
+ private static final Logger log = LoggerFactory.getLogger(JsonParser.class);
+
+ @SuppressWarnings("unchecked")
+ public static Map<String, String> convertToProperties(String s) throws JSONException {
+ JSONObject json = new JSONObject(s);
+
+ Map<String, Object> wm = new HashMap<String, Object>();
+ Iterator<String> ii = json.keys();
+ while (ii.hasNext()) {
+ String key1 = ii.next();
+ wm.put(key1, json.get(key1));
+ }
+
+ Map<String, String> mm = new HashMap<String, String>();
+
+ while (!wm.isEmpty())
+ for (String key : new ArrayList<>(wm.keySet())) {
+ Object o = wm.get(key);
+ wm.remove(key);
+
+ if (o instanceof Boolean || o instanceof Number || o instanceof String) {
+ mm.put(key, o.toString());
+
+ log.info("Added property: " + key + ": " + o.toString());
+ }
+
+ else if (o instanceof JSONObject) {
+ JSONObject jo = (JSONObject) o;
+ Iterator<String> i = jo.keys();
+ while (i.hasNext()) {
+ String key1 = i.next();
+ wm.put(key + "." + key1, jo.get(key1));
+ }
+ }
+
+ else if (o instanceof JSONArray) {
+ JSONArray ja = (JSONArray) o;
+ mm.put(key + "_length", String.valueOf(ja.length()));
+
+ log.info("Added property: " + key + "_length" + ": " + String.valueOf(ja.length()));
+
+ for (int i = 0; i < ja.length(); i++)
+ wm.put(key + '[' + i + ']', ja.get(i));
+ }
+ }
+
+ return mm;
+ }
}
diff --git a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java
index ef314555..fb772268 100644
--- a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java
+++ b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RestapiCallNode.java
@@ -61,25 +61,25 @@ import com.sun.jersey.client.urlconnection.HTTPSProperties;
public class RestapiCallNode implements SvcLogicJavaPlugin {
- private static final Logger log = LoggerFactory.getLogger(RestapiCallNode.class);
+ private static final Logger log = LoggerFactory.getLogger(RestapiCallNode.class);
- private String uebServers;
- private String defaultUebTemplateFileName = "/opt/bvc/restapi/templates/default-ueb-message.json";
- protected RetryPolicyStore retryPolicyStore;
+ private String uebServers;
+ private String defaultUebTemplateFileName = "/opt/bvc/restapi/templates/default-ueb-message.json";
+ protected RetryPolicyStore retryPolicyStore;
- protected RetryPolicyStore getRetryPolicyStore() {
- return retryPolicyStore;
- }
+ protected RetryPolicyStore getRetryPolicyStore() {
+ return retryPolicyStore;
+ }
- public void setRetryPolicyStore(RetryPolicyStore retryPolicyStore) {
- this.retryPolicyStore = retryPolicyStore;
- }
+ public void setRetryPolicyStore(RetryPolicyStore retryPolicyStore) {
+ this.retryPolicyStore = retryPolicyStore;
+ }
- public RestapiCallNode() {
+ public RestapiCallNode() {
- }
+ }
- /**
+ /**
* Allows Directed Graphs the ability to interact with REST APIs.
* @param parameters HashMap<String,String> of parameters passed by the DG to this function
* <table border="1">
@@ -106,654 +106,655 @@ public class RestapiCallNode implements SvcLogicJavaPlugin {
* @since 11.0.2
* @see String#split(String, int)
*/
- public void sendRequest(Map<String, String> paramMap, SvcLogicContext ctx) throws SvcLogicException {
- sendRequest(paramMap, ctx, null);
- }
-
- public void sendRequest(Map<String, String> paramMap, SvcLogicContext ctx, Integer retryCount)
- throws SvcLogicException {
-
- RetryPolicy retryPolicy = null;
- HttpResponse r = null;
- try {
- Parameters p = getParameters(paramMap);
- if (p.partner != null) {
- retryPolicy = retryPolicyStore.getRetryPolicy(p.partner);
- }
- String pp = p.responsePrefix != null ? p.responsePrefix + '.' : "";
-
- String req = null;
- if (p.templateFileName != null) {
- String reqTemplate = readFile(p.templateFileName);
- req = buildXmlJsonRequest(ctx, reqTemplate, p.format);
- }
- r = sendHttpRequest(req, p);
- setResponseStatus(ctx, p.responsePrefix, r);
-
- if (p.dumpHeaders && r.headers != null) {
+ public void sendRequest(Map<String, String> paramMap, SvcLogicContext ctx) throws SvcLogicException {
+ sendRequest(paramMap, ctx, null);
+ }
+
+ public void sendRequest(Map<String, String> paramMap, SvcLogicContext ctx, Integer retryCount)
+ throws SvcLogicException {
+
+ RetryPolicy retryPolicy = null;
+ HttpResponse r = null;
+ try {
+ Parameters p = getParameters(paramMap);
+ if (p.partner != null) {
+ retryPolicy = retryPolicyStore.getRetryPolicy(p.partner);
+ }
+ String pp = p.responsePrefix != null ? p.responsePrefix + '.' : "";
+
+ String req = null;
+ if (p.templateFileName != null) {
+ String reqTemplate = readFile(p.templateFileName);
+ req = buildXmlJsonRequest(ctx, reqTemplate, p.format);
+ }
+ r = sendHttpRequest(req, p);
+ setResponseStatus(ctx, p.responsePrefix, r);
+
+ if (p.dumpHeaders && r.headers != null) {
for (Entry<String, List<String>> a : r.headers.entrySet()) {
ctx.setAttribute(pp + "header." + a.getKey(), StringUtils.join(a.getValue(), ","));
}
}
- if (r.body != null && r.body.trim().length() > 0) {
- ctx.setAttribute(pp + "httpResponse", r.body);
-
- if (p.convertResponse) {
- Map<String, String> mm = null;
- if (p.format == Format.XML)
- mm = XmlParser.convertToProperties(r.body, p.listNameList);
- else if (p.format == Format.JSON)
- mm = JsonParser.convertToProperties(r.body);
-
- if (mm != null)
- for (String key : mm.keySet())
- ctx.setAttribute(pp + key, mm.get(key));
- }
- }
- } catch (Exception e) {
- boolean shouldRetry = false;
- if (e.getCause() instanceof java.net.SocketException) {
- shouldRetry = true;
- }
-
- log.error("Error sending the request: " + e.getMessage(), e);
- String prefix = parseParam(paramMap, "responsePrefix", false, null);
- if (retryPolicy == null || shouldRetry == false) {
- setFailureResponseStatus(ctx, prefix, e.getMessage(), r);
- } else {
- if (retryCount == null) {
- retryCount = 0;
- }
- String retryMessage = retryCount + " attempts were made out of " + retryPolicy.getMaximumRetries() +
- " maximum retries.";
- log.debug(retryMessage);
- try {
- retryCount = retryCount + 1;
- if (retryCount < retryPolicy.getMaximumRetries() + 1) {
- URI uri = new URI(paramMap.get("restapiUrl"));
- String hostname = uri.getHost();
- String retryString = retryPolicy.getNextHostName((uri.toString()));
- URI uriTwo = new URI(retryString);
- URI retryUri = UriBuilder.fromUri(uri).host(uriTwo.getHost()).port(uriTwo.getPort()).scheme(
- uriTwo.getScheme()).build();
- paramMap.put("restapiUrl", retryUri.toString());
- log.debug("URL was set to " + retryUri.toString());
- log.debug("Failed to communicate with host " + hostname +
- ". Request will be re-attempted using the host " + retryString + ".");
- log.debug("This is retry attempt " + retryCount + " out of " + retryPolicy.getMaximumRetries());
- sendRequest(paramMap, ctx, retryCount);
- } else {
- log.debug("Maximum retries reached, calling setFailureResponseStatus.");
- setFailureResponseStatus(ctx, prefix, e.getMessage(), r);
- }
- } catch (Exception ex) {
- log.error("Could not attempt retry.", ex);
- String retryErrorMessage =
- "Retry attempt has failed. No further retry shall be attempted, calling setFailureResponseStatus.";
- setFailureResponseStatus(ctx, prefix, retryErrorMessage, r);
- }
- }
- }
-
- if (r != null && r.code >= 300)
- throw new SvcLogicException(String.valueOf(r.code) + ": " + r.message);
- }
-
- protected Parameters getParameters(Map<String, String> paramMap) throws SvcLogicException {
- Parameters p = new Parameters();
- p.templateFileName = parseParam(paramMap, "templateFileName", false, null);
- p.restapiUrl = parseParam(paramMap, "restapiUrl", true, null);
- p.restapiUser = parseParam(paramMap, "restapiUser", false, null);
- p.restapiPassword = parseParam(paramMap, "restapiPassword", false, null);
- p.contentType = parseParam(paramMap, "contentType", false, null);
- p.format = Format.fromString(parseParam(paramMap, "format", false, "json"));
- p.httpMethod = HttpMethod.fromString(parseParam(paramMap, "httpMethod", false, "post"));
- p.responsePrefix = parseParam(paramMap, "responsePrefix", false, null);
- p.listNameList = getListNameList(paramMap);
- String skipSendingStr = paramMap.get("skipSending");
- p.skipSending = skipSendingStr != null && skipSendingStr.equalsIgnoreCase("true");
- p.convertResponse = Boolean.valueOf(parseParam(paramMap, "convertResponse", false, "true"));
- p.trustStoreFileName = parseParam(paramMap, "trustStoreFileName", false, null);
- p.trustStorePassword = parseParam(paramMap, "trustStorePassword", false, null);
- p.keyStoreFileName = parseParam(paramMap, "keyStoreFileName", false, null);
- p.keyStorePassword = parseParam(paramMap, "keyStorePassword", false, null);
- p.ssl = p.trustStoreFileName != null && p.trustStorePassword != null && p.keyStoreFileName != null &&
- p.keyStorePassword != null;
- p.customHttpHeaders = parseParam(paramMap, "customHttpHeaders", false, null);
- p.partner = parseParam(paramMap, "partner", false, null);
- p.dumpHeaders = Boolean.valueOf(parseParam(paramMap, "dumpHeaders", false, null));
- return p;
- }
-
- protected Set<String> getListNameList(Map<String, String> paramMap) {
- Set<String> ll = new HashSet<String>();
- for (String key : paramMap.keySet())
- if (key.startsWith("listName"))
- ll.add(paramMap.get(key));
- return ll;
- }
-
- protected String parseParam(Map<String, String> paramMap, String name, boolean required, String def)
- throws SvcLogicException {
- String s = paramMap.get(name);
-
- if (s == null || s.trim().length() == 0) {
- if (!required)
- return def;
- throw new SvcLogicException("Parameter " + name + " is required in RestapiCallNode");
- }
-
- s = s.trim();
- String value = "";
- int i = 0;
- int i1 = s.indexOf('%');
- while (i1 >= 0) {
- int i2 = s.indexOf('%', i1 + 1);
- if (i2 < 0)
- break;
-
- String varName = s.substring(i1 + 1, i2);
- String varValue = System.getenv(varName);
- if (varValue == null)
- varValue = "%" + varName + "%";
-
- value += s.substring(i, i1);
- value += varValue;
-
- i = i2 + 1;
- i1 = s.indexOf('%', i);
- }
- value += s.substring(i);
-
- log.info("Parameter " + name + ": [" + value + "]");
- return value;
- }
-
- protected String buildXmlJsonRequest(SvcLogicContext ctx, String template, Format format) {
- log.info("Building " + format + " started");
- long t1 = System.currentTimeMillis();
-
- template = expandRepeats(ctx, template, 1);
-
- Map<String, String> mm = new HashMap<>();
- for (String s : ctx.getAttributeKeySet())
- mm.put(s, ctx.getAttribute(s));
-
- StringBuilder ss = new StringBuilder();
- int i = 0;
- while (i < template.length()) {
- int i1 = template.indexOf("${", i);
- if (i1 < 0) {
- ss.append(template.substring(i));
- break;
- }
-
- int i2 = template.indexOf('}', i1 + 2);
- if (i2 < 0)
- throw new RuntimeException("Template error: Matching } not found");
-
- String var1 = template.substring(i1 + 2, i2);
- String value1 = format == Format.XML ? XmlJsonUtil.getXml(mm, var1) : XmlJsonUtil.getJson(mm, var1);
- // log.info(" " + var1 + ": " + value1);
- if (value1 == null || value1.trim().length() == 0) {
- // delete the whole element (line)
- int i3 = template.lastIndexOf('\n', i1);
- if (i3 < 0)
- i3 = 0;
- int i4 = template.indexOf('\n', i1);
- if (i4 < 0)
- i4 = template.length();
-
- if (i < i3)
- ss.append(template.substring(i, i3));
- i = i4;
- } else {
- ss.append(template.substring(i, i1)).append(value1);
- i = i2 + 1;
- }
- }
-
- String req = format == Format.XML
- ? XmlJsonUtil.removeEmptyStructXml(ss.toString()) : XmlJsonUtil.removeEmptyStructJson(ss.toString());
-
- if (format == Format.JSON)
- req = XmlJsonUtil.removeLastCommaJson(req);
-
- long t2 = System.currentTimeMillis();
- log.info("Building " + format + " completed. Time: " + (t2 - t1));
-
- return req;
- }
-
- protected String expandRepeats(SvcLogicContext ctx, String template, int level) {
- StringBuilder newTemplate = new StringBuilder();
- int k = 0;
- while (k < template.length()) {
- int i1 = template.indexOf("${repeat:", k);
- if (i1 < 0) {
- newTemplate.append(template.substring(k));
- break;
- }
-
- int i2 = template.indexOf(':', i1 + 9);
- if (i2 < 0)
- throw new RuntimeException(
- "Template error: Context variable name followed by : is required after repeat");
-
- // Find the closing }, store in i3
- int nn = 1;
- int i3 = -1;
- int i = i2;
- while (nn > 0 && i < template.length()) {
- i3 = template.indexOf('}', i);
- if (i3 < 0)
- throw new RuntimeException("Template error: Matching } not found");
- int i32 = template.indexOf('{', i);
- if (i32 >= 0 && i32 < i3) {
- nn++;
- i = i32 + 1;
- } else {
- nn--;
- i = i3 + 1;
- }
- }
-
- String var1 = template.substring(i1 + 9, i2);
- String value1 = ctx.getAttribute(var1);
- log.info(" " + var1 + ": " + value1);
- int n = 0;
- try {
- n = Integer.parseInt(value1);
- } catch (Exception e) {
- n = 0;
- }
-
- newTemplate.append(template.substring(k, i1));
-
- String rpt = template.substring(i2 + 1, i3);
-
- for (int ii = 0; ii < n; ii++) {
- String ss = rpt.replaceAll("\\[\\$\\{" + level + "\\}\\]", "[" + ii + "]");
- if (ii == n - 1 && ss.trim().endsWith(",")) {
- int i4 = ss.lastIndexOf(',');
- if (i4 > 0)
- ss = ss.substring(0, i4) + ss.substring(i4 + 1);
- }
- newTemplate.append(ss);
- }
-
- k = i3 + 1;
- }
-
- if (k == 0)
- return newTemplate.toString();
-
- return expandRepeats(ctx, newTemplate.toString(), level + 1);
- }
-
- protected String readFile(String fileName) throws Exception {
- byte[] encoded = Files.readAllBytes(Paths.get(fileName));
- return new String(encoded, "UTF-8");
- }
-
- protected HttpResponse sendHttpRequest(String request, Parameters p) throws Exception {
- ClientConfig config = new DefaultClientConfig();
- SSLContext ssl = null;
- if (p.ssl && p.restapiUrl.startsWith("https"))
- ssl = createSSLContext(p);
- if (ssl != null) {
- HostnameVerifier hostnameVerifier = new HostnameVerifier() {
-
- @Override
- public boolean verify(String hostname, SSLSession session) {
- return true;
- }
- };
-
- config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
- new HTTPSProperties(hostnameVerifier, ssl));
- }
-
- logProperties(config.getProperties());
-
- Client client = Client.create(config);
- client.setConnectTimeout(5000);
- if (p.restapiUser != null)
- client.addFilter(new HTTPBasicAuthFilter(p.restapiUser, p.restapiPassword));
- WebResource webResource = client.resource(p.restapiUrl);
-
- log.info("Sending request:");
- log.info(request);
- long t1 = System.currentTimeMillis();
-
- HttpResponse r = new HttpResponse();
- r.code = 200;
-
- if (!p.skipSending) {
- String tt = p.format == Format.XML ? "application/xml" : "application/json";
- String tt1 = tt + ";charset=UTF-8";
- if (p.contentType != null) {
- tt = p.contentType;
- tt1 = p.contentType;
- }
-
- WebResource.Builder webResourceBuilder = webResource.accept(tt).type(tt1);
+ if (r.body != null && r.body.trim().length() > 0) {
+ ctx.setAttribute(pp + "httpResponse", r.body);
+
+ if (p.convertResponse) {
+ Map<String, String> mm = null;
+ if (p.format == Format.XML)
+ mm = XmlParser.convertToProperties(r.body, p.listNameList);
+ else if (p.format == Format.JSON)
+ mm = JsonParser.convertToProperties(r.body);
+
+ if (mm != null)
+ for (String key : mm.keySet())
+ ctx.setAttribute(pp + key, mm.get(key));
+ }
+ }
+ } catch (Exception e) {
+ boolean shouldRetry = false;
+ if (e.getCause() instanceof java.net.SocketException) {
+ shouldRetry = true;
+ }
+
+ log.error("Error sending the request: " + e.getMessage(), e);
+ String prefix = parseParam(paramMap, "responsePrefix", false, null);
+ if (retryPolicy == null || shouldRetry == false) {
+ setFailureResponseStatus(ctx, prefix, e.getMessage(), r);
+ } else {
+ if (retryCount == null) {
+ retryCount = 0;
+ }
+ String retryMessage = retryCount + " attempts were made out of " + retryPolicy.getMaximumRetries() +
+ " maximum retries.";
+ log.debug(retryMessage);
+ try {
+ retryCount = retryCount + 1;
+ if (retryCount < retryPolicy.getMaximumRetries() + 1) {
+ URI uri = new URI(paramMap.get("restapiUrl"));
+ String hostname = uri.getHost();
+ String retryString = retryPolicy.getNextHostName((uri.toString()));
+ URI uriTwo = new URI(retryString);
+ URI retryUri = UriBuilder.fromUri(uri).host(uriTwo.getHost()).port(uriTwo.getPort()).scheme(
+ uriTwo.getScheme()).build();
+ paramMap.put("restapiUrl", retryUri.toString());
+ log.debug("URL was set to " + retryUri.toString());
+ log.debug("Failed to communicate with host " + hostname +
+ ". Request will be re-attempted using the host " + retryString + ".");
+ log.debug("This is retry attempt " + retryCount + " out of " + retryPolicy.getMaximumRetries());
+ sendRequest(paramMap, ctx, retryCount);
+ } else {
+ log.debug("Maximum retries reached, calling setFailureResponseStatus.");
+ setFailureResponseStatus(ctx, prefix, e.getMessage(), r);
+ }
+ } catch (Exception ex) {
+ log.error("Could not attempt retry.", ex);
+ String retryErrorMessage =
+ "Retry attempt has failed. No further retry shall be attempted, calling setFailureResponseStatus.";
+ setFailureResponseStatus(ctx, prefix, retryErrorMessage, r);
+ }
+ }
+ }
+
+ if (r != null && r.code >= 300)
+ throw new SvcLogicException(String.valueOf(r.code) + ": " + r.message);
+ }
+
+ protected Parameters getParameters(Map<String, String> paramMap) throws SvcLogicException {
+ Parameters p = new Parameters();
+ p.templateFileName = parseParam(paramMap, "templateFileName", false, null);
+ p.restapiUrl = parseParam(paramMap, "restapiUrl", true, null);
+ p.restapiUser = parseParam(paramMap, "restapiUser", false, null);
+ p.restapiPassword = parseParam(paramMap, "restapiPassword", false, null);
+ p.contentType = parseParam(paramMap, "contentType", false, null);
+ p.format = Format.fromString(parseParam(paramMap, "format", false, "json"));
+ p.httpMethod = HttpMethod.fromString(parseParam(paramMap, "httpMethod", false, "post"));
+ p.responsePrefix = parseParam(paramMap, "responsePrefix", false, null);
+ p.listNameList = getListNameList(paramMap);
+ String skipSendingStr = paramMap.get("skipSending");
+ p.skipSending = skipSendingStr != null && skipSendingStr.equalsIgnoreCase("true");
+ p.convertResponse = Boolean.valueOf(parseParam(paramMap, "convertResponse", false, "true"));
+ p.trustStoreFileName = parseParam(paramMap, "trustStoreFileName", false, null);
+ p.trustStorePassword = parseParam(paramMap, "trustStorePassword", false, null);
+ p.keyStoreFileName = parseParam(paramMap, "keyStoreFileName", false, null);
+ p.keyStorePassword = parseParam(paramMap, "keyStorePassword", false, null);
+ p.ssl = p.trustStoreFileName != null && p.trustStorePassword != null && p.keyStoreFileName != null &&
+ p.keyStorePassword != null;
+ p.customHttpHeaders = parseParam(paramMap, "customHttpHeaders", false, null);
+ p.partner = parseParam(paramMap, "partner", false, null);
+ p.dumpHeaders = Boolean.valueOf(parseParam(paramMap, "dumpHeaders", false, null));
+ return p;
+ }
+
+ protected Set<String> getListNameList(Map<String, String> paramMap) {
+ Set<String> ll = new HashSet<String>();
+ for (String key : paramMap.keySet())
+ if (key.startsWith("listName"))
+ ll.add(paramMap.get(key));
+ return ll;
+ }
+
+ protected String parseParam(Map<String, String> paramMap, String name, boolean required, String def)
+ throws SvcLogicException {
+ String s = paramMap.get(name);
+
+ if (s == null || s.trim().length() == 0) {
+ if (!required)
+ return def;
+ throw new SvcLogicException("Parameter " + name + " is required in RestapiCallNode");
+ }
+
+ s = s.trim();
+ String value = "";
+ int i = 0;
+ int i1 = s.indexOf('%');
+ while (i1 >= 0) {
+ int i2 = s.indexOf('%', i1 + 1);
+ if (i2 < 0)
+ break;
+
+ String varName = s.substring(i1 + 1, i2);
+ String varValue = System.getenv(varName);
+ if (varValue == null)
+ varValue = "%" + varName + "%";
+
+ value += s.substring(i, i1);
+ value += varValue;
+
+ i = i2 + 1;
+ i1 = s.indexOf('%', i);
+ }
+ value += s.substring(i);
+
+ log.info("Parameter " + name + ": [" + value + "]");
+ return value;
+ }
+
+ protected String buildXmlJsonRequest(SvcLogicContext ctx, String template, Format format) {
+ log.info("Building " + format + " started");
+ long t1 = System.currentTimeMillis();
+
+ template = expandRepeats(ctx, template, 1);
+
+ Map<String, String> mm = new HashMap<>();
+ for (String s : ctx.getAttributeKeySet())
+ mm.put(s, ctx.getAttribute(s));
+
+ StringBuilder ss = new StringBuilder();
+ int i = 0;
+ while (i < template.length()) {
+ int i1 = template.indexOf("${", i);
+ if (i1 < 0) {
+ ss.append(template.substring(i));
+ break;
+ }
+
+ int i2 = template.indexOf('}', i1 + 2);
+ if (i2 < 0)
+ throw new RuntimeException("Template error: Matching } not found");
+
+ String var1 = template.substring(i1 + 2, i2);
+ String value1 = format == Format.XML ? XmlJsonUtil.getXml(mm, var1) : XmlJsonUtil.getJson(mm, var1);
+ // log.info(" " + var1 + ": " + value1);
+ if (value1 == null || value1.trim().length() == 0) {
+ // delete the whole element (line)
+ int i3 = template.lastIndexOf('\n', i1);
+ if (i3 < 0)
+ i3 = 0;
+ int i4 = template.indexOf('\n', i1);
+ if (i4 < 0)
+ i4 = template.length();
+
+ if (i < i3)
+ ss.append(template.substring(i, i3));
+ i = i4;
+ } else {
+ ss.append(template.substring(i, i1)).append(value1);
+ i = i2 + 1;
+ }
+ }
+
+ String req = format == Format.XML
+ ? XmlJsonUtil.removeEmptyStructXml(ss.toString()) : XmlJsonUtil.removeEmptyStructJson(ss.toString());
+
+ if (format == Format.JSON)
+ req = XmlJsonUtil.removeLastCommaJson(req);
+
+ long t2 = System.currentTimeMillis();
+ log.info("Building " + format + " completed. Time: " + (t2 - t1));
+
+ return req;
+ }
+
+ protected String expandRepeats(SvcLogicContext ctx, String template, int level) {
+ StringBuilder newTemplate = new StringBuilder();
+ int k = 0;
+ while (k < template.length()) {
+ int i1 = template.indexOf("${repeat:", k);
+ if (i1 < 0) {
+ newTemplate.append(template.substring(k));
+ break;
+ }
+
+ int i2 = template.indexOf(':', i1 + 9);
+ if (i2 < 0)
+ throw new RuntimeException(
+ "Template error: Context variable name followed by : is required after repeat");
+
+ // Find the closing }, store in i3
+ int nn = 1;
+ int i3 = -1;
+ int i = i2;
+ while (nn > 0 && i < template.length()) {
+ i3 = template.indexOf('}', i);
+ if (i3 < 0)
+ throw new RuntimeException("Template error: Matching } not found");
+ int i32 = template.indexOf('{', i);
+ if (i32 >= 0 && i32 < i3) {
+ nn++;
+ i = i32 + 1;
+ } else {
+ nn--;
+ i = i3 + 1;
+ }
+ }
+
+ String var1 = template.substring(i1 + 9, i2);
+ String value1 = ctx.getAttribute(var1);
+ log.info(" " + var1 + ": " + value1);
+ int n = 0;
+ try {
+ n = Integer.parseInt(value1);
+ } catch (Exception e) {
+ n = 0;
+ }
+
+ newTemplate.append(template.substring(k, i1));
+
+ String rpt = template.substring(i2 + 1, i3);
+
+ for (int ii = 0; ii < n; ii++) {
+ String ss = rpt.replaceAll("\\[\\$\\{" + level + "\\}\\]", "[" + ii + "]");
+ if (ii == n - 1 && ss.trim().endsWith(",")) {
+ int i4 = ss.lastIndexOf(',');
+ if (i4 > 0)
+ ss = ss.substring(0, i4) + ss.substring(i4 + 1);
+ }
+ newTemplate.append(ss);
+ }
+
+ k = i3 + 1;
+ }
+
+ if (k == 0)
+ return newTemplate.toString();
+
+ return expandRepeats(ctx, newTemplate.toString(), level + 1);
+ }
+
+ protected String readFile(String fileName) throws Exception {
+ byte[] encoded = Files.readAllBytes(Paths.get(fileName));
+ return new String(encoded, "UTF-8");
+ }
+
+ protected HttpResponse sendHttpRequest(String request, Parameters p) throws Exception {
+ ClientConfig config = new DefaultClientConfig();
+ SSLContext ssl = null;
+ if (p.ssl && p.restapiUrl.startsWith("https"))
+ ssl = createSSLContext(p);
+ if (ssl != null) {
+ HostnameVerifier hostnameVerifier = new HostnameVerifier() {
+
+ @Override
+ public boolean verify(String hostname, SSLSession session) {
+ return true;
+ }
+ };
+
+ config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
+ new HTTPSProperties(hostnameVerifier, ssl));
+ }
+
+ logProperties(config.getProperties());
+
+ Client client = Client.create(config);
+ client.setConnectTimeout(5000);
+ if (p.restapiUser != null)
+ client.addFilter(new HTTPBasicAuthFilter(p.restapiUser, p.restapiPassword));
+ WebResource webResource = client.resource(p.restapiUrl);
+
+ log.info("Sending request:");
+ log.info(request);
+ long t1 = System.currentTimeMillis();
+
+ HttpResponse r = new HttpResponse();
+ r.code = 200;
+
+ if (!p.skipSending) {
+ String tt = p.format == Format.XML ? "application/xml" : "application/json";
+ String tt1 = tt + ";charset=UTF-8";
+ if (p.contentType != null) {
+ tt = p.contentType;
+ tt1 = p.contentType;
+ }
+
+ WebResource.Builder webResourceBuilder = webResource.accept(tt).type(tt1);
if (p.customHttpHeaders != null && p.customHttpHeaders.length() > 0) {
String[] keyValuePairs = p.customHttpHeaders.split(",");
for (String singlePair : keyValuePairs) {
int equalPosition = singlePair.indexOf('=');
- webResourceBuilder.header(singlePair.substring(0, equalPosition), singlePair.substring(equalPosition + 1, singlePair.length()));
+ webResourceBuilder.header(singlePair.substring(0, equalPosition),
+ singlePair.substring(equalPosition + 1, singlePair.length()));
}
}
webResourceBuilder.header("X-ECOMP-RequestID",org.slf4j.MDC.get("X-ECOMP-RequestID"));
- ClientResponse response = webResourceBuilder.method(p.httpMethod.toString(), ClientResponse.class, request);
-
- r.code = response.getStatus();
- r.headers = response.getHeaders();
- EntityTag etag = response.getEntityTag();
- if (etag != null)
- r.message = etag.getValue();
- if (response.hasEntity() && r.code != 204)
- r.body = response.getEntity(String.class);
- }
-
- long t2 = System.currentTimeMillis();
- log.info("Response received. Time: " + (t2 - t1));
- log.info("HTTP response code: " + r.code);
- log.info("HTTP response message: " + r.message);
- logHeaders(r.headers);
- log.info("HTTP response: " + r.body);
-
- return r;
- }
-
- protected SSLContext createSSLContext(Parameters p) {
- try {
- System.setProperty("jsse.enableSNIExtension", "false");
- System.setProperty("javax.net.ssl.trustStore", p.trustStoreFileName);
- System.setProperty("javax.net.ssl.trustStorePassword", p.trustStorePassword);
-
- HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
-
- @Override
- public boolean verify(String string, SSLSession ssls) {
- return true;
- }
- });
-
- KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
- FileInputStream in = new FileInputStream(p.keyStoreFileName);
- KeyStore ks = KeyStore.getInstance("PKCS12");
- char[] pwd = p.keyStorePassword.toCharArray();
- ks.load(in, pwd);
- kmf.init(ks, pwd);
-
- SSLContext ctx = SSLContext.getInstance("TLS");
- ctx.init(kmf.getKeyManagers(), null, null);
- return ctx;
- } catch (Exception e) {
- log.error("Error creating SSLContext: " + e.getMessage(), e);
- }
- return null;
- }
-
- protected void setFailureResponseStatus(SvcLogicContext ctx, String prefix, String errorMessage, HttpResponse r) {
- r = new HttpResponse();
- r.code = 500;
- r.message = errorMessage;
- String pp = prefix != null ? prefix + '.' : "";
- ctx.setAttribute(pp + "response-code", String.valueOf(r.code));
- ctx.setAttribute(pp + "response-message", r.message);
- }
-
- protected void setResponseStatus(SvcLogicContext ctx, String prefix, HttpResponse r) {
- String pp = prefix != null ? prefix + '.' : "";
- ctx.setAttribute(pp + "response-code", String.valueOf(r.code));
- ctx.setAttribute(pp + "response-message", r.message);
- }
-
- public void sendFile(Map<String, String> paramMap, SvcLogicContext ctx) throws SvcLogicException {
- HttpResponse r = null;
- try {
- FileParam p = getFileParameters(paramMap);
- byte[] data = Files.readAllBytes(Paths.get(p.fileName));
-
- r = sendHttpData(data, p);
- setResponseStatus(ctx, p.responsePrefix, r);
-
- } catch (Exception e) {
- log.error("Error sending the request: " + e.getMessage(), e);
-
- r = new HttpResponse();
- r.code = 500;
- r.message = e.getMessage();
- String prefix = parseParam(paramMap, "responsePrefix", false, null);
- setResponseStatus(ctx, prefix, r);
- }
-
- if (r != null && r.code >= 300)
- throw new SvcLogicException(String.valueOf(r.code) + ": " + r.message);
- }
-
- private static class FileParam {
-
- public String fileName;
- public String url;
- public String user;
- public String password;
- public HttpMethod httpMethod;
- public String responsePrefix;
- public boolean skipSending;
- }
-
- private FileParam getFileParameters(Map<String, String> paramMap) throws SvcLogicException {
- FileParam p = new FileParam();
- p.fileName = parseParam(paramMap, "fileName", true, null);
- p.url = parseParam(paramMap, "url", true, null);
- p.user = parseParam(paramMap, "user", false, null);
- p.password = parseParam(paramMap, "password", false, null);
- p.httpMethod = HttpMethod.fromString(parseParam(paramMap, "httpMethod", false, "post"));
- p.responsePrefix = parseParam(paramMap, "responsePrefix", false, null);
- String skipSendingStr = paramMap.get("skipSending");
- p.skipSending = skipSendingStr != null && skipSendingStr.equalsIgnoreCase("true");
- return p;
- }
-
- protected HttpResponse sendHttpData(byte[] data, FileParam p) {
- Client client = Client.create();
- client.setConnectTimeout(5000);
- client.setFollowRedirects(true);
- if (p.user != null)
- client.addFilter(new HTTPBasicAuthFilter(p.user, p.password));
- WebResource webResource = client.resource(p.url);
-
- log.info("Sending file");
- long t1 = System.currentTimeMillis();
-
- HttpResponse r = new HttpResponse();
- r.code = 200;
-
- if (!p.skipSending) {
- String tt = "application/octet-stream";
-
- ClientResponse response = null;
- if (p.httpMethod == HttpMethod.POST)
- response = webResource.accept(tt).type(tt).post(ClientResponse.class, data);
- else if (p.httpMethod == HttpMethod.PUT)
- response = webResource.accept(tt).type(tt).put(ClientResponse.class, data);
-
- r.code = response.getStatus();
- r.headers = response.getHeaders();
- EntityTag etag = response.getEntityTag();
- if (etag != null)
- r.message = etag.getValue();
- if (response.hasEntity() && r.code != 204)
- r.body = response.getEntity(String.class);
-
- if (r.code == 301) {
- String newUrl = response.getHeaders().getFirst("Location");
-
- log.info("Got response code 301. Sending same request to URL: " + newUrl);
-
- webResource = client.resource(newUrl);
-
- if (p.httpMethod == HttpMethod.POST)
- response = webResource.accept(tt).type(tt).post(ClientResponse.class, data);
- else if (p.httpMethod == HttpMethod.PUT)
- response = webResource.accept(tt).type(tt).put(ClientResponse.class, data);
-
- r.code = response.getStatus();
- etag = response.getEntityTag();
- if (etag != null)
- r.message = etag.getValue();
- if (response.hasEntity() && r.code != 204)
- r.body = response.getEntity(String.class);
- }
- }
-
- long t2 = System.currentTimeMillis();
- log.info("Response received. Time: " + (t2 - t1));
- log.info("HTTP response code: " + r.code);
- log.info("HTTP response message: " + r.message);
- logHeaders(r.headers);
- log.info("HTTP response: " + r.body);
-
- return r;
- }
-
- public void postMessageOnUeb(Map<String, String> paramMap, SvcLogicContext ctx) throws SvcLogicException {
- HttpResponse r = null;
- try {
- UebParam p = getUebParameters(paramMap);
-
- String pp = p.responsePrefix != null ? p.responsePrefix + '.' : "";
-
- String req = null;
-
- if (p.templateFileName == null) {
- log.info("No template file name specified. Using default UEB template: " + defaultUebTemplateFileName);
- p.templateFileName = defaultUebTemplateFileName;
- }
-
- String reqTemplate = readFile(p.templateFileName);
- reqTemplate = reqTemplate.replaceAll("rootVarName", p.rootVarName);
- req = buildXmlJsonRequest(ctx, reqTemplate, Format.JSON);
-
- r = postOnUeb(req, p);
- setResponseStatus(ctx, p.responsePrefix, r);
- if (r.body != null)
- ctx.setAttribute(pp + "httpResponse", r.body);
-
- } catch (Exception e) {
- log.error("Error sending the request: " + e.getMessage(), e);
-
- r = new HttpResponse();
- r.code = 500;
- r.message = e.getMessage();
- String prefix = parseParam(paramMap, "responsePrefix", false, null);
- setResponseStatus(ctx, prefix, r);
- }
-
- if (r != null && r.code >= 300)
- throw new SvcLogicException(String.valueOf(r.code) + ": " + r.message);
- }
-
- private static class UebParam {
-
- public String topic;
- public String templateFileName;
- public String rootVarName;
- public String responsePrefix;
- public boolean skipSending;
- }
-
- private UebParam getUebParameters(Map<String, String> paramMap) throws SvcLogicException {
- UebParam p = new UebParam();
- p.topic = parseParam(paramMap, "topic", true, null);
- p.templateFileName = parseParam(paramMap, "templateFileName", false, null);
- p.rootVarName = parseParam(paramMap, "rootVarName", false, null);
- p.responsePrefix = parseParam(paramMap, "responsePrefix", false, null);
- String skipSendingStr = paramMap.get("skipSending");
- p.skipSending = skipSendingStr != null && skipSendingStr.equalsIgnoreCase("true");
- return p;
- }
-
- protected HttpResponse postOnUeb(String request, UebParam p) throws Exception {
- String[] urls = uebServers.split(" ");
- for (int i = 0; i < urls.length; i++) {
- if (!urls[i].endsWith("/"))
- urls[i] += "/";
- urls[i] += "events/" + p.topic;
- }
-
- Client client = Client.create();
- client.setConnectTimeout(5000);
- WebResource webResource = client.resource(urls[0]);
-
- log.info("UEB URL: " + urls[0]);
- log.info("Sending request:");
- log.info(request);
- long t1 = System.currentTimeMillis();
-
- HttpResponse r = new HttpResponse();
- r.code = 200;
-
- if (!p.skipSending) {
- String tt = "application/json";
- String tt1 = tt + ";charset=UTF-8";
-
- ClientResponse response = webResource.accept(tt).type(tt1).post(ClientResponse.class, request);
-
- r.code = response.getStatus();
- r.headers = response.getHeaders();
- if (response.hasEntity())
- r.body = response.getEntity(String.class);
- }
-
- long t2 = System.currentTimeMillis();
- log.info("Response received. Time: " + (t2 - t1));
- log.info("HTTP response code: " + r.code);
- logHeaders(r.headers);
- log.info("HTTP response:\n" + r.body);
-
- return r;
- }
-
- protected void logProperties(Map<String, Object> mm) {
- List<String> ll = new ArrayList<>();
- for (Object o : mm.keySet())
- ll.add((String) o);
- Collections.sort(ll);
-
- log.info("Properties:");
- for (String name : ll)
- log.info("--- " + name + ": " + String.valueOf(mm.get(name)));
- }
-
- protected void logHeaders(MultivaluedMap<String, String> mm) {
- log.info("HTTP response headers:");
-
- if (mm == null)
- return;
-
- List<String> ll = new ArrayList<>();
- for (Object o : mm.keySet())
- ll.add((String) o);
- Collections.sort(ll);
-
- for (String name : ll)
- log.info("--- " + name + ": " + String.valueOf(mm.get(name)));
- }
-
- public void setUebServers(String uebServers) {
- this.uebServers = uebServers;
- }
-
- public void setDefaultUebTemplateFileName(String defaultUebTemplateFileName) {
- this.defaultUebTemplateFileName = defaultUebTemplateFileName;
- }
+ ClientResponse response = webResourceBuilder.method(p.httpMethod.toString(), ClientResponse.class, request);
+
+ r.code = response.getStatus();
+ r.headers = response.getHeaders();
+ EntityTag etag = response.getEntityTag();
+ if (etag != null)
+ r.message = etag.getValue();
+ if (response.hasEntity() && r.code != 204)
+ r.body = response.getEntity(String.class);
+ }
+
+ long t2 = System.currentTimeMillis();
+ log.info("Response received. Time: " + (t2 - t1));
+ log.info("HTTP response code: " + r.code);
+ log.info("HTTP response message: " + r.message);
+ logHeaders(r.headers);
+ log.info("HTTP response: " + r.body);
+
+ return r;
+ }
+
+ protected SSLContext createSSLContext(Parameters p) {
+ try {
+ System.setProperty("jsse.enableSNIExtension", "false");
+ System.setProperty("javax.net.ssl.trustStore", p.trustStoreFileName);
+ System.setProperty("javax.net.ssl.trustStorePassword", p.trustStorePassword);
+
+ HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
+
+ @Override
+ public boolean verify(String string, SSLSession ssls) {
+ return true;
+ }
+ });
+
+ KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+ FileInputStream in = new FileInputStream(p.keyStoreFileName);
+ KeyStore ks = KeyStore.getInstance("PKCS12");
+ char[] pwd = p.keyStorePassword.toCharArray();
+ ks.load(in, pwd);
+ kmf.init(ks, pwd);
+
+ SSLContext ctx = SSLContext.getInstance("TLS");
+ ctx.init(kmf.getKeyManagers(), null, null);
+ return ctx;
+ } catch (Exception e) {
+ log.error("Error creating SSLContext: " + e.getMessage(), e);
+ }
+ return null;
+ }
+
+ protected void setFailureResponseStatus(SvcLogicContext ctx, String prefix, String errorMessage, HttpResponse r) {
+ r = new HttpResponse();
+ r.code = 500;
+ r.message = errorMessage;
+ String pp = prefix != null ? prefix + '.' : "";
+ ctx.setAttribute(pp + "response-code", String.valueOf(r.code));
+ ctx.setAttribute(pp + "response-message", r.message);
+ }
+
+ protected void setResponseStatus(SvcLogicContext ctx, String prefix, HttpResponse r) {
+ String pp = prefix != null ? prefix + '.' : "";
+ ctx.setAttribute(pp + "response-code", String.valueOf(r.code));
+ ctx.setAttribute(pp + "response-message", r.message);
+ }
+
+ public void sendFile(Map<String, String> paramMap, SvcLogicContext ctx) throws SvcLogicException {
+ HttpResponse r = null;
+ try {
+ FileParam p = getFileParameters(paramMap);
+ byte[] data = Files.readAllBytes(Paths.get(p.fileName));
+
+ r = sendHttpData(data, p);
+ setResponseStatus(ctx, p.responsePrefix, r);
+
+ } catch (Exception e) {
+ log.error("Error sending the request: " + e.getMessage(), e);
+
+ r = new HttpResponse();
+ r.code = 500;
+ r.message = e.getMessage();
+ String prefix = parseParam(paramMap, "responsePrefix", false, null);
+ setResponseStatus(ctx, prefix, r);
+ }
+
+ if (r != null && r.code >= 300)
+ throw new SvcLogicException(String.valueOf(r.code) + ": " + r.message);
+ }
+
+ private static class FileParam {
+
+ public String fileName;
+ public String url;
+ public String user;
+ public String password;
+ public HttpMethod httpMethod;
+ public String responsePrefix;
+ public boolean skipSending;
+ }
+
+ private FileParam getFileParameters(Map<String, String> paramMap) throws SvcLogicException {
+ FileParam p = new FileParam();
+ p.fileName = parseParam(paramMap, "fileName", true, null);
+ p.url = parseParam(paramMap, "url", true, null);
+ p.user = parseParam(paramMap, "user", false, null);
+ p.password = parseParam(paramMap, "password", false, null);
+ p.httpMethod = HttpMethod.fromString(parseParam(paramMap, "httpMethod", false, "post"));
+ p.responsePrefix = parseParam(paramMap, "responsePrefix", false, null);
+ String skipSendingStr = paramMap.get("skipSending");
+ p.skipSending = skipSendingStr != null && skipSendingStr.equalsIgnoreCase("true");
+ return p;
+ }
+
+ protected HttpResponse sendHttpData(byte[] data, FileParam p) {
+ Client client = Client.create();
+ client.setConnectTimeout(5000);
+ client.setFollowRedirects(true);
+ if (p.user != null)
+ client.addFilter(new HTTPBasicAuthFilter(p.user, p.password));
+ WebResource webResource = client.resource(p.url);
+
+ log.info("Sending file");
+ long t1 = System.currentTimeMillis();
+
+ HttpResponse r = new HttpResponse();
+ r.code = 200;
+
+ if (!p.skipSending) {
+ String tt = "application/octet-stream";
+
+ ClientResponse response = null;
+ if (p.httpMethod == HttpMethod.POST)
+ response = webResource.accept(tt).type(tt).post(ClientResponse.class, data);
+ else if (p.httpMethod == HttpMethod.PUT)
+ response = webResource.accept(tt).type(tt).put(ClientResponse.class, data);
+
+ r.code = response.getStatus();
+ r.headers = response.getHeaders();
+ EntityTag etag = response.getEntityTag();
+ if (etag != null)
+ r.message = etag.getValue();
+ if (response.hasEntity() && r.code != 204)
+ r.body = response.getEntity(String.class);
+
+ if (r.code == 301) {
+ String newUrl = response.getHeaders().getFirst("Location");
+
+ log.info("Got response code 301. Sending same request to URL: " + newUrl);
+
+ webResource = client.resource(newUrl);
+
+ if (p.httpMethod == HttpMethod.POST)
+ response = webResource.accept(tt).type(tt).post(ClientResponse.class, data);
+ else if (p.httpMethod == HttpMethod.PUT)
+ response = webResource.accept(tt).type(tt).put(ClientResponse.class, data);
+
+ r.code = response.getStatus();
+ etag = response.getEntityTag();
+ if (etag != null)
+ r.message = etag.getValue();
+ if (response.hasEntity() && r.code != 204)
+ r.body = response.getEntity(String.class);
+ }
+ }
+
+ long t2 = System.currentTimeMillis();
+ log.info("Response received. Time: " + (t2 - t1));
+ log.info("HTTP response code: " + r.code);
+ log.info("HTTP response message: " + r.message);
+ logHeaders(r.headers);
+ log.info("HTTP response: " + r.body);
+
+ return r;
+ }
+
+ public void postMessageOnUeb(Map<String, String> paramMap, SvcLogicContext ctx) throws SvcLogicException {
+ HttpResponse r = null;
+ try {
+ UebParam p = getUebParameters(paramMap);
+
+ String pp = p.responsePrefix != null ? p.responsePrefix + '.' : "";
+
+ String req = null;
+
+ if (p.templateFileName == null) {
+ log.info("No template file name specified. Using default UEB template: " + defaultUebTemplateFileName);
+ p.templateFileName = defaultUebTemplateFileName;
+ }
+
+ String reqTemplate = readFile(p.templateFileName);
+ reqTemplate = reqTemplate.replaceAll("rootVarName", p.rootVarName);
+ req = buildXmlJsonRequest(ctx, reqTemplate, Format.JSON);
+
+ r = postOnUeb(req, p);
+ setResponseStatus(ctx, p.responsePrefix, r);
+ if (r.body != null)
+ ctx.setAttribute(pp + "httpResponse", r.body);
+
+ } catch (Exception e) {
+ log.error("Error sending the request: " + e.getMessage(), e);
+
+ r = new HttpResponse();
+ r.code = 500;
+ r.message = e.getMessage();
+ String prefix = parseParam(paramMap, "responsePrefix", false, null);
+ setResponseStatus(ctx, prefix, r);
+ }
+
+ if (r != null && r.code >= 300)
+ throw new SvcLogicException(String.valueOf(r.code) + ": " + r.message);
+ }
+
+ private static class UebParam {
+
+ public String topic;
+ public String templateFileName;
+ public String rootVarName;
+ public String responsePrefix;
+ public boolean skipSending;
+ }
+
+ private UebParam getUebParameters(Map<String, String> paramMap) throws SvcLogicException {
+ UebParam p = new UebParam();
+ p.topic = parseParam(paramMap, "topic", true, null);
+ p.templateFileName = parseParam(paramMap, "templateFileName", false, null);
+ p.rootVarName = parseParam(paramMap, "rootVarName", false, null);
+ p.responsePrefix = parseParam(paramMap, "responsePrefix", false, null);
+ String skipSendingStr = paramMap.get("skipSending");
+ p.skipSending = skipSendingStr != null && skipSendingStr.equalsIgnoreCase("true");
+ return p;
+ }
+
+ protected HttpResponse postOnUeb(String request, UebParam p) throws Exception {
+ String[] urls = uebServers.split(" ");
+ for (int i = 0; i < urls.length; i++) {
+ if (!urls[i].endsWith("/"))
+ urls[i] += "/";
+ urls[i] += "events/" + p.topic;
+ }
+
+ Client client = Client.create();
+ client.setConnectTimeout(5000);
+ WebResource webResource = client.resource(urls[0]);
+
+ log.info("UEB URL: " + urls[0]);
+ log.info("Sending request:");
+ log.info(request);
+ long t1 = System.currentTimeMillis();
+
+ HttpResponse r = new HttpResponse();
+ r.code = 200;
+
+ if (!p.skipSending) {
+ String tt = "application/json";
+ String tt1 = tt + ";charset=UTF-8";
+
+ ClientResponse response = webResource.accept(tt).type(tt1).post(ClientResponse.class, request);
+
+ r.code = response.getStatus();
+ r.headers = response.getHeaders();
+ if (response.hasEntity())
+ r.body = response.getEntity(String.class);
+ }
+
+ long t2 = System.currentTimeMillis();
+ log.info("Response received. Time: " + (t2 - t1));
+ log.info("HTTP response code: " + r.code);
+ logHeaders(r.headers);
+ log.info("HTTP response:\n" + r.body);
+
+ return r;
+ }
+
+ protected void logProperties(Map<String, Object> mm) {
+ List<String> ll = new ArrayList<>();
+ for (Object o : mm.keySet())
+ ll.add((String) o);
+ Collections.sort(ll);
+
+ log.info("Properties:");
+ for (String name : ll)
+ log.info("--- " + name + ": " + String.valueOf(mm.get(name)));
+ }
+
+ protected void logHeaders(MultivaluedMap<String, String> mm) {
+ log.info("HTTP response headers:");
+
+ if (mm == null)
+ return;
+
+ List<String> ll = new ArrayList<>();
+ for (Object o : mm.keySet())
+ ll.add((String) o);
+ Collections.sort(ll);
+
+ for (String name : ll)
+ log.info("--- " + name + ": " + String.valueOf(mm.get(name)));
+ }
+
+ public void setUebServers(String uebServers) {
+ this.uebServers = uebServers;
+ }
+
+ public void setDefaultUebTemplateFileName(String defaultUebTemplateFileName) {
+ this.defaultUebTemplateFileName = defaultUebTemplateFileName;
+ }
}
diff --git a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RetryPolicy.java b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RetryPolicy.java
index 69334a96..5cee0779 100644
--- a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RetryPolicy.java
+++ b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/RetryPolicy.java
@@ -40,7 +40,8 @@ public class RetryPolicy {
}
if(position == null){
- throw new RetryException("No match found for the provided uri[" + uri + "] so the next host name could not be retreived");
+ throw new RetryException("No match found for the provided uri[" + uri + "] " +
+ "so the next host name could not be retreived");
}
position++;
diff --git a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java
index 2fa3fa54..16b9f519 100644
--- a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java
+++ b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlJsonUtil.java
@@ -31,342 +31,342 @@ import org.slf4j.LoggerFactory;
public class XmlJsonUtil {
- private static final Logger log = LoggerFactory.getLogger(XmlJsonUtil.class);
-
- public static String getXml(Map<String, String> varmap, String var) {
- boolean escape = true;
- if (var.startsWith("'")) {
- var = var.substring(1);
- escape = false;
- }
-
- Object o = createStructure(varmap, var);
- return generateXml(o, 0, escape);
- }
-
- public static String getJson(Map<String, String> varmap, String var) {
- boolean escape = true;
- if (var.startsWith("'")) {
- var = var.substring(1);
- escape = false;
- }
-
- Object o = createStructure(varmap, var);
- return generateJson(o, escape);
- }
-
- private static Object createStructure(Map<String, String> flatmap, String var) {
- if (flatmap.containsKey(var)) {
- if (var.endsWith("_length") || var.endsWith("].key"))
- return null;
- return flatmap.get(var);
- }
-
- Map<String, Object> mm = new HashMap<>();
- for (String k : flatmap.keySet())
- if (k.startsWith(var + ".")) {
- int i1 = k.indexOf('.', var.length() + 1);
- int i2 = k.indexOf('[', var.length() + 1);
- int i3 = k.length();
- if (i1 > 0 && i1 < i3)
- i3 = i1;
- if (i2 > 0 && i2 < i3)
- i3 = i2;
- String k1 = k.substring(var.length() + 1, i3);
- String var1 = k.substring(0, i3);
- if (!mm.containsKey(k1)) {
- Object str = createStructure(flatmap, var1);
- if (str != null && (!(str instanceof String) || ((String) str).trim().length() > 0))
- mm.put(k1, str);
- }
- }
- if (!mm.isEmpty())
- return mm;
-
- boolean arrayFound = false;
- for (String k : flatmap.keySet())
- if (k.startsWith(var + "[")) {
- arrayFound = true;
- break;
- }
-
- if (arrayFound) {
- List<Object> ll = new ArrayList<>();
-
- int length = Integer.MAX_VALUE;
- String lengthStr = flatmap.get(var + "_length");
- if (lengthStr != null) {
- try {
- length = Integer.parseInt(lengthStr);
- } catch (Exception e) {
- log.warn("Invalid number for " + var + "_length:" + lengthStr);
- }
- }
-
- for (int i = 0; i < length; i++) {
- Object v = createStructure(flatmap, var + '[' + i + ']');
- if (v == null)
- break;
- ll.add(v);
- }
-
- if (!ll.isEmpty())
- return ll;
- }
-
- return null;
- }
-
- @SuppressWarnings("unchecked")
- private static String generateXml(Object o, int indent, boolean escape) {
- if (o == null)
- return null;
-
- if (o instanceof String)
- return escape ? escapeXml((String) o) : (String) o;;
-
- if (o instanceof Map) {
- StringBuilder ss = new StringBuilder();
- Map<String, Object> mm = (Map<String, Object>) o;
- for (String k : mm.keySet()) {
- Object v = mm.get(k);
- if (v instanceof String) {
- String s = escape ? escapeXml((String) v) : (String) v;
- ss.append(pad(indent)).append('<').append(k).append('>');
- ss.append(s);
- ss.append("</").append(k).append('>').append('\n');
- } else if (v instanceof Map) {
- ss.append(pad(indent)).append('<').append(k).append('>').append('\n');
- ss.append(generateXml(v, indent + 1, escape));
- ss.append(pad(indent)).append("</").append(k).append('>').append('\n');
- } else if (v instanceof List) {
- List<Object> ll = (List<Object>) v;
- for (Object o1 : ll) {
- ss.append(pad(indent)).append('<').append(k).append('>').append('\n');
- ss.append(generateXml(o1, indent + 1, escape));
- ss.append(pad(indent)).append("</").append(k).append('>').append('\n');
- }
- }
- }
- return ss.toString();
- }
-
- return null;
- }
-
- private static String generateJson(Object o, boolean escape) {
- if (o == null)
- return null;
-
- StringBuilder ss = new StringBuilder();
- generateJson(ss, o, 0, false, escape);
- return ss.toString();
- }
-
- @SuppressWarnings("unchecked")
- private static void generateJson(StringBuilder ss, Object o, int indent, boolean padFirst, boolean escape) {
- if (o instanceof String) {
- String s = escape ? escapeJson((String) o) : (String) o;
- if (padFirst)
- ss.append(pad(indent));
- ss.append('"').append(s).append('"');
- return;
- }
-
- if (o instanceof Map) {
- Map<String, Object> mm = (Map<String, Object>) o;
-
- if (padFirst)
- ss.append(pad(indent));
- ss.append("{\n");
-
- boolean first = true;
- for (String k : mm.keySet()) {
- if (!first)
- ss.append(",\n");
- first = false;
-
- Object v = mm.get(k);
- ss.append(pad(indent + 1)).append('"').append(k).append("\": ");
- generateJson(ss, v, indent + 1, false, escape);
- }
-
- ss.append("\n");
- ss.append(pad(indent)).append('}');
-
- return;
- }
-
- if (o instanceof List) {
- List<Object> ll = (List<Object>) o;
-
- if (padFirst)
- ss.append(pad(indent));
- ss.append("[\n");
-
- boolean first = true;
- for (Object o1 : ll) {
- if (!first)
- ss.append(",\n");
- first = false;
-
- generateJson(ss, o1, indent + 1, true, escape);
- }
-
- ss.append("\n");
- ss.append(pad(indent)).append(']');
- }
- }
-
- public static String removeLastCommaJson(String s) {
- StringBuilder sb = new StringBuilder();
- int k = 0;
- int start = 0;
- while (k < s.length()) {
- int i11 = s.indexOf('}', k);
- int i12 = s.indexOf(']', k);
- int i1 = -1;
- if (i11 < 0)
- i1 = i12;
- else if (i12 < 0)
- i1 = i11;
- else
- i1 = i11 < i12 ? i11 : i12;
- if (i1 < 0)
- break;
-
- int i2 = s.lastIndexOf(',', i1);
- if (i2 < 0) {
- k = i1 + 1;
- continue;
- }
-
- String between = s.substring(i2 + 1, i1);
- if (between.trim().length() > 0) {
- k = i1 + 1;
- continue;
- }
-
- sb.append(s.substring(start, i2));
- start = i2 + 1;
- k = i1 + 1;
- }
-
- sb.append(s.substring(start, s.length()));
-
- return sb.toString();
- }
-
- public static String removeEmptyStructJson(String s) {
- int k = 0;
- while (k < s.length()) {
- boolean curly = true;
- int i11 = s.indexOf('{', k);
- int i12 = s.indexOf('[', k);
- int i1 = -1;
- if (i11 < 0) {
- i1 = i12;
- curly = false;
- } else if (i12 < 0)
- i1 = i11;
- else
- if (i11 < i12)
- i1 = i11;
- else {
- i1 = i12;
- curly = false;
- }
-
- if (i1 >= 0) {
- int i2 = curly ? s.indexOf('}', i1) : s.indexOf(']', i1);
- if (i2 > 0) {
- String value = s.substring(i1 + 1, i2);
- if (value.trim().length() == 0) {
- int i4 = s.lastIndexOf('\n', i1);
- if (i4 < 0)
- i4 = 0;
- int i5 = s.indexOf('\n', i2);
- if (i5 < 0)
- i5 = s.length();
-
- s = s.substring(0, i4) + s.substring(i5);
- k = 0;
- } else
- k = i1 + 1;
- } else
- break;
- } else
- break;
- }
-
- return s;
- }
-
- public static String removeEmptyStructXml(String s) {
- int k = 0;
- while (k < s.length()) {
- int i1 = s.indexOf('<', k);
- if (i1 < 0 || i1 == s.length() - 1)
- break;
-
- char c1 = s.charAt(i1 + 1);
- if (c1 == '?' || c1 == '!') {
- k = i1 + 2;
- continue;
- }
-
- int i2 = s.indexOf('>', i1);
- if (i2 < 0) {
- k = i1 + 1;
- continue;
- }
-
- String closingTag = "</" + s.substring(i1 + 1, i2 + 1);
- int i3 = s.indexOf(closingTag, i2 + 1);
- if (i3 < 0) {
- k = i2 + 1;
- continue;
- }
-
- String value = s.substring(i2 + 1, i3);
- if (value.trim().length() > 0) {
- k = i2 + 1;
- continue;
- }
-
- int i4 = s.lastIndexOf('\n', i1);
- if (i4 < 0)
- i4 = 0;
- int i5 = s.indexOf('\n', i3);
- if (i5 < 0)
- i5 = s.length();
-
- s = s.substring(0, i4) + s.substring(i5);
- k = 0;
- }
-
- return s;
- }
-
- private static String escapeXml(String v) {
- String s = v.replaceAll("&", "&amp;");
- s = s.replaceAll("<", "&lt;");
- s = s.replaceAll("'", "&apos;");
- s = s.replaceAll("\"", "&quot;");
- s = s.replaceAll(">", "&gt;");
- return s;
- }
-
- private static String escapeJson(String v) {
- String s = v.replaceAll("\\\\", "\\\\\\\\");
- s = s.replaceAll("\"", "\\\\\"");
- return s;
- }
-
- private static String pad(int n) {
- String s = "";
- for (int i = 0; i < n; i++)
- s += '\t';
- return s;
- }
+ private static final Logger log = LoggerFactory.getLogger(XmlJsonUtil.class);
+
+ public static String getXml(Map<String, String> varmap, String var) {
+ boolean escape = true;
+ if (var.startsWith("'")) {
+ var = var.substring(1);
+ escape = false;
+ }
+
+ Object o = createStructure(varmap, var);
+ return generateXml(o, 0, escape);
+ }
+
+ public static String getJson(Map<String, String> varmap, String var) {
+ boolean escape = true;
+ if (var.startsWith("'")) {
+ var = var.substring(1);
+ escape = false;
+ }
+
+ Object o = createStructure(varmap, var);
+ return generateJson(o, escape);
+ }
+
+ private static Object createStructure(Map<String, String> flatmap, String var) {
+ if (flatmap.containsKey(var)) {
+ if (var.endsWith("_length") || var.endsWith("].key"))
+ return null;
+ return flatmap.get(var);
+ }
+
+ Map<String, Object> mm = new HashMap<>();
+ for (String k : flatmap.keySet())
+ if (k.startsWith(var + ".")) {
+ int i1 = k.indexOf('.', var.length() + 1);
+ int i2 = k.indexOf('[', var.length() + 1);
+ int i3 = k.length();
+ if (i1 > 0 && i1 < i3)
+ i3 = i1;
+ if (i2 > 0 && i2 < i3)
+ i3 = i2;
+ String k1 = k.substring(var.length() + 1, i3);
+ String var1 = k.substring(0, i3);
+ if (!mm.containsKey(k1)) {
+ Object str = createStructure(flatmap, var1);
+ if (str != null && (!(str instanceof String) || ((String) str).trim().length() > 0))
+ mm.put(k1, str);
+ }
+ }
+ if (!mm.isEmpty())
+ return mm;
+
+ boolean arrayFound = false;
+ for (String k : flatmap.keySet())
+ if (k.startsWith(var + "[")) {
+ arrayFound = true;
+ break;
+ }
+
+ if (arrayFound) {
+ List<Object> ll = new ArrayList<>();
+
+ int length = Integer.MAX_VALUE;
+ String lengthStr = flatmap.get(var + "_length");
+ if (lengthStr != null) {
+ try {
+ length = Integer.parseInt(lengthStr);
+ } catch (Exception e) {
+ log.warn("Invalid number for " + var + "_length:" + lengthStr);
+ }
+ }
+
+ for (int i = 0; i < length; i++) {
+ Object v = createStructure(flatmap, var + '[' + i + ']');
+ if (v == null)
+ break;
+ ll.add(v);
+ }
+
+ if (!ll.isEmpty())
+ return ll;
+ }
+
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ private static String generateXml(Object o, int indent, boolean escape) {
+ if (o == null)
+ return null;
+
+ if (o instanceof String)
+ return escape ? escapeXml((String) o) : (String) o;;
+
+ if (o instanceof Map) {
+ StringBuilder ss = new StringBuilder();
+ Map<String, Object> mm = (Map<String, Object>) o;
+ for (String k : mm.keySet()) {
+ Object v = mm.get(k);
+ if (v instanceof String) {
+ String s = escape ? escapeXml((String) v) : (String) v;
+ ss.append(pad(indent)).append('<').append(k).append('>');
+ ss.append(s);
+ ss.append("</").append(k).append('>').append('\n');
+ } else if (v instanceof Map) {
+ ss.append(pad(indent)).append('<').append(k).append('>').append('\n');
+ ss.append(generateXml(v, indent + 1, escape));
+ ss.append(pad(indent)).append("</").append(k).append('>').append('\n');
+ } else if (v instanceof List) {
+ List<Object> ll = (List<Object>) v;
+ for (Object o1 : ll) {
+ ss.append(pad(indent)).append('<').append(k).append('>').append('\n');
+ ss.append(generateXml(o1, indent + 1, escape));
+ ss.append(pad(indent)).append("</").append(k).append('>').append('\n');
+ }
+ }
+ }
+ return ss.toString();
+ }
+
+ return null;
+ }
+
+ private static String generateJson(Object o, boolean escape) {
+ if (o == null)
+ return null;
+
+ StringBuilder ss = new StringBuilder();
+ generateJson(ss, o, 0, false, escape);
+ return ss.toString();
+ }
+
+ @SuppressWarnings("unchecked")
+ private static void generateJson(StringBuilder ss, Object o, int indent, boolean padFirst, boolean escape) {
+ if (o instanceof String) {
+ String s = escape ? escapeJson((String) o) : (String) o;
+ if (padFirst)
+ ss.append(pad(indent));
+ ss.append('"').append(s).append('"');
+ return;
+ }
+
+ if (o instanceof Map) {
+ Map<String, Object> mm = (Map<String, Object>) o;
+
+ if (padFirst)
+ ss.append(pad(indent));
+ ss.append("{\n");
+
+ boolean first = true;
+ for (String k : mm.keySet()) {
+ if (!first)
+ ss.append(",\n");
+ first = false;
+
+ Object v = mm.get(k);
+ ss.append(pad(indent + 1)).append('"').append(k).append("\": ");
+ generateJson(ss, v, indent + 1, false, escape);
+ }
+
+ ss.append("\n");
+ ss.append(pad(indent)).append('}');
+
+ return;
+ }
+
+ if (o instanceof List) {
+ List<Object> ll = (List<Object>) o;
+
+ if (padFirst)
+ ss.append(pad(indent));
+ ss.append("[\n");
+
+ boolean first = true;
+ for (Object o1 : ll) {
+ if (!first)
+ ss.append(",\n");
+ first = false;
+
+ generateJson(ss, o1, indent + 1, true, escape);
+ }
+
+ ss.append("\n");
+ ss.append(pad(indent)).append(']');
+ }
+ }
+
+ public static String removeLastCommaJson(String s) {
+ StringBuilder sb = new StringBuilder();
+ int k = 0;
+ int start = 0;
+ while (k < s.length()) {
+ int i11 = s.indexOf('}', k);
+ int i12 = s.indexOf(']', k);
+ int i1 = -1;
+ if (i11 < 0)
+ i1 = i12;
+ else if (i12 < 0)
+ i1 = i11;
+ else
+ i1 = i11 < i12 ? i11 : i12;
+ if (i1 < 0)
+ break;
+
+ int i2 = s.lastIndexOf(',', i1);
+ if (i2 < 0) {
+ k = i1 + 1;
+ continue;
+ }
+
+ String between = s.substring(i2 + 1, i1);
+ if (between.trim().length() > 0) {
+ k = i1 + 1;
+ continue;
+ }
+
+ sb.append(s.substring(start, i2));
+ start = i2 + 1;
+ k = i1 + 1;
+ }
+
+ sb.append(s.substring(start, s.length()));
+
+ return sb.toString();
+ }
+
+ public static String removeEmptyStructJson(String s) {
+ int k = 0;
+ while (k < s.length()) {
+ boolean curly = true;
+ int i11 = s.indexOf('{', k);
+ int i12 = s.indexOf('[', k);
+ int i1 = -1;
+ if (i11 < 0) {
+ i1 = i12;
+ curly = false;
+ } else if (i12 < 0)
+ i1 = i11;
+ else
+ if (i11 < i12)
+ i1 = i11;
+ else {
+ i1 = i12;
+ curly = false;
+ }
+
+ if (i1 >= 0) {
+ int i2 = curly ? s.indexOf('}', i1) : s.indexOf(']', i1);
+ if (i2 > 0) {
+ String value = s.substring(i1 + 1, i2);
+ if (value.trim().length() == 0) {
+ int i4 = s.lastIndexOf('\n', i1);
+ if (i4 < 0)
+ i4 = 0;
+ int i5 = s.indexOf('\n', i2);
+ if (i5 < 0)
+ i5 = s.length();
+
+ s = s.substring(0, i4) + s.substring(i5);
+ k = 0;
+ } else
+ k = i1 + 1;
+ } else
+ break;
+ } else
+ break;
+ }
+
+ return s;
+ }
+
+ public static String removeEmptyStructXml(String s) {
+ int k = 0;
+ while (k < s.length()) {
+ int i1 = s.indexOf('<', k);
+ if (i1 < 0 || i1 == s.length() - 1)
+ break;
+
+ char c1 = s.charAt(i1 + 1);
+ if (c1 == '?' || c1 == '!') {
+ k = i1 + 2;
+ continue;
+ }
+
+ int i2 = s.indexOf('>', i1);
+ if (i2 < 0) {
+ k = i1 + 1;
+ continue;
+ }
+
+ String closingTag = "</" + s.substring(i1 + 1, i2 + 1);
+ int i3 = s.indexOf(closingTag, i2 + 1);
+ if (i3 < 0) {
+ k = i2 + 1;
+ continue;
+ }
+
+ String value = s.substring(i2 + 1, i3);
+ if (value.trim().length() > 0) {
+ k = i2 + 1;
+ continue;
+ }
+
+ int i4 = s.lastIndexOf('\n', i1);
+ if (i4 < 0)
+ i4 = 0;
+ int i5 = s.indexOf('\n', i3);
+ if (i5 < 0)
+ i5 = s.length();
+
+ s = s.substring(0, i4) + s.substring(i5);
+ k = 0;
+ }
+
+ return s;
+ }
+
+ private static String escapeXml(String v) {
+ String s = v.replaceAll("&", "&amp;");
+ s = s.replaceAll("<", "&lt;");
+ s = s.replaceAll("'", "&apos;");
+ s = s.replaceAll("\"", "&quot;");
+ s = s.replaceAll(">", "&gt;");
+ return s;
+ }
+
+ private static String escapeJson(String v) {
+ String s = v.replaceAll("\\\\", "\\\\\\\\");
+ s = s.replaceAll("\"", "\\\\\"");
+ return s;
+ }
+
+ private static String pad(int n) {
+ String s = "";
+ for (int i = 0; i < n; i++)
+ s += '\t';
+ return s;
+ }
}
diff --git a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlParser.java b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlParser.java
index 8f3febca..85c9dc01 100644
--- a/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlParser.java
+++ b/restapi-call-node/provider/src/main/java/org/onap/ccsdk/sli/plugins/restapicall/XmlParser.java
@@ -39,122 +39,122 @@ import org.xml.sax.helpers.DefaultHandler;
public class XmlParser {
- private static final Logger log = LoggerFactory.getLogger(XmlParser.class);
-
- public static Map<String, String> convertToProperties(String s, Set<String> listNameList) {
- Handler handler = new Handler(listNameList);
- try {
- SAXParserFactory factory = SAXParserFactory.newInstance();
- SAXParser saxParser = factory.newSAXParser();
- InputStream in = new ByteArrayInputStream(s.getBytes());
- saxParser.parse(in, handler);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- return handler.getProperties();
- }
-
- private static class Handler extends DefaultHandler {
-
- private Set<String> listNameList;
-
- private Map<String, String> properties = new HashMap<>();
-
- public Map<String, String> getProperties() {
- return properties;
- }
-
- public Handler(Set<String> listNameList) {
- super();
- this.listNameList = listNameList;
- if (this.listNameList == null)
- this.listNameList = new HashSet<String>();
- }
-
- String currentName = "";
- String currentValue = "";
-
- @Override
- public void startElement(String uri, String localName, String qName, Attributes attributes)
- throws SAXException {
- super.startElement(uri, localName, qName, attributes);
-
- String name = localName;
- if (name == null || name.trim().length() == 0)
- name = qName;
- int i2 = name.indexOf(':');
- if (i2 >= 0)
- name = name.substring(i2 + 1);
-
- if (currentName.length() > 0)
- currentName += '.';
- currentName += name;
-
- String listName = removeIndexes(currentName);
-
- if (listNameList.contains(listName)) {
- int len = getInt(properties, currentName + "_length");
- properties.put(currentName + "_length", String.valueOf(len + 1));
- currentName += "[" + len + "]";
- }
- }
-
- @Override
- public void endElement(String uri, String localName, String qName) throws SAXException {
- super.endElement(uri, localName, qName);
-
- String name = localName;
- if (name == null || name.trim().length() == 0)
- name = qName;
- int i2 = name.indexOf(':');
- if (i2 >= 0)
- name = name.substring(i2 + 1);
-
- if (currentValue.trim().length() > 0) {
- currentValue = currentValue.trim();
- properties.put(currentName, currentValue);
-
- log.info("Added property: " + currentName + ": " + currentValue);
-
- currentValue = "";
- }
-
- int i1 = currentName.lastIndexOf("." + name);
- if (i1 <= 0)
- currentName = "";
- else
- currentName = currentName.substring(0, i1);
- }
-
- @Override
- public void characters(char[] ch, int start, int length) throws SAXException {
- super.characters(ch, start, length);
-
- String value = new String(ch, start, length);
- currentValue += value;
- }
-
- private static int getInt(Map<String, String> mm, String name) {
- String s = mm.get(name);
- if (s == null)
- return 0;
- return Integer.parseInt(s);
- }
-
- private String removeIndexes(String currentName) {
- String s = "";
- boolean add = true;
- for (int i = 0; i < currentName.length(); i++) {
- char c = currentName.charAt(i);
- if (c == '[')
- add = false;
- else if (c == ']')
- add = true;
- else if (add)
- s += c;
- }
- return s;
- }
- }
+ private static final Logger log = LoggerFactory.getLogger(XmlParser.class);
+
+ public static Map<String, String> convertToProperties(String s, Set<String> listNameList) {
+ Handler handler = new Handler(listNameList);
+ try {
+ SAXParserFactory factory = SAXParserFactory.newInstance();
+ SAXParser saxParser = factory.newSAXParser();
+ InputStream in = new ByteArrayInputStream(s.getBytes());
+ saxParser.parse(in, handler);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return handler.getProperties();
+ }
+
+ private static class Handler extends DefaultHandler {
+
+ private Set<String> listNameList;
+
+ private Map<String, String> properties = new HashMap<>();
+
+ public Map<String, String> getProperties() {
+ return properties;
+ }
+
+ public Handler(Set<String> listNameList) {
+ super();
+ this.listNameList = listNameList;
+ if (this.listNameList == null)
+ this.listNameList = new HashSet<String>();
+ }
+
+ String currentName = "";
+ String currentValue = "";
+
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes attributes)
+ throws SAXException {
+ super.startElement(uri, localName, qName, attributes);
+
+ String name = localName;
+ if (name == null || name.trim().length() == 0)
+ name = qName;
+ int i2 = name.indexOf(':');
+ if (i2 >= 0)
+ name = name.substring(i2 + 1);
+
+ if (currentName.length() > 0)
+ currentName += '.';
+ currentName += name;
+
+ String listName = removeIndexes(currentName);
+
+ if (listNameList.contains(listName)) {
+ int len = getInt(properties, currentName + "_length");
+ properties.put(currentName + "_length", String.valueOf(len + 1));
+ currentName += "[" + len + "]";
+ }
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName) throws SAXException {
+ super.endElement(uri, localName, qName);
+
+ String name = localName;
+ if (name == null || name.trim().length() == 0)
+ name = qName;
+ int i2 = name.indexOf(':');
+ if (i2 >= 0)
+ name = name.substring(i2 + 1);
+
+ if (currentValue.trim().length() > 0) {
+ currentValue = currentValue.trim();
+ properties.put(currentName, currentValue);
+
+ log.info("Added property: " + currentName + ": " + currentValue);
+
+ currentValue = "";
+ }
+
+ int i1 = currentName.lastIndexOf("." + name);
+ if (i1 <= 0)
+ currentName = "";
+ else
+ currentName = currentName.substring(0, i1);
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length) throws SAXException {
+ super.characters(ch, start, length);
+
+ String value = new String(ch, start, length);
+ currentValue += value;
+ }
+
+ private static int getInt(Map<String, String> mm, String name) {
+ String s = mm.get(name);
+ if (s == null)
+ return 0;
+ return Integer.parseInt(s);
+ }
+
+ private String removeIndexes(String currentName) {
+ String s = "";
+ boolean add = true;
+ for (int i = 0; i < currentName.length(); i++) {
+ char c = currentName.charAt(i);
+ if (c == '[')
+ add = false;
+ else if (c == ']')
+ add = true;
+ else if (add)
+ s += c;
+ }
+ return s;
+ }
+ }
}
diff --git a/restapi-call-node/provider/src/main/resources/META-INF/spring/restapi-call-node-context.xml b/restapi-call-node/provider/src/main/resources/META-INF/spring/restapi-call-node-context.xml
index 25ce0120..87850624 100644
--- a/restapi-call-node/provider/src/main/resources/META-INF/spring/restapi-call-node-context.xml
+++ b/restapi-call-node/provider/src/main/resources/META-INF/spring/restapi-call-node-context.xml
@@ -24,26 +24,26 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
-
- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
+
+ <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+ <property name="locations">
<list>
<value>file:${SDNC_CONFIG_DIR}/ueb.properties</value>
<value>file:${SDNC_CONFIG_DIR}/dme2.properties</value>
</list>
- </property>
- <property name="ignoreResourceNotFound" value="true" />
- <property name="ignoreUnresolvablePlaceholders" value="true" />
- </bean>
+ </property>
+ <property name="ignoreResourceNotFound" value="true" />
+ <property name="ignoreUnresolvablePlaceholders" value="true" />
+ </bean>
- <!-- context:property-placeholder location="file:${SDNC_CONFIG_DIR}/ueb.properties" /-->
+ <!-- context:property-placeholder location="file:${SDNC_CONFIG_DIR}/ueb.properties" /-->
- <bean id="restapiCallNode" class="org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode">
- <property name="uebServers" value="${servers}" />
- <property name="retryPolicyStore" ref="retryPolicyStore"/>
- </bean>
+ <bean id="restapiCallNode" class="org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode">
+ <property name="uebServers" value="${servers}" />
+ <property name="retryPolicyStore" ref="retryPolicyStore"/>
+ </bean>
- <bean id="retryPolicyStore" class="org.onap.ccsdk.sli.plugins.restapicall.RetryPolicyStore">
- <property name="proxyServers" value="${proxyUrl}" />
- </bean>
+ <bean id="retryPolicyStore" class="org.onap.ccsdk.sli.plugins.restapicall.RetryPolicyStore">
+ <property name="proxyServers" value="${proxyUrl}" />
+ </bean>
</beans>
diff --git a/restapi-call-node/provider/src/main/resources/META-INF/spring/restapi-call-node-osgi-context.xml b/restapi-call-node/provider/src/main/resources/META-INF/spring/restapi-call-node-osgi-context.xml
index 8f34005d..2f1e4dbd 100644
--- a/restapi-call-node/provider/src/main/resources/META-INF/spring/restapi-call-node-osgi-context.xml
+++ b/restapi-call-node/provider/src/main/resources/META-INF/spring/restapi-call-node-osgi-context.xml
@@ -21,12 +21,12 @@
-->
<beans:beans xmlns="http://www.springframework.org/schema/osgi"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
- xsi:schemaLocation="http://www.springframework.org/schema/osgi
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
+ xsi:schemaLocation="http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
- http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
- <service ref="restapiCallNode" interface="org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode" />
+ <service ref="restapiCallNode" interface="org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode" />
</beans:beans>
diff --git a/restapi-call-node/provider/src/main/resources/default-ueb-message.json b/restapi-call-node/provider/src/main/resources/default-ueb-message.json
index 4b1aa038..6ef6be7f 100644
--- a/restapi-call-node/provider/src/main/resources/default-ueb-message.json
+++ b/restapi-call-node/provider/src/main/resources/default-ueb-message.json
@@ -20,13 +20,13 @@
*/
{
- "event":{
- "header":{
- "eventSource":"sdn-c"
- },
- "body":
+ "event":{
+ "header":{
+ "eventSource":"sdn-c"
+ },
+ "body":
${rootVarName}
- }
+ }
}
diff --git a/restapi-call-node/provider/src/main/resources/northbound-api-template.json b/restapi-call-node/provider/src/main/resources/northbound-api-template.json
index d48c41ce..73a61b63 100644
--- a/restapi-call-node/provider/src/main/resources/northbound-api-template.json
+++ b/restapi-call-node/provider/src/main/resources/northbound-api-template.json
@@ -19,25 +19,25 @@
* ============LICENSE_END=========================================================
*/
-{
-"input":
- {
- "sdnc-request-header":{
- "svc-request-id": ${service-topology-operation-input.sdnc-request-header.svc-request-id},
- "svc-notification-url": ${service-topology-operation-input.sdnc-request-header.svc-notification-url}
- },
- "request-information":{
- "request-id": ${service-topology-operation-input.request-information.request-id},
- "request-action": ${service-topology-operation-input.request-information.request-action},
- "request-sub-action": ${service-topology-operation-input.request-information.request-sub-action},
- "source": ${service-topology-operation-input.request-information.source},
- "notification-url": ${service-topology-operation-input.request-information.notification-url}
- },
- "service-information":{
- "service-type": ${service-topology-operation-input.service-information.service-type},
- "service-instance-id": ${service-topology-operation-input.service-information.service-instance-id},
- "subscriber-name": ${service-topology-operation-input.service-information.subscriber-name},
- "subscriber-global-id": ${service-topology-operation-input.service-information.subscriber-global-id}
- }
+{
+"input":
+ {
+ "sdnc-request-header":{
+ "svc-request-id": ${service-topology-operation-input.sdnc-request-header.svc-request-id},
+ "svc-notification-url": ${service-topology-operation-input.sdnc-request-header.svc-notification-url}
+ },
+ "request-information":{
+ "request-id": ${service-topology-operation-input.request-information.request-id},
+ "request-action": ${service-topology-operation-input.request-information.request-action},
+ "request-sub-action": ${service-topology-operation-input.request-information.request-sub-action},
+ "source": ${service-topology-operation-input.request-information.source},
+ "notification-url": ${service-topology-operation-input.request-information.notification-url}
+ },
+ "service-information":{
+ "service-type": ${service-topology-operation-input.service-information.service-type},
+ "service-instance-id": ${service-topology-operation-input.service-information.service-instance-id},
+ "subscriber-name": ${service-topology-operation-input.service-information.subscriber-name},
+ "subscriber-global-id": ${service-topology-operation-input.service-information.subscriber-global-id}
+ }
}
-
+
diff --git a/restapi-call-node/provider/src/main/resources/northbound-api-template.xml b/restapi-call-node/provider/src/main/resources/northbound-api-template.xml
index 5c2b9ad9..aea0625c 100644
--- a/restapi-call-node/provider/src/main/resources/northbound-api-template.xml
+++ b/restapi-call-node/provider/src/main/resources/northbound-api-template.xml
@@ -37,7 +37,7 @@
<service-type>${service-topology-operation-input.service-information.service-type}</service-type>
<subscriber-global-id>${service-topology-operation-input.service-information.subscriber-global-id}</subscriber-global-id>
<subscriber-name>${service-topology-operation-input.service-information.subscriber-name}</subscriber-name>
- </service-information>
+ </service-information>
${'northbound-anyData}
</${northbound-Container}>
</input>
diff --git a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestJsonParser.java b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestJsonParser.java
index 107e8c88..dbca5ad7 100644
--- a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestJsonParser.java
+++ b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestJsonParser.java
@@ -35,31 +35,33 @@ import org.slf4j.LoggerFactory;
public class TestJsonParser {
- private static final Logger log = LoggerFactory.getLogger(TestJsonParser.class);
+ private static final Logger log = LoggerFactory.getLogger(TestJsonParser.class);
- @Test
- public void test() throws Exception {
- BufferedReader in = new BufferedReader(new InputStreamReader(ClassLoader.getSystemResourceAsStream("test.json")));
- String ss = "";
- String line = null;
- while ((line = in.readLine()) != null)
- ss += line + '\n';
+ @Test
+ public void test() throws Exception {
+ BufferedReader in = new BufferedReader(
+ new InputStreamReader(ClassLoader.getSystemResourceAsStream("test.json"))
+ );
+ String ss = "";
+ String line = null;
+ while ((line = in.readLine()) != null)
+ ss += line + '\n';
- Map<String, String> mm = JsonParser.convertToProperties(ss);
+ Map<String, String> mm = JsonParser.convertToProperties(ss);
- logProperties(mm);
+ logProperties(mm);
- in.close();
- }
+ in.close();
+ }
- private void logProperties(Map<String, String> mm) {
- List<String> ll = new ArrayList<>();
- for (Object o : mm.keySet())
- ll.add((String) o);
- Collections.sort(ll);
+ private void logProperties(Map<String, String> mm) {
+ List<String> ll = new ArrayList<>();
+ for (Object o : mm.keySet())
+ ll.add((String) o);
+ Collections.sort(ll);
- log.info("Properties:");
- for (String name : ll)
- log.info("--- " + name + ": " + mm.get(name));
- }
+ log.info("Properties:");
+ for (String name : ll)
+ log.info("--- " + name + ": " + mm.get(name));
+ }
}
diff --git a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestRestapiCallNode.java b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestRestapiCallNode.java
index 5b03bff4..ff971480 100644
--- a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestRestapiCallNode.java
+++ b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestRestapiCallNode.java
@@ -32,61 +32,61 @@ import org.slf4j.LoggerFactory;
public class TestRestapiCallNode {
- private static final Logger log = LoggerFactory.getLogger(TestRestapiCallNode.class);
+ private static final Logger log = LoggerFactory.getLogger(TestRestapiCallNode.class);
- @Test
- public void testDelete() throws Exception {
- SvcLogicContext ctx = new SvcLogicContext();
+ @Test
+ public void testDelete() throws Exception {
+ SvcLogicContext ctx = new SvcLogicContext();
- Map<String, String> p = new HashMap<String, String>();
- p.put("restapiUrl", "https://echo.getpostman.com/delete");
- p.put("restapiUser", "user1");
- p.put("restapiPassword", "pwd1");
- p.put("httpMethod", "delete");
- p.put("skipSending", "true");
+ Map<String, String> p = new HashMap<String, String>();
+ p.put("restapiUrl", "https://echo.getpostman.com/delete");
+ p.put("restapiUser", "user1");
+ p.put("restapiPassword", "pwd1");
+ p.put("httpMethod", "delete");
+ p.put("skipSending", "true");
- RestapiCallNode rcn = new RestapiCallNode();
- rcn.sendRequest(p, ctx);
- }
+ RestapiCallNode rcn = new RestapiCallNode();
+ rcn.sendRequest(p, ctx);
+ }
- @Test
- public void testJsonTemplate() throws Exception {
- SvcLogicContext ctx = new SvcLogicContext();
- ctx.setAttribute("tmp.sdn-circuit-req-row_length", "3");
- ctx.setAttribute("tmp.sdn-circuit-req-row[0].source-uid", "APIDOC-123");
- ctx.setAttribute("tmp.sdn-circuit-req-row[0].action", "delete");
- ctx.setAttribute("tmp.sdn-circuit-req-row[0].request-timestamp", "2016-09-09 16:30:35.0");
- ctx.setAttribute("tmp.sdn-circuit-req-row[0].request-status", "New");
- ctx.setAttribute("tmp.sdn-circuit-req-row[0].processing-status", "New");
- ctx.setAttribute("tmp.sdn-circuit-req-row[0].service-clfi", "testClfi1");
- ctx.setAttribute("tmp.sdn-circuit-req-row[0].clci", "clci");
- ctx.setAttribute("tmp.sdn-circuit-req-row[1].source-uid", "APIDOC-123");
- ctx.setAttribute("tmp.sdn-circuit-req-row[1].action", "delete");
- ctx.setAttribute("tmp.sdn-circuit-req-row[1].request-timestamp", "2016-09-09 16:30:35.0");
- ctx.setAttribute("tmp.sdn-circuit-req-row[1].request-status", "New");
- ctx.setAttribute("tmp.sdn-circuit-req-row[1].processing-status", "New");
- ctx.setAttribute("tmp.sdn-circuit-req-row[1].service-clfi", "testClfi1");
- ctx.setAttribute("tmp.sdn-circuit-req-row[1].clci", "clci");
- ctx.setAttribute("tmp.sdn-circuit-req-row[2].source-uid", "APIDOC-123");
- ctx.setAttribute("tmp.sdn-circuit-req-row[2].action", "delete");
- ctx.setAttribute("tmp.sdn-circuit-req-row[2].request-timestamp", "2016-09-09 16:30:35.0");
- ctx.setAttribute("tmp.sdn-circuit-req-row[2].request-status", "New");
- ctx.setAttribute("tmp.sdn-circuit-req-row[2].processing-status", "New");
- ctx.setAttribute("tmp.sdn-circuit-req-row[2].service-clfi", "testClfi1");
- ctx.setAttribute("tmp.sdn-circuit-req-row[2].clci", "clci");
+ @Test
+ public void testJsonTemplate() throws Exception {
+ SvcLogicContext ctx = new SvcLogicContext();
+ ctx.setAttribute("tmp.sdn-circuit-req-row_length", "3");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[0].source-uid", "APIDOC-123");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[0].action", "delete");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[0].request-timestamp", "2016-09-09 16:30:35.0");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[0].request-status", "New");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[0].processing-status", "New");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[0].service-clfi", "testClfi1");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[0].clci", "clci");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[1].source-uid", "APIDOC-123");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[1].action", "delete");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[1].request-timestamp", "2016-09-09 16:30:35.0");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[1].request-status", "New");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[1].processing-status", "New");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[1].service-clfi", "testClfi1");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[1].clci", "clci");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[2].source-uid", "APIDOC-123");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[2].action", "delete");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[2].request-timestamp", "2016-09-09 16:30:35.0");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[2].request-status", "New");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[2].processing-status", "New");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[2].service-clfi", "testClfi1");
+ ctx.setAttribute("tmp.sdn-circuit-req-row[2].clci", "clci");
- Map<String, String> p = new HashMap<String, String>();
- p.put("templateFileName", "src/test/resources/test-template.json");
- p.put("restapiUrl", "http://echo.getpostman.com");
- p.put("restapiUser", "user1");
- p.put("restapiPassword", "abc123");
- p.put("format", "json");
- p.put("httpMethod", "post");
- p.put("responsePrefix", "response");
- p.put("skipSending", "true");
+ Map<String, String> p = new HashMap<String, String>();
+ p.put("templateFileName", "src/test/resources/test-template.json");
+ p.put("restapiUrl", "http://echo.getpostman.com");
+ p.put("restapiUser", "user1");
+ p.put("restapiPassword", "abc123");
+ p.put("format", "json");
+ p.put("httpMethod", "post");
+ p.put("responsePrefix", "response");
+ p.put("skipSending", "true");
- RestapiCallNode rcn = new RestapiCallNode();
- rcn.sendRequest(p, ctx);
- }
+ RestapiCallNode rcn = new RestapiCallNode();
+ rcn.sendRequest(p, ctx);
+ }
}
diff --git a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlJsonUtil.java b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlJsonUtil.java
index ad1c34e9..579d194d 100644
--- a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlJsonUtil.java
+++ b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlJsonUtil.java
@@ -40,57 +40,98 @@ public class TestXmlJsonUtil {
Map<String, String> mm = new HashMap<>();
mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].vnf-type", "N-SBG");
mm.put("service-data.service-information.service-instance-id", "someinstance001");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].dns-server-ip-address", "10.11.12.13");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].escf-domain-name", "hclab.atttest.com");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].snmp-target-v3_length", "2");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].snmp-target-v3[0].snmp-target-v3-id", "1");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].snmp-target-v3[0].snmp-target-ip-address", "127.0.0.1");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].snmp-target-v3[0].snmp-security-level", "NO_AUTH_NO_PRIV");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].snmp-target-v3[1].snmp-target-v3-id", "2");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].snmp-target-v3[1].snmp-target-ip-address", "192.168.1.8");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].snmp-target-v3[1].snmp-security-level", "NO_AUTH_NO_PRIV");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].dns-ip-address-1", "2001:1890:1001:2224::1");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].dns-ip-address-2", "2001:1890:1001:2424::1");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].diameter-rf-realm-name", "uvp.els-an.att.net");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].diameter-rf-peer-ip-address", "192.168.1.66");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].bgf-controller-ip-address", "192.168.1.186");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].bgf-control-link-name", "mg3/69@192.168.1.226");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].rf-interface-nexthop-ip-address", "10.111.108.150");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].rf-mated-pair-ip-address", "10.111.108.146");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].dns-server-ip-address", "10.11.12.13");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].escf-domain-name", "hclab.atttest.com");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].snmp-target-v3_length", "2");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].snmp-target-v3[0].snmp-target-v3-id", "1");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].snmp-target-v3[0].snmp-target-ip-address", "127.0.0.1");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].snmp-target-v3[0].snmp-security-level", "NO_AUTH_NO_PRIV");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].snmp-target-v3[1].snmp-target-v3-id", "2");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].snmp-target-v3[1].snmp-target-ip-address", "192.168.1.8");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].snmp-target-v3[1].snmp-security-level", "NO_AUTH_NO_PRIV");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].dns-ip-address-1", "2001:1890:1001:2224::1");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].dns-ip-address-2", "2001:1890:1001:2424::1");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].diameter-rf-realm-name", "uvp.els-an.att.net");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].diameter-rf-peer-ip-address", "192.168.1.66");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].bgf-controller-ip-address", "192.168.1.186");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].bgf-control-link-name", "mg3/69@192.168.1.226");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].rf-interface-nexthop-ip-address", "10.111.108.150");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].rf-mated-pair-ip-address", "10.111.108.146");
mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf_length", "4");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[0].network-name", "UvpbUgnAccess1");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[0].sip-pa-termination-ip-address", "10.111.108.146");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[0].network-name", "UvpbUgnAccess1");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[0].sip-pa-termination-ip-address", "10.111.108.146");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[1].network-name", "MIS");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[1].proactive-transcoding-profile", "trinity-transcodingProfile");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[1].next-hop-ip-address", "10.111.108.158");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[1].subnet-mask-length", "10.111.108.154");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[1].network-name", "MIS");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[1].proactive-transcoding-profile",
+ "trinity-transcodingProfile");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[1].next-hop-ip-address", "10.111.108.158");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[1].subnet-mask-length", "10.111.108.154");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[2].network-name", "AVPN1");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[2].proactive-transcoding-profile", "trinity-transcodingProfile");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[2].next-hop-ip-address", "10.111.108.166");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[2].subnet-mask-length", "10.111.108.162");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[2].network-name", "AVPN1");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[2].proactive-transcoding-profile",
+ "trinity-transcodingProfile");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[2].next-hop-ip-address", "10.111.108.166");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[2].subnet-mask-length", "10.111.108.162");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[3].network-name", "AVPN1");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[3].proactive-transcoding-profile", "trinity-transcodingProfile");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[3].next-hop-ip-address", "10.129.108.166");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].access-net-pcscf[3].subnet-mask-length", "10.129.108.162");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[3].network-name", "AVPN1");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[3].proactive-transcoding-profile",
+ "trinity-transcodingProfile");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[3].next-hop-ip-address", "10.129.108.166");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].access-net-pcscf[3].subnet-mask-length", "10.129.108.162");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].core-net-pcscf_length", "1");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].core-net-pcscf_length", "1");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].core-net-pcscf[0].network-name", "Core");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].core-net-pcscf[0].next-hop-ip-address", "10.111.108.142");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].core-net-pcscf[0].sip-pa-termination-ip-address", "10.111.108.138");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].core-net-pcscf[0].network-name", "Core");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].core-net-pcscf[0].next-hop-ip-address", "10.111.108.142");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].core-net-pcscf[0].sip-pa-termination-ip-address", "10.111.108.138");
- mm.put("service-data.vnf-config-parameters-list.vnf-config-parameters[0].mated-pair-fully-qualified-domain-name", "mt1nj01sbg01pyl-mt1nj01sbg02pyl.ar1ga.uvp.els-an.att.net");
+ mm.put("service-data.vnf-config-parameters-list." +
+ "vnf-config-parameters[0].mated-pair-fully-qualified-domain-name",
+ "mt1nj01sbg01pyl-mt1nj01sbg02pyl.ar1ga.uvp.els-an.att.net");
mm.put("service-data.appc-request-header.svc-request-id", "SOMESERVICEREQUEST123451000");
mm.put("service-data.vnf-config-information.vnf-host-ip-address", "192.168.13.151");
mm.put("service-data.vnf-config-information.vendor", "Netconf");
- mm.put("service-data.vnf-config-information.escape-test", "blah blah \"xxx&nnn<>\\'\"there>blah<&''\"\"123\\\\\\'''blah blah &");
+ mm.put("service-data.vnf-config-information.escape-test",
+ "blah blah \"xxx&nnn<>\\'\"there>blah<&''\"\"123\\\\\\'''blah blah &");
String ss = XmlJsonUtil.getXml(mm, "service-data.vnf-config-parameters-list");
log.info(ss);
diff --git a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlParser.java b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlParser.java
index 6d506cce..544d259e 100644
--- a/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlParser.java
+++ b/restapi-call-node/provider/src/test/java/jtest/org/onap/ccsdk/sli/plugins/restapicall/TestXmlParser.java
@@ -37,39 +37,41 @@ import org.slf4j.LoggerFactory;
public class TestXmlParser {
- private static final Logger log = LoggerFactory.getLogger(TestXmlParser.class);
+ private static final Logger log = LoggerFactory.getLogger(TestXmlParser.class);
- @Test
- public void test() throws Exception {
- BufferedReader in = new BufferedReader(new InputStreamReader(ClassLoader.getSystemResourceAsStream("test3.xml")));
- String ss = "";
- String line = null;
- while ((line = in.readLine()) != null)
- ss += line + '\n';
+ @Test
+ public void test() throws Exception {
+ BufferedReader in = new BufferedReader(
+ new InputStreamReader(ClassLoader.getSystemResourceAsStream("test3.xml"))
+ );
+ String ss = "";
+ String line = null;
+ while ((line = in.readLine()) != null)
+ ss += line + '\n';
- Set<String> listNameList = new HashSet<String>();
- listNameList.add("project.dependencies.dependency");
- listNameList.add("project.build.plugins.plugin");
- listNameList.add("project.build.plugins.plugin.executions.execution");
- listNameList.add("project.build.pluginManagement.plugins.plugin");
- listNameList.add(
- "project.build.pluginManagement.plugins.plugin.configuration.lifecycleMappingMetadata.pluginExecutions.pluginExecution");
+ Set<String> listNameList = new HashSet<String>();
+ listNameList.add("project.dependencies.dependency");
+ listNameList.add("project.build.plugins.plugin");
+ listNameList.add("project.build.plugins.plugin.executions.execution");
+ listNameList.add("project.build.pluginManagement.plugins.plugin");
+ listNameList.add("project.build.pluginManagement." +
+ "plugins.plugin.configuration.lifecycleMappingMetadata.pluginExecutions.pluginExecution");
- Map<String, String> mm = XmlParser.convertToProperties(ss, listNameList);
+ Map<String, String> mm = XmlParser.convertToProperties(ss, listNameList);
- logProperties(mm);
+ logProperties(mm);
- in.close();
- }
+ in.close();
+ }
- private void logProperties(Map<String, String> mm) {
- List<String> ll = new ArrayList<>();
- for (Object o : mm.keySet())
- ll.add((String) o);
- Collections.sort(ll);
+ private void logProperties(Map<String, String> mm) {
+ List<String> ll = new ArrayList<>();
+ for (Object o : mm.keySet())
+ ll.add((String) o);
+ Collections.sort(ll);
- log.info("Properties:");
- for (String name : ll)
- log.info("--- " + name + ": " + mm.get(name));
- }
+ log.info("Properties:");
+ for (String name : ll)
+ log.info("--- " + name + ": " + mm.get(name));
+ }
}
diff --git a/restapi-call-node/provider/src/test/resources/test.json b/restapi-call-node/provider/src/test/resources/test.json
index 885e6602..a34f7e2a 100644
--- a/restapi-call-node/provider/src/test/resources/test.json
+++ b/restapi-call-node/provider/src/test/resources/test.json
@@ -20,29 +20,29 @@
*/
{
- "equipment-data": [
- {
- "server-count": "4",
- "max-server-speed": "1600000",
- "number-primary-servers": "2",
- "equipment-id": "Server1",
- "server-model": "Unknown",
- "server-id": "Server1"
- }
- ],
- "resource-state": {
- "threshold-value": "1600000",
- "last-added": "1605000",
- "used": "1605000",
- "limit-value": "1920000"
- },
- "resource-rule": {
- "endpoint-position": "VCE-Cust",
- "soft-limit-expression": "0.6 * max-server-speed * number-primary-servers",
- "resource-name": "Bandwidth",
- "service-model": "DUMMY",
- "hard-limit-expression": "max-server-speed * number-primary-servers",
- "equipment-level": "Server"
- },
- "message": "The provisioned access bandwidth is at or exceeds 50% of the total server capacity."
+ "equipment-data": [
+ {
+ "server-count": "4",
+ "max-server-speed": "1600000",
+ "number-primary-servers": "2",
+ "equipment-id": "Server1",
+ "server-model": "Unknown",
+ "server-id": "Server1"
+ }
+ ],
+ "resource-state": {
+ "threshold-value": "1600000",
+ "last-added": "1605000",
+ "used": "1605000",
+ "limit-value": "1920000"
+ },
+ "resource-rule": {
+ "endpoint-position": "VCE-Cust",
+ "soft-limit-expression": "0.6 * max-server-speed * number-primary-servers",
+ "resource-name": "Bandwidth",
+ "service-model": "DUMMY",
+ "hard-limit-expression": "max-server-speed * number-primary-servers",
+ "equipment-level": "Server"
+ },
+ "message": "The provisioned access bandwidth is at or exceeds 50% of the total server capacity."
}
diff --git a/restapi-call-node/provider/src/test/resources/test.xml b/restapi-call-node/provider/src/test/resources/test.xml
index 391c9b3e..b60b5356 100644
--- a/restapi-call-node/provider/src/test/resources/test.xml
+++ b/restapi-call-node/provider/src/test/resources/test.xml
@@ -21,152 +21,152 @@
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onap.ccsdk.sli.plugins</groupId>
- <artifactId>restapi-call-node</artifactId>
- <version>6.0.0-SNAPSHOT</version>
- </parent>
- <artifactId>restapi-call-node-provider</artifactId>
- <packaging>bundle</packaging>
- <name>RESTAPI Call Node - Provider</name>
- <url>http://maven.apache.org</url>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>3.1.4.RELEASE</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.ccsdk.sli</groupId>
- <artifactId>sli-common</artifactId>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.onap.ccsdk.sli</groupId>
- <artifactId>sli-provider</artifactId>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>${slf4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- <version>${slf4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- <version>3.1.4.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>3.1.4.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>xerces</groupId>
- <artifactId>xerces</artifactId>
- <version>2.4.0</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>com.sun.jersey</groupId>
- <artifactId>jersey-client</artifactId>
- <version>1.17</version>
- </dependency>
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- </dependency>
- </dependencies>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.onap.ccsdk.sli.plugins</groupId>
+ <artifactId>restapi-call-node</artifactId>
+ <version>6.0.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>restapi-call-node-provider</artifactId>
+ <packaging>bundle</packaging>
+ <name>RESTAPI Call Node - Provider</name>
+ <url>http://maven.apache.org</url>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>3.1.4.RELEASE</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli</groupId>
+ <artifactId>sli-common</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli</groupId>
+ <artifactId>sli-provider</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-beans</artifactId>
+ <version>3.1.4.RELEASE</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ <version>3.1.4.RELEASE</version>
+ </dependency>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xerces</artifactId>
+ <version>2.4.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-client</artifactId>
+ <version>1.17</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ </dependency>
+ </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>com.brocade.developer</groupId>
- <artifactId>providermodule-plugin</artifactId>
- <configuration>
- <packageId>org.onap.ccsdk.sli.plugins</packageId>
- <appName>restapi-call-node</appName>
- </configuration>
- <executions>
- <execution>
- <phase>process-sources</phase>
- <goals>
- <goal>process</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.brocade.developer</groupId>
+ <artifactId>providermodule-plugin</artifactId>
+ <configuration>
+ <packageId>org.onap.ccsdk.sli.plugins</packageId>
+ <appName>restapi-call-node</appName>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>process-sources</phase>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Bundle-SymbolicName>org.onap.ccsdk.sli.plugins.restapicall</Bundle-SymbolicName>
- <Export-Package>org.onap.ccsdk.sli.plugins.restapicall</Export-Package>
- <Import-Package>*</Import-Package>
- </instructions>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>org.onap.ccsdk.sli.plugins.restapicall</Bundle-SymbolicName>
+ <Export-Package>org.onap.ccsdk.sli.plugins.restapicall</Export-Package>
+ <Import-Package>*</Import-Package>
+ </instructions>
- <manifestLocation>${project.basedir}/src/main/resources/META-INF</manifestLocation>
+ <manifestLocation>${project.basedir}/src/main/resources/META-INF</manifestLocation>
- </configuration>
+ </configuration>
- </plugin>
+ </plugin>
- </plugins>
- <pluginManagement>
- <plugins>
- <!--This plugin's configuration is used to store Eclipse m2e settings
- only. It has no influence on the Maven build itself. -->
- <plugin>
- <groupId>org.eclipse.m2e</groupId>
- <artifactId>lifecycle-mapping</artifactId>
- <version>1.0.0</version>
- <configuration>
- <lifecycleMappingMetadata>
- <pluginExecutions>
- <pluginExecution>
- <pluginExecutionFilter>
- <groupId>
- com.brocade.developer
- </groupId>
- <artifactId>
- providermodule-plugin
- </artifactId>
- <versionRange>
- [1.2.0.100-SNAPSHOT,)
- </versionRange>
- <goals>
- <goal>process</goal>
- </goals>
- </pluginExecutionFilter>
- <action>
- <ignore />
- </action>
- </pluginExecution>
- </pluginExecutions>
- </lifecycleMappingMetadata>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
- </build>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <!--This plugin's configuration is used to store Eclipse m2e settings
+ only. It has no influence on the Maven build itself. -->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ com.brocade.developer
+ </groupId>
+ <artifactId>
+ providermodule-plugin
+ </artifactId>
+ <versionRange>
+ [1.2.0.100-SNAPSHOT,)
+ </versionRange>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore />
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
</project>
diff --git a/restapi-call-node/provider/src/test/resources/test3.xml b/restapi-call-node/provider/src/test/resources/test3.xml
index 809a208e..ade41268 100644
--- a/restapi-call-node/provider/src/test/resources/test3.xml
+++ b/restapi-call-node/provider/src/test/resources/test3.xml
@@ -21,62 +21,62 @@
-->
<ApplyGroupResponse xmlns="http://onap.org/vpn/schema/v1"
- xmlns:ns2="http://onap.org/prov/vpn/schema/v2">
- <ApplyGroupResponseData>
- <ServiceInstanceId>ICOREPVC-81114561</ServiceInstanceId>
- <VrfDetails>
- <End2EndVpnKey>VPNL811182</End2EndVpnKey>
- <VpnId>811182</VpnId>
- <VrfName>21302:811182</VrfName>
- <VrfImport>SET_BVOIP_IN</VrfImport>
- <VrfImport>SET6_BVOIP_IN</VrfImport>
- <VrfExport>SET6_DSU</VrfExport>
- <VrfExport>SET_DSU</VrfExport>
- <VrfExport>SET6_MANAGED</VrfExport>
- <VrfExport>SET_MANAGED</VrfExport>
- <VrfExport>SET_LOVRF_COMMUNITY</VrfExport>
- <VrfExport>SET_RESET_LP</VrfExport>
- <ApplyGroup>
- <ns2:ApplyGroup>AG_MAX_MCASTROUTES</ns2:ApplyGroup>
- </ApplyGroup>
- </VrfDetails>
- <RoutingApplyGroups>
- <RoutingProtocol>BGP4_PROTOCOL</RoutingProtocol>
- <Family>v4</Family>
- <PeerGroupName>gp_21302:811182</PeerGroupName>
- <ApplyGroupPeer>
- <ns2:ApplyGroup>AG_L3VPN_EBGP</ns2:ApplyGroup>
- </ApplyGroupPeer>
- <ApplyGroupPeer>
- <ns2:ApplyGroup>AG_MAX_PREFIX</ns2:ApplyGroup>
- </ApplyGroupPeer>
- <ApplyGroupNeighbour>
- <ns2:ApplyGroup>AG_BGP_UNMANAGED</ns2:ApplyGroup>
- </ApplyGroupNeighbour>
- <ApplyGroupNeighbour>
- <ns2:ApplyGroup>AG_BFD_BGP_3000</ns2:ApplyGroup>
- </ApplyGroupNeighbour>
- </RoutingApplyGroups>
- <RoutingApplyGroups>
- <RoutingProtocol>BGP4_PROTOCOL</RoutingProtocol>
- <Family>v6</Family>
- <PeerGroupName>gp6_21302:811182</PeerGroupName>
- <ApplyGroupPeer>
- <ns2:ApplyGroup>AG6_L3VPN_EBGP</ns2:ApplyGroup>
- </ApplyGroupPeer>
- <ApplyGroupPeer>
- <ns2:ApplyGroup>AG6_MAX_PREFIX</ns2:ApplyGroup>
- </ApplyGroupPeer>
- <ApplyGroupNeighbour>
- <ns2:ApplyGroup>AG6_BGP_UNMANAGED</ns2:ApplyGroup>
- </ApplyGroupNeighbour>
- <ApplyGroupNeighbour>
- <ns2:ApplyGroup>AG6_BFD_BGP_3000</ns2:ApplyGroup>
- </ApplyGroupNeighbour>
- </RoutingApplyGroups>
- </ApplyGroupResponseData>
- <response-code>200</response-code>
- <response-message>Success</response-message>
- <ack-final-indicator>Y</ack-final-indicator>
+ xmlns:ns2="http://onap.org/prov/vpn/schema/v2">
+ <ApplyGroupResponseData>
+ <ServiceInstanceId>ICOREPVC-81114561</ServiceInstanceId>
+ <VrfDetails>
+ <End2EndVpnKey>VPNL811182</End2EndVpnKey>
+ <VpnId>811182</VpnId>
+ <VrfName>21302:811182</VrfName>
+ <VrfImport>SET_BVOIP_IN</VrfImport>
+ <VrfImport>SET6_BVOIP_IN</VrfImport>
+ <VrfExport>SET6_DSU</VrfExport>
+ <VrfExport>SET_DSU</VrfExport>
+ <VrfExport>SET6_MANAGED</VrfExport>
+ <VrfExport>SET_MANAGED</VrfExport>
+ <VrfExport>SET_LOVRF_COMMUNITY</VrfExport>
+ <VrfExport>SET_RESET_LP</VrfExport>
+ <ApplyGroup>
+ <ns2:ApplyGroup>AG_MAX_MCASTROUTES</ns2:ApplyGroup>
+ </ApplyGroup>
+ </VrfDetails>
+ <RoutingApplyGroups>
+ <RoutingProtocol>BGP4_PROTOCOL</RoutingProtocol>
+ <Family>v4</Family>
+ <PeerGroupName>gp_21302:811182</PeerGroupName>
+ <ApplyGroupPeer>
+ <ns2:ApplyGroup>AG_L3VPN_EBGP</ns2:ApplyGroup>
+ </ApplyGroupPeer>
+ <ApplyGroupPeer>
+ <ns2:ApplyGroup>AG_MAX_PREFIX</ns2:ApplyGroup>
+ </ApplyGroupPeer>
+ <ApplyGroupNeighbour>
+ <ns2:ApplyGroup>AG_BGP_UNMANAGED</ns2:ApplyGroup>
+ </ApplyGroupNeighbour>
+ <ApplyGroupNeighbour>
+ <ns2:ApplyGroup>AG_BFD_BGP_3000</ns2:ApplyGroup>
+ </ApplyGroupNeighbour>
+ </RoutingApplyGroups>
+ <RoutingApplyGroups>
+ <RoutingProtocol>BGP4_PROTOCOL</RoutingProtocol>
+ <Family>v6</Family>
+ <PeerGroupName>gp6_21302:811182</PeerGroupName>
+ <ApplyGroupPeer>
+ <ns2:ApplyGroup>AG6_L3VPN_EBGP</ns2:ApplyGroup>
+ </ApplyGroupPeer>
+ <ApplyGroupPeer>
+ <ns2:ApplyGroup>AG6_MAX_PREFIX</ns2:ApplyGroup>
+ </ApplyGroupPeer>
+ <ApplyGroupNeighbour>
+ <ns2:ApplyGroup>AG6_BGP_UNMANAGED</ns2:ApplyGroup>
+ </ApplyGroupNeighbour>
+ <ApplyGroupNeighbour>
+ <ns2:ApplyGroup>AG6_BFD_BGP_3000</ns2:ApplyGroup>
+ </ApplyGroupNeighbour>
+ </RoutingApplyGroups>
+ </ApplyGroupResponseData>
+ <response-code>200</response-code>
+ <response-message>Success</response-message>
+ <ack-final-indicator>Y</ack-final-indicator>
</ApplyGroupResponse>
-
+