From 82658daad05f982a8358581623f44a1554238a48 Mon Sep 17 00:00:00 2001 From: Edwin Lawrance Date: Thu, 13 Sep 2018 11:19:43 +0100 Subject: Fix to not remove whitespaces in the payload to ES Change-Id: I3547e79ff27220a49539d9cfdf48ac534f155f10 Issue-ID: AAI-1596 Signed-off-by: Edwin Lawrance --- .../dao/ElasticSearchHttpController.java | 13 +++--- .../util/ElasticSearchPayloadTranslator.java | 51 ++++++++++++++-------- 2 files changed, 39 insertions(+), 25 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchHttpController.java b/src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchHttpController.java index 90adbd7..98a254c 100644 --- a/src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchHttpController.java +++ b/src/main/java/org/onap/aai/sa/searchdbabstraction/elasticsearch/dao/ElasticSearchHttpController.java @@ -370,7 +370,8 @@ public class ElasticSearchHttpController implements DocumentStoreInterface { try { attachContent(conn, ElasticSearchPayloadTranslator.translateESPayload(sb.toString())); } catch(IOException e) { - throw new DocumentStoreOperationException("Error in translating Index payload to make it ES compliant.", e); + logger.error(SearchDbMsgs.INDEX_CREATE_FAILURE, e); + throw new DocumentStoreOperationException(e.getMessage(), e); } logger.debug("\ncreateTable(), Sending 'PUT' request to URL : " + conn.getURL()); @@ -422,7 +423,8 @@ public class ElasticSearchHttpController implements DocumentStoreInterface { try { attachContent(conn, ElasticSearchPayloadTranslator.translateESPayload(settingsAndMappings)); } catch(IOException e) { - throw new DocumentStoreOperationException("Error in translating DynamicIndex payload to make it ES compliant.", e); + logger.error(SearchDbMsgs.INDEX_CREATE_FAILURE, e); + throw new DocumentStoreOperationException(e.getMessage()); } handleResponse(conn, result); @@ -571,12 +573,7 @@ public class ElasticSearchHttpController implements DocumentStoreInterface { // conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Connection", "Close"); - - try { - attachContent(conn, ElasticSearchPayloadTranslator.translateESPayload(doc.getContentInJson())); - } catch(IOException e) { - throw new DocumentStoreOperationException("Error in translating Document payload to make it ES compliant.", e); - } + attachContent(conn, doc.getContentInJson()); } private DocumentOperationResult checkDocumentExistence(String indexName, diff --git a/src/main/java/org/onap/aai/sa/searchdbabstraction/util/ElasticSearchPayloadTranslator.java b/src/main/java/org/onap/aai/sa/searchdbabstraction/util/ElasticSearchPayloadTranslator.java index 2e97103..97f0ca1 100644 --- a/src/main/java/org/onap/aai/sa/searchdbabstraction/util/ElasticSearchPayloadTranslator.java +++ b/src/main/java/org/onap/aai/sa/searchdbabstraction/util/ElasticSearchPayloadTranslator.java @@ -23,14 +23,20 @@ package org.onap.aai.sa.searchdbabstraction.util; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.util.List; +import java.util.Map; import org.apache.commons.io.IOUtils; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.onap.aai.cl.api.Logger; import org.onap.aai.cl.eelf.LoggerFactory; import org.onap.aai.sa.searchdbabstraction.logging.SearchDbMsgs; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; + /** * This class as the name suggests is to translate the payload of PUT & POST requests @@ -52,8 +58,9 @@ public class ElasticSearchPayloadTranslator { /** - * Using String replacement to translate the payload to ES compatible version - * + * Using JSON Path query to filter objects to translate the payload to ES compatible version + * The filter queries and the replacement attributes are configured in the es-payload-translation.json file. + * * @param source * @return translated payload in String * @throws IOException @@ -61,23 +68,33 @@ public class ElasticSearchPayloadTranslator { public static String translateESPayload(String source) throws IOException { logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "translateESPayload, method-params[ source=" + source + "]"); String pathToTranslationFile = CONFIG_DIRECTORY + File.separator + ES_PAYLOAD_TRANSLATION_FILE; - - String translatedPayload = source.replaceAll("\\s+", ""); // removing whitespaces - JSONObject translationConfigPayload = new JSONObject(IOUtils.toString( - new FileInputStream(new File(pathToTranslationFile)), "UTF-8")); - JSONArray attrTranslations = translationConfigPayload.getJSONArray("attr-translations"); + try { + + JSONObject translationConfigPayload = new JSONObject(IOUtils.toString( + new FileInputStream(new File(pathToTranslationFile)), "UTF-8")); + JSONArray attrTranslations = translationConfigPayload.getJSONArray("attr-translations"); + DocumentContext payloadToTranslate = JsonPath.parse(source); - for(Object obj : attrTranslations) { - JSONObject jsonObj = ((JSONObject)obj); - String from = jsonObj.get("from").toString(); - String to = jsonObj.get("to").toString(); - if(translatedPayload.indexOf(from) > 0) { - translatedPayload = translatedPayload.replaceAll(from, to); + for(Object obj : attrTranslations) { + JSONObject jsonObj = ((JSONObject) obj); + String query = jsonObj.get("query").toString(); + JSONObject attrToUpdate = (JSONObject) jsonObj.get("update"); + List> filteredObjects = payloadToTranslate.read(query); + for(Map objMap : filteredObjects) { + objMap.putAll(attrToUpdate.toMap()); + } } - } - - logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "Payload after translation: "+translatedPayload); - return translatedPayload; + + logger.info(SearchDbMsgs.PROCESS_PAYLOAD_QUERY, "Payload after translation: "+payloadToTranslate.jsonString()); + return payloadToTranslate.jsonString(); + + } catch (JSONException | IOException e) { + logger.error(SearchDbMsgs.FILTERS_CONFIG_FAILURE, e, ES_PAYLOAD_TRANSLATION_FILE, e.getMessage()); + if(e instanceof JSONException) { + throw new IOException("Payload translation configuration looks corrupted. Please correct!", e); + } + throw new IOException("Error in configuring payload translation file. Please check if it exists.", e); + } } } -- cgit 1.2.3-korg