summaryrefslogtreecommitdiffstats
path: root/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util
diff options
context:
space:
mode:
authorhuangjian <huang.jian12@zte.com.cn>2016-09-14 23:59:44 +0800
committerhuangjian <huang.jian12@zte.com.cn>2016-09-14 23:59:44 +0800
commit906a4ce648cbcef097f7da2888f88e082a0b8d5c (patch)
treec62e060ce1c910612d0cb18bb04d4d184e51a927 /wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util
parentf84ace36fe23ab9cdb698dcce9d6dacd9f89e7a8 (diff)
Add wso2bpel-ext code
Change-Id: I774e0ede1668ee8b4ef03bb48a2fb2971fbd3757 Signed-off-by: huangjian <huang.jian12@zte.com.cn>
Diffstat (limited to 'wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util')
-rw-r--r--wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/ClientWsdlLoader.java82
-rw-r--r--wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/JsonUtil.java61
-rw-r--r--wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/LRULinkedHashMap.java106
-rw-r--r--wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/SoapUtil.java156
-rw-r--r--wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/Xml2JsonUtil.java141
5 files changed, 546 insertions, 0 deletions
diff --git a/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/ClientWsdlLoader.java b/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/ClientWsdlLoader.java
new file mode 100644
index 0000000..219d04d
--- /dev/null
+++ b/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/ClientWsdlLoader.java
@@ -0,0 +1,82 @@
+/**
+ * Copyright 2016 [ZTE] and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openo.carbon.bpel.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.net.URL;
+import org.apache.log4j.Logger;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.methods.GetMethod;
+
+import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlLoader;
+
+public class ClientWsdlLoader extends WsdlLoader {
+ private static Logger logger = Logger.getLogger(ClientWsdlLoader.class);
+
+ private boolean isAborted = false;
+ private HttpClient httpClient;
+
+ public ClientWsdlLoader(String url, HttpClient httpClient) {
+ super(url);
+ this.httpClient = httpClient;
+ }
+
+ public InputStream load(String url) throws Exception {
+ GetMethod httpGetMethod;
+
+ if (url.startsWith("file")) {
+ return new URL(url).openStream();
+ }
+
+ // Authentication is not being overridden on the method. It needs
+ // to be present on the supplied HttpClient instance!
+ httpGetMethod = new GetMethod(url);
+ httpGetMethod.setDoAuthentication(true);
+
+ try {
+ int result = httpClient.executeMethod(httpGetMethod);
+
+ if (result != HttpStatus.SC_OK) {
+ if (result < 200 || result > 299) {
+ throw new HttpException(
+ "Received status code '" + result + "' on WSDL HTTP (GET) request: '" + url + "'.");
+ } else {
+ logger.warn(
+ "Received status code '" + result + "' on WSDL HTTP (GET) request: '" + url + "'.");
+ }
+ }
+
+ return new ByteArrayInputStream(httpGetMethod.getResponseBody());
+ } finally {
+ httpGetMethod.releaseConnection();
+ }
+ }
+
+ public boolean abort() {
+ isAborted = true;
+ return true;
+ }
+
+ public boolean isAborted() {
+ return isAborted;
+ }
+
+ public void close() {}
+}
diff --git a/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/JsonUtil.java b/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/JsonUtil.java
new file mode 100644
index 0000000..b1319fd
--- /dev/null
+++ b/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/JsonUtil.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright 2016 [ZTE] and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openo.carbon.bpel.util;
+
+import java.io.IOException;
+import java.io.StringWriter;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class JsonUtil {
+
+ @SuppressWarnings("deprecation")
+ public static String bean2Json(Object obj) throws IOException {
+ ObjectMapper mapper = new ObjectMapper();
+ StringWriter sw = new StringWriter();
+ JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
+ mapper.writeValue(gen, obj);
+ gen.close();
+ return sw.toString();
+ }
+
+ public static <T> T json2Bean(String jsonStr, Class<T> objClass)
+ throws JsonParseException, JsonMappingException, IOException {
+ ObjectMapper mapper = new ObjectMapper();
+ return mapper.readValue(jsonStr, objClass);
+ }
+
+ @SuppressWarnings("deprecation")
+ public static <T> T readJson(String jsonStr, Class<?> collectionClass, Class<?>... elementClasses)
+ throws Exception {
+ ObjectMapper mapper = new ObjectMapper();
+ JavaType javaType =
+ mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
+ return mapper.readValue(jsonStr, javaType);
+ }
+
+ public static JsonNode getJsonNode(String json) throws JsonProcessingException, IOException {
+ return new ObjectMapper().readTree(json);
+ }
+
+}
diff --git a/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/LRULinkedHashMap.java b/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/LRULinkedHashMap.java
new file mode 100644
index 0000000..6315feb
--- /dev/null
+++ b/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/LRULinkedHashMap.java
@@ -0,0 +1,106 @@
+/**
+ * Copyright 2016 [ZTE] and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openo.carbon.bpel.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ *
+ * @author bsli
+ *
+ * @param <K>
+ * @param <V>
+ */
+@SuppressWarnings("serial")
+public class LRULinkedHashMap<K, V> extends LinkedHashMap<K, V> {
+ private final int maxCapacity;
+
+ private static final float DEFAULT_LOAD_FACTOR = 0.75f;
+
+ private final Lock lock = new ReentrantLock();
+
+ public LRULinkedHashMap(int maxCapacity) {
+ super(maxCapacity, DEFAULT_LOAD_FACTOR, true);
+ this.maxCapacity = maxCapacity;
+ }
+
+ @Override
+ protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
+ return size() > maxCapacity;
+ }
+
+ @Override
+ public boolean containsKey(Object key) {
+ try {
+ lock.lock();
+ return super.containsKey(key);
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public V get(Object key) {
+ try {
+ lock.lock();
+ return super.get(key);
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public V put(K key, V value) {
+ try {
+ lock.lock();
+ return super.put(key, value);
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ public int size() {
+ try {
+ lock.lock();
+ return super.size();
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ public void clear() {
+ try {
+ lock.lock();
+ super.clear();
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ public Collection<Map.Entry<K, V>> getAll() {
+ try {
+ lock.lock();
+ return new ArrayList<Map.Entry<K, V>>(super.entrySet());
+ } finally {
+ lock.unlock();
+ }
+ }
+}
diff --git a/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/SoapUtil.java b/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/SoapUtil.java
new file mode 100644
index 0000000..47913ae
--- /dev/null
+++ b/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/SoapUtil.java
@@ -0,0 +1,156 @@
+/**
+ * Copyright 2016 [ZTE] and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openo.carbon.bpel.util;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.naming.ConfigurationException;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.log4j.Logger;
+
+import com.eviware.soapui.impl.wsdl.WsdlInterface;
+import com.eviware.soapui.impl.wsdl.WsdlProject;
+import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlLoader;
+import com.eviware.soapui.model.iface.Operation;
+import com.eviware.soapui.model.iface.Request;
+
+public class SoapUtil {
+ private static final Logger log = Logger.getLogger(SoapUtil.class);
+
+ private DocumentBuilderFactory docBuilderFactory;
+ private Map<String, WsdlInterface[]> wsdls = new LRULinkedHashMap<String, WsdlInterface[]>(256);
+
+ public SoapUtil() {
+ docBuilderFactory = DocumentBuilderFactory.newInstance();
+ docBuilderFactory.setNamespaceAware(true);
+ }
+
+ public Request[] getRequestTemplate(String wsdlUrl)
+ throws UnsupportedOperationException, IOException {
+ Request[] requests = new Request[0];
+ List<Request> requestList = new ArrayList<Request>();
+ Operation operationInst = null;
+ WsdlInterface[] wsdlInterfaces = getWsdlInterfaces(wsdlUrl, null);
+ for (WsdlInterface wsdlInterface : wsdlInterfaces) {
+ Operation opr = wsdlInterface.getOperationAt(0);
+ if (opr != null) {
+ operationInst = opr;
+ String requestTemplate = operationInst.getRequestAt(0).getRequestContent();
+ requestList.add(operationInst.getRequestAt(0));
+ }
+ }
+ requests = requestList.toArray(new Request[0]);
+ return requests;
+ }
+
+ /**
+ *
+ * @param wsdl
+ * @param operation
+ * @param httpClientProps
+ * @return
+ * @throws IOException
+ * @throws UnsupportedOperationException
+ */
+ private Operation getOperation(String wsdl, String operation, Properties httpClientProps)
+ throws IOException, UnsupportedOperationException {
+ WsdlInterface[] wsdlInterfaces = getWsdlInterfaces(wsdl, httpClientProps);
+ for (WsdlInterface wsdlInterface : wsdlInterfaces) {
+ Operation operationInst = wsdlInterface.getOperationByName(operation);
+
+ if (operationInst != null) {
+ return operationInst;
+ }
+ }
+ wsdls.remove(wsdl);
+ wsdlInterfaces = getWsdlInterfaces(wsdl, httpClientProps);
+ for (WsdlInterface wsdlInterface : wsdlInterfaces) {
+ Operation operationInst = wsdlInterface.getOperationByName(operation);
+ if (operationInst != null) {
+ return operationInst;
+ }
+ }
+
+ throw new UnsupportedOperationException(
+ "Operation '" + operation + "' not supported by WSDL '" + wsdl + "'.");
+ }
+
+ /**
+ *
+ * @param wsdl
+ * @param httpClientProps
+ * @return
+ * @throws IOException
+ */
+ private WsdlInterface[] getWsdlInterfaces(String wsdl, Properties httpClientProps)
+ throws IOException {
+ try {
+ WsdlInterface[] wsdlInterfaces = wsdls.get(wsdl);
+ if (wsdlInterfaces == null) {
+ WsdlProject wsdlProject = new WsdlProject();
+ WsdlLoader wsdlLoader = createWsdlLoader(wsdl, httpClientProps);
+
+ wsdlInterfaces = wsdlProject.importWsdl(wsdl, true, wsdlLoader);
+
+ wsdls.put(wsdl, wsdlInterfaces);
+ }
+ return wsdlInterfaces;
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error(e.getMessage());
+ throw new RuntimeException("Failed to import WSDL '" + wsdl + "'.");
+ }
+ }
+
+ /**
+ *
+ * @param wsdl
+ * @param httpClientProps
+ * @return
+ * @throws ConfigurationException
+ */
+ private WsdlLoader createWsdlLoader(String wsdl, Properties httpClientProps)
+ throws ConfigurationException {
+ HttpClient httpClient = new HttpClient();
+ return new ClientWsdlLoader(wsdl, httpClient);
+ }
+
+ public static void main(String[] args) {
+ SoapUtil soapUtil = new SoapUtil();
+
+ try {
+ String url = "http://10.74.151.36:9763/services/initService?wsdl";
+ Request[] requestXMLs = soapUtil.getRequestTemplate(url);
+
+ for (Request requestXML : requestXMLs) {
+ String requestJson = Xml2JsonUtil.xml2JSON(requestXML.getRequestContent());
+ System.out.println("====================================");
+ System.out.println(requestJson);
+ }
+
+ } catch (UnsupportedOperationException e1) {
+ e1.printStackTrace();
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ }
+ }
+}
diff --git a/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/Xml2JsonUtil.java b/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/Xml2JsonUtil.java
new file mode 100644
index 0000000..fcc55c2
--- /dev/null
+++ b/wso2bpel-ext/wso2bpel-core/wso2bpel-mgr/src/main/java/org/openo/carbon/bpel/util/Xml2JsonUtil.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright 2016 [ZTE] and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openo.carbon.bpel.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import net.sf.json.JSONObject;
+
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.input.SAXBuilder;
+
+public class Xml2JsonUtil {
+ /**
+ * transform xml to json
+ *
+ * @param xml xml format string
+ * @return return json string when success; otherwise return null
+ */
+ public static String xml2JSON(String xml) {
+ JSONObject obj = new JSONObject();
+ try {
+ InputStream is = new ByteArrayInputStream(xml.getBytes("utf-8"));
+ SAXBuilder sb = new SAXBuilder();
+ Document doc = sb.build(is);
+ Element root = doc.getRootElement();
+ obj.put(root.getName(), iterateElement(root));
+ return obj.toString();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * transform xml file to json string
+ *
+ * @param file java.io.File is an effective xml file
+ * @return return json string when success; otherwise return null
+ */
+ public static String xml2JSON(File file) {
+ JSONObject obj = new JSONObject();
+ try {
+ SAXBuilder sb = new SAXBuilder();
+ Document doc = sb.build(file);
+ Element root = doc.getRootElement();
+ obj.put(root.getName(), iterateElement(root));
+ return obj.toString();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * an iteration function
+ *
+ * @param parentElement : org.jdom.Element
+ * @return java.util.Map
+ */
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private static Map iterateElement(Element parentElement) {
+ List node = parentElement.getChildren();
+ Element element = null;
+ Map map = new HashMap();
+ List list = null;
+ for (int i = 0; i < node.size(); i++) {
+ element = (Element) node.get(i);
+ if (element.getTextTrim().equals("")) {
+ if (element.getChildren().size() == 0)
+ continue;
+ if (map.containsKey(element.getName())) {
+ Object obj = map.get(element.getName());
+ if (obj instanceof Map) {
+ list = new LinkedList();
+ list.add(obj);
+ list.add(iterateElement(element));
+ map.remove(element.getName());
+ map.put(element.getName(), list);
+ } else if (obj instanceof List) {
+ list = (List) obj;
+ list.add(iterateElement(element));
+ }
+ } else {
+ map.put(element.getName(), iterateElement(element));
+ }
+ } else {
+ map.put(element.getName(), element.getTextTrim());
+ }
+ }
+ return map;
+ }
+
+ public static void main(String[] args) {
+ System.out.println(Xml2JsonUtil.xml2JSON("<MapSet>" + "<MapGroup id='Sheboygan'>" + "<Map>"
+ + "<Type>MapGuideddddddd</Type>" + "<SingleTile>true</SingleTile>" + "<Extension>"
+ + "<ResourceId>ddd</ResourceId>" + "</Extension>" + "</Map>" + "<Map>" + "<Type>ccc</Type>"
+ + "<SingleTile>ggg</SingleTile>" + "<Extension>" + "<ResourceId>aaa</ResourceId>"
+ + "</Extension>" + "</Map>" + "<Extension />" + "</MapGroup>" + "<ddd>" + "33333333"
+ + "</ddd>" + "<ddd>" + "444" + "</ddd>" + "</MapSet>"));
+
+ String xml =
+ "<body> <p:helloXsl xmlns:p=\"http://ode/bpel/unit-test.wsdl\"> <!--Exactly 1 occurrence--> <TestPart> <!--Exactly 1 occurrence--> <content>fdsafasdfasdf</content> </TestPart> </p:helloXsl></body>";
+
+ System.out.println(Xml2JsonUtil.xml2JSON(xml));
+
+ xml =
+ "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:unit=\"http://ode/bpel/unit-test.wsdl\"> <soapenv:Header/> <soapenv:Body> <unit:helloXsl> <TestPart> <content>?</content> </TestPart> </unit:helloXsl> </soapenv:Body></soapenv:Envelope>";
+
+ System.out.println(Xml2JsonUtil.xml2JSON(xml));
+
+ xml =
+ "<ns:uploadServiceResponse xmlns:ns=\"http://services.deployer.bpel.carbon.wso2.org\"><ns:return xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/></ns:uploadServiceResponse>";
+
+ System.out.println(Xml2JsonUtil.xml2JSON(xml));
+
+ xml =
+ "<body> <p:planInput xmlns:p=\"http://www.open-o.org/tosca/nfv/2015/12\"> <!--Exactly 1 occurrence--> <p:sfc_count>2</p:sfc_count> <!--Exactly 1 occurrence--> <p:iaUrl></p:iaUrl> <!--Exactly 1 occurrence--> <p:vnfmId>112</p:vnfmId> <!--Exactly 1 occurrence--> <p:object_context>{\"e\":{\"f\":\"4\"}}</p:object_context> <!--Exactly 1 occurrence--> <p:statusUrl></p:statusUrl> <!--Exactly 1 occurrence--> <p:serviceTemplateId>?</p:serviceTemplateId> <!--Exactly 1 occurrence--> <p:roUrl></p:roUrl> <!--Exactly 1 occurrence--> <p:vl_count>2</p:vl_count> <!--Exactly 1 occurrence--> <p:containerapiUrl>?</p:containerapiUrl> <!--Exactly 1 occurrence--> <p:flavor></p:flavor> <!--Exactly 1 occurrence--> <p:nsInstanceId>223</p:nsInstanceId> <!--Exactly 1 occurrence--> <p:instanceId>334</p:instanceId> <!--Exactly 1 occurrence--> <p:resourceUrl></p:resourceUrl> <!--Exactly 1 occurrence--> <p:vnf_count>2</p:vnf_count> <!--Exactly 1 occurrence--> <p:callbackId></p:callbackId> <!--Exactly 1 occurrence--> <p:object_additionalParamForVnf>[{\"b\":1},{\"c\":{\"d\":\"2\"}}}]</p:object_additionalParamForVnf> <!--Exactly 1 occurrence--> <p:object_additionalParamForNs>[{\"a\":3},{\"e\":{\"f\":\"4\"}}}]</p:object_additionalParamForNs> <!--Exactly 1 occurrence--> <p:flavorParams></p:flavorParams> </p:planInput></body>";
+
+ System.out.println(Xml2JsonUtil.xml2JSON(xml));
+ }
+}