From b1ea3b6d19de319a283b6284595b0465c9e98030 Mon Sep 17 00:00:00 2001 From: Shwetank Dave Date: Wed, 7 Nov 2018 16:04:43 -0500 Subject: Upgrading event-client to version 1.3.1 - Adding support for rabbit mq (from event-client version 1.3.1) - Fixing issue where the checking offset fails - Adding a fix for fully qualified domain name Change-Id: Ibab1fc48e00df15a8a2b17369d0731fece17061c Issue-ID: AAI-1798 Signed-off-by: Shwetank Dave --- .gitreview | 4 ++ pom.xml | 13 +++-- .../aai/spike/schema/GraphEventTransformer.java | 19 +++---- .../org/onap/aai/spike/schema/OXMModelLoader.java | 63 +++++++++++++++++++++- .../aai/spike/service/SpikeEventProcessor.java | 2 +- 5 files changed, 87 insertions(+), 14 deletions(-) create mode 100644 .gitreview diff --git a/.gitreview b/.gitreview new file mode 100644 index 0000000..0878209 --- /dev/null +++ b/.gitreview @@ -0,0 +1,4 @@ +[gerrit] +host=gerrit.onap.org +port=29418 +project=aai/spike diff --git a/pom.xml b/pom.xml index cc129c0..f149a91 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,7 @@ ${basedir}/target 1.2.4 + 1.3.1 @@ -164,19 +165,25 @@ org.onap.aai.event-client event-client-api - 1.3.0 + ${event.client.version} org.onap.aai.event-client event-client-dmaap - 1.3.0 + ${event.client.version} org.onap.aai.event-client event-client-kafka - 1.3.0 + ${event.client.version} + + + + org.onap.aai.event-client + event-client-rabbitmq + ${event.client.version} diff --git a/src/main/java/org/onap/aai/spike/schema/GraphEventTransformer.java b/src/main/java/org/onap/aai/spike/schema/GraphEventTransformer.java index 54d9936..205a17e 100644 --- a/src/main/java/org/onap/aai/spike/schema/GraphEventTransformer.java +++ b/src/main/java/org/onap/aai/spike/schema/GraphEventTransformer.java @@ -23,6 +23,7 @@ package org.onap.aai.spike.schema; import java.util.HashMap; import java.util.Map; import java.util.Set; +import javax.ws.rs.core.Response.Status; import org.eclipse.persistence.dynamic.DynamicType; import org.eclipse.persistence.internal.helper.DatabaseField; import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; @@ -33,6 +34,7 @@ import org.onap.aai.spike.event.incoming.GizmoEdge; import org.onap.aai.spike.event.incoming.GizmoGraphEvent; import org.onap.aai.spike.event.incoming.GizmoVertex; import org.onap.aai.spike.exception.SpikeException; +import org.onap.aai.spike.logging.SpikeMsgs; import com.google.common.base.CaseFormat; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -95,11 +97,14 @@ public class GraphEventTransformer { try { DynamicJAXBContext jaxbContext = OXMModelLoader.getContextForVersion(version); - String modelObjectClass = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, - CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, rawVertex.getType())); - final DynamicType modelObjectType = jaxbContext.getDynamicType(modelObjectClass); + final DynamicType modelObjectType = OXMModelLoader.getDynamicTypeForVersion(version, rawVertex.getType()); final DynamicType reservedType = jaxbContext.getDynamicType("ReservedPropNames"); + if (modelObjectType == null) { + logger.error(SpikeMsgs.LOADED_OXM_FILE, "Object of collection type not found: " + rawVertex.getType()); + throw new SpikeException("Object of collection type not found: " + rawVertex.getType()); + } + Set> vertexEntriesSet = rawVertex.getProperties().getAsJsonObject().entrySet(); Map vertexEntriesMap = new HashMap(); @@ -216,14 +221,10 @@ public class GraphEventTransformer { JsonObject modelJsonElement = new JsonObject(); for (String property : relationshipModel.keySet()) { - - if (!edgeEntriesMap.containsKey(property)) { - throw new SpikeException("Missing required field: " + property); - } - + if (edgeEntriesMap.containsKey(property)) { validateFieldType(edgeEntriesMap.get(property), relationshipModel.get(property)); modelJsonElement.add(property, edgeEntriesMap.get(property)); - + } } rawEdge.setProperties(modelJsonElement); diff --git a/src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java b/src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java index 0d174db..5d35017 100644 --- a/src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java +++ b/src/main/java/org/onap/aai/spike/schema/OXMModelLoader.java @@ -22,11 +22,17 @@ package org.onap.aai.spike.schema; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; + +import javax.ws.rs.core.Response.Status; + +import org.eclipse.persistence.dynamic.DynamicType; +import org.eclipse.persistence.internal.oxm.mappings.Descriptor; import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; import org.onap.aai.cl.eelf.LoggerFactory; import org.onap.aai.nodes.NodeIngestor; @@ -36,6 +42,7 @@ import org.onap.aai.setup.Version; import org.onap.aai.spike.exception.SpikeException; import org.onap.aai.spike.logging.SpikeMsgs; import org.onap.aai.spike.util.SchemaIngestPropertiesReader; +import com.google.common.base.CaseFormat; /** * This class contains all of the logic for importing OXM model schemas from the available OXM @@ -45,7 +52,8 @@ public class OXMModelLoader { private static Map versionContextMap = new ConcurrentHashMap(); - + private static Map> xmlElementLookup = new ConcurrentHashMap>(); + final static Pattern p = Pattern.compile("aai_oxm_(.*).xml"); final static Pattern versionPattern = Pattern.compile("V(\\d*)"); @@ -82,6 +90,7 @@ public class OXMModelLoader { private synchronized static void loadModel(String oxmVersion, DynamicJAXBContext jaxbContext) { versionContextMap.put(oxmVersion, jaxbContext); + loadXmlLookupMap(oxmVersion, jaxbContext); logger.info(SpikeMsgs.LOADED_OXM_FILE, oxmVersion); } @@ -158,6 +167,58 @@ public class OXMModelLoader { OXMModelLoader.versionContextMap = versionContextMap; } + public static void loadXmlLookupMap(String version, DynamicJAXBContext jaxbContext) { + + @SuppressWarnings("rawtypes") + List descriptorsList = jaxbContext.getXMLContext().getDescriptors(); + HashMap types = new HashMap(); + + for (@SuppressWarnings("rawtypes") + Descriptor desc : descriptorsList) { + + DynamicType entity = jaxbContext.getDynamicType(desc.getAlias()); + String entityName = desc.getDefaultRootElement(); + types.put(entityName, entity); + } + xmlElementLookup.put(version, types); + } + + public static DynamicType getDynamicTypeForVersion(String version, String type) throws SpikeException { + + DynamicType dynamicType; + // If we haven't already loaded in the available OXM models, then do so now. + if (versionContextMap == null || versionContextMap.isEmpty()) { + loadModels(); + } else if (!versionContextMap.containsKey(version)) { + logger.error(SpikeMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version); + throw new SpikeException("Error loading oxm model: " + version); + } + + // First try to match the Java-type based on hyphen to camel case + // translation + String javaTypeName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, type); + dynamicType = versionContextMap.get(version).getDynamicType(javaTypeName); + + if (xmlElementLookup.containsKey(version)) { + if (dynamicType == null) { + // Try to lookup by xml root element by exact match + dynamicType = xmlElementLookup.get(version).get(type); + } + + if (dynamicType == null) { + // Try to lookup by xml root element by lowercase + dynamicType = xmlElementLookup.get(version).get(type.toLowerCase()); + } + + if (dynamicType == null) { + // Direct lookup as java-type name + dynamicType = versionContextMap.get(version).getDynamicType(type); + } + } + + return dynamicType; + } + /** * Retrieves the list of all Loaded OXM versions. * diff --git a/src/main/java/org/onap/aai/spike/service/SpikeEventProcessor.java b/src/main/java/org/onap/aai/spike/service/SpikeEventProcessor.java index c4e1746..88fa716 100644 --- a/src/main/java/org/onap/aai/spike/service/SpikeEventProcessor.java +++ b/src/main/java/org/onap/aai/spike/service/SpikeEventProcessor.java @@ -186,7 +186,7 @@ public class SpikeEventProcessor extends TimerTask { // There is no point in continually committing the same offset value, so make sure // that something has actually changed before we do anything... - if ((lastCommittedOffset == null) || (lastCommittedOffset != nextOffset)) { + if ((lastCommittedOffset == null) || (!lastCommittedOffset.equals(nextOffset))) { if (logger.isDebugEnabled()) { logger.debug( -- cgit 1.2.3-korg