2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.so.adapters.sdnc.impl;
26 import java.io.StringWriter;
28 import javax.xml.XMLConstants;
29 import javax.xml.parsers.DocumentBuilder;
30 import javax.xml.parsers.DocumentBuilderFactory;
31 import javax.xml.transform.Transformer;
32 import javax.xml.transform.TransformerFactory;
33 import javax.xml.transform.dom.DOMSource;
34 import javax.xml.transform.stream.StreamResult;
36 import org.onap.so.logger.ErrorCode;
37 import org.onap.so.logger.MessageEnum;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
40 import org.w3c.dom.Document;
41 import org.w3c.dom.Element;
42 import org.w3c.dom.Node;
43 import org.w3c.dom.NodeList;
46 private static Logger logger = LoggerFactory.getLogger(Utils.class);
51 public static String genSdncReq(Document reqDoc, RequestTunables rt) {
54 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
55 DocumentBuilder db = dbf.newDocumentBuilder();
59 Document newdoc = db.newDocument();
60 Element root = newdoc.createElementNS(rt.getNamespace(), "input");
61 newdoc.appendChild(root);
64 Element hdr = newdoc.createElement(rt.getHeaderName());
65 root.appendChild(hdr);
67 String elemData = rt.getReqId();
69 if (elemData != null && elemData.length() > 0)
71 hdrChild = newdoc.createElement("svc-request-id");
72 hdrChild.appendChild(newdoc.createTextNode(elemData));
73 hdr.appendChild(hdrChild);
76 elemData = rt.getAction();
77 if (elemData != null && elemData.length() > 0)
79 hdrChild = newdoc.createElement("svc-action");
80 hdrChild.appendChild(newdoc.createTextNode(elemData));
81 hdr.appendChild(hdrChild);
84 elemData = rt.getSdncaNotificationUrl();
85 if (elemData != null && elemData.length() > 0)
87 hdrChild = newdoc.createElement("svc-notification-url");
88 hdrChild.appendChild(newdoc.createTextNode(elemData));
89 hdr.appendChild(hdrChild);
93 NodeList nodes = reqDoc.getDocumentElement().getChildNodes();
94 for (int i = 0; i < nodes.getLength(); i++) {
95 Node n = nodes.item(i);
96 Node newNode = newdoc.importNode(n, true);
97 root.appendChild(newNode);
100 String s = domToStr(newdoc);
101 logger.debug("Formatted SdncReq:\n", s);
104 } catch (Exception e) {
105 logger.error("{} {} {} {}", MessageEnum.RA_ERROR_CREATE_SDNC_REQUEST.toString(), "SDNC",
106 ErrorCode.BusinessProcesssError.getValue(), "Exception in genSdncReq", e);
111 public static String genSdncPutReq(Document reqDoc, RequestTunables rt) {
114 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
115 DocumentBuilder db = dbf.newDocumentBuilder();
119 Document newdoc = db.newDocument();
122 NodeList nodes = reqDoc.getDocumentElement().getChildNodes();
124 Element root = newdoc.createElementNS(nodes.item(0).getNamespaceURI(), nodes.item(0).getNodeName());
125 newdoc.appendChild(root);
127 NodeList childNodes = nodes.item(0).getChildNodes();
128 for (int i = 0; i < childNodes.getLength(); i++) {
129 Node n = childNodes.item(i);
130 Node newNode = newdoc.importNode(n, true);
131 root.appendChild(newNode);
134 String s = domToStr(newdoc);
135 logger.debug("Formatted SdncPutReq:\n {}", s);
138 } catch (Exception e) {
139 logger.error("{} {} {} {}", MessageEnum.RA_ERROR_CREATE_SDNC_REQUEST.toString(), "SDNC",
140 ErrorCode.DataError.getValue(), "Exception in genSdncPutReq", e);
145 public static String genMsoFailResp(SDNCResponse resp) {
148 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
149 DocumentBuilder db = dbf.newDocumentBuilder();
153 Document newdoc = db.newDocument();
154 Element root = newdoc.createElement("output");
155 newdoc.appendChild(root);
157 Element elem1 = newdoc.createElement("svc-request-id");
158 elem1.appendChild(newdoc.createTextNode(resp.getReqId()));
159 root.appendChild(elem1);
161 Element elem2 = newdoc.createElement("response-code");
162 elem2.appendChild(newdoc.createTextNode(String.valueOf(resp.getRespCode())));
163 root.appendChild(elem2);
165 Element elem3 = newdoc.createElement("response-message");
166 elem3.appendChild(newdoc.createTextNode(String.valueOf(resp.getRespMsg())));
167 root.appendChild(elem3);
169 String s = domToStr(newdoc);
170 logger.debug("Formatted SdncReq: {}", s);
173 } catch (Exception e) {
174 logger.error("{} {} {} {}", MessageEnum.RA_ERROR_CREATE_SDNC_RESPONSE.toString(), "SDNC",
175 ErrorCode.DataError.getValue(), "Exception in genMsoFailResp", e);
181 public static String domToStr(Document doc)
186 DOMSource ds = new DOMSource(doc);
187 StringWriter sw = new StringWriter();
188 StreamResult sr = new StreamResult(sw);
189 TransformerFactory tf = TransformerFactory.newInstance();
190 tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
191 tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
192 Transformer t = tf.newTransformer();
193 //t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");//<?xml version="1.0" encoding="UTF-8"?>
195 String s = sw.toString();
197 // This is an awful fix for now but we don't want that xmlns="" to be generated
198 s = s.replaceAll("xmlns=\"\"", "");
200 } catch (Exception e) {
201 logger.error("{} {} {}", MessageEnum.RA_ERROR_CONVERT_XML2STR.toString(), ErrorCode.DataError
202 .getValue(), "Exception - domToStr", e);