diff options
author | Jim Hahn <jrh3@att.com> | 2019-02-13 13:55:31 -0500 |
---|---|---|
committer | Jim Hahn <jrh3@att.com> | 2019-02-14 14:00:12 -0500 |
commit | 710992a925b44fa9594d8f70bbc9f22a6f91d8ad (patch) | |
tree | 4f2ff921eb015632204f8ef6868de8db9bf27bbe | |
parent | 6683a08e12d119e1ba8fb1070a93660c0c3a3931 (diff) |
Remove jackson from policy coders
Coders came in pairs, one for GSON and one for Jackson. Replaced the
pairs with a single coder for GSON.
Simplified list copy.
Removed multipleToolsetRetries flag.
Removed additional jackson code. It had been removed, but the changes
were somehow lost.
Simplified another list copy.
Updated license dates.
Note: the date in PolicyEngineTest will be updated via a
different review (mgmt-gson).
Change-Id: Id3c7688c2389d194f66afcefa14303cf403ada16
Issue-ID: POLICY-1431
Signed-off-by: Jim Hahn <jrh3@att.com>
10 files changed, 77 insertions, 428 deletions
diff --git a/policy-management/pom.xml b/policy-management/pom.xml index 5d3d9eeb..557e1f44 100644 --- a/policy-management/pom.xml +++ b/policy-management/pom.xml @@ -199,12 +199,6 @@ </dependency> <dependency> - <groupId>org.glassfish.jersey.media</groupId> - <artifactId>jersey-media-json-jackson</artifactId> - <version>${jersey.version}</version> - </dependency> - - <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-jetty-http</artifactId> <version>${jersey.version}</version> @@ -223,18 +217,6 @@ <dependency> <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <version>${jackson.version}</version> - </dependency> - - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-jsr310</artifactId> - <version>${jackson.version}</version> - </dependency> - - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> diff --git a/policy-management/src/main/java/org/onap/policy/drools/controller/DroolsControllerFactory.java b/policy-management/src/main/java/org/onap/policy/drools/controller/DroolsControllerFactory.java index 6dcae635..24fc6de9 100644 --- a/policy-management/src/main/java/org/onap/policy/drools/controller/DroolsControllerFactory.java +++ b/policy-management/src/main/java/org/onap/policy/drools/controller/DroolsControllerFactory.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * policy-management * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,7 +37,6 @@ import org.onap.policy.drools.properties.DroolsProperties; import org.onap.policy.drools.protocol.coders.JsonProtocolFilter; import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration; import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.CustomGsonCoder; -import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.CustomJacksonCoder; import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.PotentialCoderFilter; import org.onap.policy.drools.utils.Pair; import org.slf4j.Logger; @@ -311,19 +310,6 @@ class IndexedDroolsControllerFactory implements DroolsControllerFactory { } } - String customJackson = properties.getProperty(propertyTopicEntityPrefix + firstTopic - + PolicyEndPointProperties.PROPERTY_TOPIC_EVENTS_CUSTOM_MODEL_CODER_JACKSON_SUFFIX); - - CustomJacksonCoder customJacksonCoder = null; - if (customJackson != null && !customJackson.isEmpty()) { - try { - customJacksonCoder = new CustomJacksonCoder(customJackson); - } catch (IllegalArgumentException e) { - logger.warn("{}: cannot create custom-jackson-coder {} because of {}", this, customJackson, - e.getMessage(), e); - } - } - // 3. second the list of classes associated with each topic String eventClasses = properties @@ -395,7 +381,7 @@ class IndexedDroolsControllerFactory implements DroolsControllerFactory { } TopicCoderFilterConfiguration topic2Classes2Filters = - new TopicCoderFilterConfiguration(firstTopic, classes2Filters, customGsonCoder, customJacksonCoder); + new TopicCoderFilterConfiguration(firstTopic, classes2Filters, customGsonCoder); topics2DecodedClasses2Filters.add(topic2Classes2Filters); } diff --git a/policy-management/src/main/java/org/onap/policy/drools/controller/internal/MavenDroolsController.java b/policy-management/src/main/java/org/onap/policy/drools/controller/internal/MavenDroolsController.java index 6e9f04ed..55352fe2 100644 --- a/policy-management/src/main/java/org/onap/policy/drools/controller/internal/MavenDroolsController.java +++ b/policy-management/src/main/java/org/onap/policy/drools/controller/internal/MavenDroolsController.java @@ -46,7 +46,6 @@ import org.onap.policy.drools.protocol.coders.EventProtocolParams; import org.onap.policy.drools.protocol.coders.JsonProtocolFilter; import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration; import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.CustomGsonCoder; -import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.CustomJacksonCoder; import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.PotentialCoderFilter; import org.onap.policy.drools.utils.ReflectionUtil; import org.slf4j.Logger; @@ -270,22 +269,6 @@ public class MavenDroolsController implements DroolsController { } } - CustomJacksonCoder customJacksonCoder = coderConfig.getCustomJacksonCoder(); - if (coderConfig.getCustomJacksonCoder() != null - && coderConfig.getCustomJacksonCoder().getClassContainer() != null - && !coderConfig.getCustomJacksonCoder().getClassContainer().isEmpty()) { - - String customJacksonCoderClass = coderConfig.getCustomJacksonCoder().getClassContainer(); - if (!ReflectionUtil.isClass(this.policyContainer.getClassLoader(), - customJacksonCoderClass)) { - throw makeRetrieveEx(customJacksonCoderClass); - } else { - if (logger.isInfoEnabled()) { - logClassFetched(customJacksonCoderClass); - } - } - } - List<PotentialCoderFilter> coderFilters = coderConfig.getCoderFilters(); if (coderFilters == null || coderFilters.isEmpty()) { continue; @@ -312,14 +295,13 @@ public class MavenDroolsController implements DroolsController { .eventClass(potentialCodedClass) .protocolFilter(protocolFilter) .customGsonCoder(customGsonCoder) - .customJacksonCoder(customJacksonCoder) .modelClassLoaderHash(this.policyContainer.getClassLoader().hashCode())); } else { EventProtocolCoder.manager.addEncoder( EventProtocolParams.builder().groupId(this.getGroupId()) .artifactId(this.getArtifactId()).topic(topic) .eventClass(potentialCodedClass).protocolFilter(protocolFilter) - .customGsonCoder(customGsonCoder).customJacksonCoder(customJacksonCoder) + .customGsonCoder(customGsonCoder) .modelClassLoaderHash(this.policyContainer.getClassLoader().hashCode())); } } diff --git a/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolCoder.java b/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolCoder.java index 6d16c601..56eadad3 100644 --- a/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolCoder.java +++ b/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolCoder.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright(C) 2018 Samsung Electronics Co., Ltd. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,10 +26,8 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; - import org.onap.policy.drools.controller.DroolsController; import org.onap.policy.drools.protocol.coders.EventProtocolCoder.CoderFilters; -import org.onap.policy.drools.utils.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -379,7 +377,7 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder { @Override public void addDecoder(EventProtocolParams eventProtocolParams) { logger.info( - "{}: add-decoder {}:{}:{}:{}:{}:{}:{}:{}", + "{}: add-decoder {}:{}:{}:{}:{}:{}:{}", this, eventProtocolParams.getGroupId(), eventProtocolParams.getArtifactId(), @@ -387,7 +385,6 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder { eventProtocolParams.getEventClass(), eventProtocolParams.getProtocolFilter(), eventProtocolParams.getCustomGsonCoder(), - eventProtocolParams.getCustomJacksonCoder(), eventProtocolParams.getModelClassLoaderHash()); this.decoders.add(eventProtocolParams); } @@ -400,7 +397,7 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder { @Override public void addEncoder(EventProtocolParams eventProtocolParams) { logger.info( - "{}: add-decoder {}:{}:{}:{}:{}:{}:{}:{}", + "{}: add-decoder {}:{}:{}:{}:{}:{}:{}", this, eventProtocolParams.getGroupId(), eventProtocolParams.getArtifactId(), @@ -408,7 +405,6 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder { eventProtocolParams.getEventClass(), eventProtocolParams.getProtocolFilter(), eventProtocolParams.getCustomGsonCoder(), - eventProtocolParams.getCustomJacksonCoder(), eventProtocolParams.getModelClassLoaderHash()); this.encoders.add(eventProtocolParams); } @@ -513,14 +509,14 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder { */ @Override public ProtocolCoderToolset getDecoders(String groupId, String artifactId, String topic) { - Pair<ProtocolCoderToolset, ProtocolCoderToolset> decoderToolsets = + ProtocolCoderToolset decoderToolsets = this.decoders.getCoders(groupId, artifactId, topic); if (decoderToolsets == null) { throw new IllegalArgumentException( "Decoders not found for " + groupId + ":" + artifactId + ":" + topic); } - return decoderToolsets.first(); + return decoderToolsets; } /** @@ -534,18 +530,13 @@ class MultiplexorEventProtocolCoder implements EventProtocolCoder { @Override public List<ProtocolCoderToolset> getDecoders(String groupId, String artifactId) { - List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> decoderToolsets = + List<ProtocolCoderToolset> decoderToolsets = this.decoders.getCoders(groupId, artifactId); if (decoderToolsets == null) { throw new IllegalArgumentException("Decoders not found for " + groupId + ":" + artifactId); } - List<ProtocolCoderToolset> parser1CoderToolset = new ArrayList<>(); - for (Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderToolsetPair : decoderToolsets) { - parser1CoderToolset.add(coderToolsetPair.first()); - } - - return parser1CoderToolset; + return new ArrayList<>(decoderToolsets); } /** @@ -629,24 +620,20 @@ abstract class GenericEventProtocolCoder { private static Logger logger = LoggerFactory.getLogger(GenericEventProtocolCoder.class); /** - * Mapping topic:controller-id -> /<protocol-decoder-toolset-pair/> where protocol-coder-toolset-pair contains both - * a jackson-protocol-coder-toolset and a gson-protocol-coder-toolset. The first value of the pair will the protocol - * coder toolset most likely to be successful with the encoding or decoding, and consequently the second value will - * be the less likely. + * Mapping topic:controller-id -> /<protocol-decoder-toolset/> where protocol-coder-toolset contains + * a gson-protocol-coder-toolset. */ - protected final HashMap<String, Pair<ProtocolCoderToolset, ProtocolCoderToolset>> coders = + protected final HashMap<String, ProtocolCoderToolset> coders = new HashMap<>(); /** * Mapping topic + classname -> Protocol Set. */ - protected final HashMap<String, List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>>> + protected final HashMap<String, List<ProtocolCoderToolset>> reverseCoders = new HashMap<>(); - protected boolean multipleToolsetRetries = false; - - GenericEventProtocolCoder(boolean multipleToolsetRetries) { - this.multipleToolsetRetries = multipleToolsetRetries; + GenericEventProtocolCoder() { + super(); } /** @@ -678,18 +665,11 @@ abstract class GenericEventProtocolCoder { synchronized (this) { if (coders.containsKey(key)) { - Pair<ProtocolCoderToolset, ProtocolCoderToolset> toolsets = coders.get(key); + ProtocolCoderToolset toolset = coders.get(key); - logger.info("{}: adding coders for existing {}: {}", this, key, toolsets.first()); + logger.info("{}: adding coders for existing {}: {}", this, key, toolset); - toolsets - .first() - .addCoder( - eventProtocolParams.getEventClass(), - eventProtocolParams.getProtocolFilter(), - eventProtocolParams.getModelClassLoaderHash()); - toolsets - .second() + toolset .addCoder( eventProtocolParams.getEventClass(), eventProtocolParams.getProtocolFilter(), @@ -701,34 +681,20 @@ abstract class GenericEventProtocolCoder { this, reverseKey, key, - toolsets.first()); + toolset); - List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> reverseMappings = + List<ProtocolCoderToolset> reverseMappings = new ArrayList<>(); - reverseMappings.add(toolsets); + reverseMappings.add(toolset); reverseCoders.put(reverseKey, reverseMappings); } return; } - GsonProtocolCoderToolset gsonCoderTools = + GsonProtocolCoderToolset coderTools = new GsonProtocolCoderToolset(eventProtocolParams, key); - JacksonProtocolCoderToolset jacksonCoderTools = - new JacksonProtocolCoderToolset(eventProtocolParams, key); - - // Use Gson as the first priority encoding/decoding toolset, and Jackson - // as second. This is because it has been observed that they can diverge - // somewhat in the encoding/decoding data types, which can produce json - // that may result incompatible with what some network elements are - // expecting. As decoding takes place, this element will reconfigure - // itself to set the jackson one as the favoured one first, if errors - // are detected in the gson encoding - - Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderTools = - new Pair<>(gsonCoderTools, jacksonCoderTools); - - logger.info("{}: adding coders for new {}: {}", this, key, coderTools.first()); + logger.info("{}: adding coders for new {}: {}", this, key, coderTools); coders.put(key, coderTools); @@ -736,12 +702,12 @@ abstract class GenericEventProtocolCoder { // There is another controller (different group id/artifact id/topic) // that shares the class and the topic. - List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets = + List<ProtocolCoderToolset> toolsets = reverseCoders.get(reverseKey); boolean present = false; - for (Pair<ProtocolCoderToolset, ProtocolCoderToolset> parserSet : toolsets) { + for (ProtocolCoderToolset parserSet : toolsets) { // just doublecheck - present = parserSet.first().getControllerId().equals(key); + present = parserSet.getControllerId().equals(key); if (present) { /* anomaly */ logger.error( @@ -749,18 +715,18 @@ abstract class GenericEventProtocolCoder { this, reverseKey, key, - parserSet.first()); + parserSet); } } if (present) { return; } else { - logger.info("{}: adding coder set for {}: {} ", this, reverseKey, coderTools.getFirst()); + logger.info("{}: adding coder set for {}: {} ", this, reverseKey, coderTools); toolsets.add(coderTools); } } else { - List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets = new ArrayList<>(); + List<ProtocolCoderToolset> toolsets = new ArrayList<>(); toolsets.add(coderTools); logger.info("{}: adding toolset for reverse key {}: {}", this, reverseKey, toolsets); @@ -818,21 +784,21 @@ abstract class GenericEventProtocolCoder { synchronized (this) { if (coders.containsKey(key)) { - Pair<ProtocolCoderToolset, ProtocolCoderToolset> pair = coders.remove(key); + ProtocolCoderToolset coderToolset = coders.remove(key); - logger.info("{}: removed toolset for {}: {}", this, key, pair.getFirst()); + logger.info("{}: removed toolset for {}: {}", this, key, coderToolset); - for (CoderFilters codeFilter : pair.first().getCoders()) { + for (CoderFilters codeFilter : coderToolset.getCoders()) { String className = codeFilter.getCodedClass(); String reverseKey = this.reverseCodersKey(topic, className); if (this.reverseCoders.containsKey(reverseKey)) { - List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets = + List<ProtocolCoderToolset> toolsets = this.reverseCoders.get(reverseKey); - Iterator<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsetsIter = + Iterator<ProtocolCoderToolset> toolsetsIter = toolsets.iterator(); while (toolsetsIter.hasNext()) { - Pair<ProtocolCoderToolset, ProtocolCoderToolset> toolset = toolsetsIter.next(); - if (toolset.first().getControllerId().equals(key)) { + ProtocolCoderToolset toolset = toolsetsIter.next(); + if (toolset.getControllerId().equals(key)) { logger.info( "{}: removed coder from toolset for {} from reverse mapping", this, reverseKey); toolsetsIter.remove(); @@ -896,9 +862,9 @@ abstract class GenericEventProtocolCoder { } String key = this.codersKey(groupId, artifactId, topic); - Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderTools = coders.get(key); + ProtocolCoderToolset coderTools = coders.get(key); try { - Object event = coderTools.first().decode(json); + Object event = coderTools.decode(json); if (event != null) { return event; } @@ -906,27 +872,7 @@ abstract class GenericEventProtocolCoder { logger.debug("{}, cannot decode {}", this, json, e); } - if (multipleToolsetRetries) { - // try the less favored toolset - try { - Object event = coderTools.second().decode(json); - if (event != null) { - // change the priority of the toolset - synchronized (this) { - ProtocolCoderToolset first = coderTools.first(); - ProtocolCoderToolset second = coderTools.second(); - coderTools.first(second); - coderTools.second(first); - } - - return event; - } - } catch (Exception e) { - throw new UnsupportedOperationException(e); - } - } - - throw new UnsupportedOperationException("Cannot decode neither with gson or jackson"); + throw new UnsupportedOperationException("Cannot decode with gson"); } /** @@ -979,12 +925,12 @@ abstract class GenericEventProtocolCoder { throw new IllegalArgumentException("no reverse coder has been found"); } - List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets = + List<ProtocolCoderToolset> toolsets = this.reverseCoders.get(reverseKey); String key = codersKey( - toolsets.get(0).first().getGroupId(), toolsets.get(0).first().getArtifactId(), topic); + toolsets.get(0).getGroupId(), toolsets.get(0).getArtifactId(), topic); return this.encodeInternal(key, event); } @@ -1024,9 +970,9 @@ abstract class GenericEventProtocolCoder { logger.debug("{}: encode for {}: {}", this, key, event); - Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderTools = coders.get(key); + ProtocolCoderToolset coderTools = coders.get(key); try { - String json = coderTools.first().encode(event); + String json = coderTools.encode(event); if (json != null && !json.isEmpty()) { return json; } @@ -1034,28 +980,7 @@ abstract class GenericEventProtocolCoder { logger.warn("{}: cannot encode (first) for {}: {}", this, key, event, e); } - if (multipleToolsetRetries) { - // try the less favored toolset - try { - String json = coderTools.second().encode(event); - if (json != null) { - // change the priority of the toolset - synchronized (this) { - ProtocolCoderToolset first = coderTools.first(); - ProtocolCoderToolset second = coderTools.second(); - coderTools.first(second); - coderTools.second(first); - } - - return json; - } - } catch (Exception e) { - logger.error("{}: cannot encode (second) for {}: {}", this, key, event, e); - throw new UnsupportedOperationException(e); - } - } - - throw new UnsupportedOperationException("Cannot decode neither with gson or jackson"); + throw new UnsupportedOperationException("Cannot decode with gson"); } /** @@ -1077,10 +1002,10 @@ abstract class GenericEventProtocolCoder { return droolsControllers; } - List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets = + List<ProtocolCoderToolset> toolsets = this.reverseCoders.get(reverseKey); - // There must be multiple toolset pairs associated with <topic,classname> reverseKey + // There must be multiple toolsets associated with <topic,classname> reverseKey // case 2 different controllers use the same models and register the same encoder for // the same topic. This is assumed not to occur often but for the purpose of encoding // but there should be no side-effects. Ownership is crosscheck against classname and @@ -1094,11 +1019,11 @@ abstract class GenericEventProtocolCoder { + encodedClass.getClass().getCanonicalName()); } - for (Pair<ProtocolCoderToolset, ProtocolCoderToolset> encoderSet : toolsets) { + for (ProtocolCoderToolset encoderSet : toolsets) { // figure out the right toolset - String groupId = encoderSet.first().getGroupId(); - String artifactId = encoderSet.first().getArtifactId(); - List<CoderFilters> coderFilters = encoderSet.first().getCoders(); + String groupId = encoderSet.getGroupId(); + String artifactId = encoderSet.getArtifactId(); + List<CoderFilters> coderFilters = encoderSet.getCoders(); for (CoderFilters coder : coderFilters) { if (coder.getCodedClass().equals(encodedClass.getClass().getCanonicalName())) { DroolsController droolsController = DroolsController.factory.get(groupId, artifactId, ""); @@ -1137,8 +1062,8 @@ abstract class GenericEventProtocolCoder { } String key = this.codersKey(groupId, artifactId, topic); - Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderTools = coders.get(key); - return coderTools.first().getCoders(); + ProtocolCoderToolset coderTools = coders.get(key); + return coderTools.getCoders(); } /** @@ -1162,10 +1087,10 @@ abstract class GenericEventProtocolCoder { String key = this.codersKey(groupId, artifactId, ""); List<CoderFilters> codersFilters = new ArrayList<>(); - for (Map.Entry<String, Pair<ProtocolCoderToolset, ProtocolCoderToolset>> entry : + for (Map.Entry<String, ProtocolCoderToolset> entry : coders.entrySet()) { if (entry.getKey().startsWith(key)) { - codersFilters.addAll(entry.getValue().first().getCoders()); + codersFilters.addAll(entry.getValue().getCoders()); } } @@ -1194,8 +1119,8 @@ abstract class GenericEventProtocolCoder { } String key = this.codersKey(groupId, artifactId, topic); - Pair<ProtocolCoderToolset, ProtocolCoderToolset> coderTools = coders.get(key); - return coderTools.first().getCoder(classname); + ProtocolCoderToolset coderTools = coders.get(key); + return coderTools.getCoder(classname); } /** @@ -1207,7 +1132,7 @@ abstract class GenericEventProtocolCoder { * @return list of coders * @throws IllegalArgumentException if invalid input */ - public Pair<ProtocolCoderToolset, ProtocolCoderToolset> getCoders( + public ProtocolCoderToolset getCoders( String groupId, String artifactId, String topic) { if (!isCodingSupported(groupId, artifactId, topic)) { @@ -1226,7 +1151,7 @@ abstract class GenericEventProtocolCoder { * @return list of coders * @throws IllegalArgumentException if invalid input */ - public List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> getCoders( + public List<ProtocolCoderToolset> getCoders( String groupId, String artifactId) { if (groupId == null || groupId.isEmpty()) { @@ -1239,8 +1164,8 @@ abstract class GenericEventProtocolCoder { String key = this.codersKey(groupId, artifactId, ""); - List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> coderToolset = new ArrayList<>(); - for (Map.Entry<String, Pair<ProtocolCoderToolset, ProtocolCoderToolset>> entry : + List<ProtocolCoderToolset> coderToolset = new ArrayList<>(); + for (Map.Entry<String, ProtocolCoderToolset> entry : coders.entrySet()) { if (entry.getKey().startsWith(key)) { coderToolset.add(entry.getValue()); @@ -1268,14 +1193,14 @@ abstract class GenericEventProtocolCoder { } String key = this.reverseCodersKey(topic, codedClass); - List<Pair<ProtocolCoderToolset, ProtocolCoderToolset>> toolsets = this.reverseCoders.get(key); + List<ProtocolCoderToolset> toolsets = this.reverseCoders.get(key); if (toolsets == null) { throw new IllegalArgumentException("No Coder found for " + key); } List<CoderFilters> coderFilters = new ArrayList<>(); - for (Pair<ProtocolCoderToolset, ProtocolCoderToolset> toolset : toolsets) { - coderFilters.addAll(toolset.first().getCoders()); + for (ProtocolCoderToolset toolset : toolsets) { + coderFilters.addAll(toolset.getCoders()); } return coderFilters; @@ -1360,7 +1285,7 @@ abstract class GenericEventProtocolCoder { class EventProtocolDecoder extends GenericEventProtocolCoder { public EventProtocolDecoder() { - super(false); + super(); } @Override @@ -1372,7 +1297,7 @@ class EventProtocolDecoder extends GenericEventProtocolCoder { class EventProtocolEncoder extends GenericEventProtocolCoder { public EventProtocolEncoder() { - super(false); + super(); } @Override diff --git a/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolParams.java b/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolParams.java index e8a140e0..810562cd 100644 --- a/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolParams.java +++ b/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/EventProtocolParams.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved. + * Modifications Copyright (C) 2019 AT&T Intellectual Property. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,7 +30,6 @@ public class EventProtocolParams { private String eventClass; private JsonProtocolFilter protocolFilter; private TopicCoderFilterConfiguration.CustomGsonCoder customGsonCoder; - private TopicCoderFilterConfiguration.CustomJacksonCoder customJacksonCoder; private int modelClassLoaderHash; public String getGroupId() { @@ -56,10 +56,6 @@ public class EventProtocolParams { return customGsonCoder; } - public TopicCoderFilterConfiguration.CustomJacksonCoder getCustomJacksonCoder() { - return customJacksonCoder; - } - public int getModelClassLoaderHash() { return modelClassLoaderHash; } @@ -138,18 +134,6 @@ public class EventProtocolParams { /** * Setter method. - * - * @param customJacksonCoder custom Jackson coder - * @return EventProtocolParams - */ - public EventProtocolParams customJacksonCoder( - TopicCoderFilterConfiguration.CustomJacksonCoder customJacksonCoder) { - this.customJacksonCoder = customJacksonCoder; - return this; - } - - /** - * Setter method. * @param modelClassLoaderHash integer representing model hash * @return EventProtocolParams */ @@ -159,6 +143,6 @@ public class EventProtocolParams { } public CustomCoder getCustomCoder() { - return this.customGsonCoder != null ? this.customGsonCoder : this.customJacksonCoder; + return this.customGsonCoder; } } diff --git a/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolset.java b/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolset.java index bc4fe142..97598df4 100644 --- a/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolset.java +++ b/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolset.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2018 Samsung Electronics Co., Ltd. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,10 +22,6 @@ package org.onap.policy.drools.protocol.coders; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; @@ -330,146 +326,9 @@ public abstract class ProtocolCoderToolset { } -/** - * Tools used for encoding/decoding using Jackson. - */ -class JacksonProtocolCoderToolset extends ProtocolCoderToolset { - private static final String WARN_FETCH_FAILED = "{}: cannot fetch application class {}"; - private static final String WARN_FETCH_FAILED_BECAUSE = "{}: cannot fetch application class {} because of {}"; - private static final String FETCH_FAILED = "cannot fetch application class "; - private static final String ENCODE_FAILED = "event cannot be encoded"; - private static Logger logger = LoggerFactory.getLogger(JacksonProtocolCoderToolset.class); - - /** - * decoder. - */ - @JsonIgnore - protected final ObjectMapper decoder = new ObjectMapper(); - - /** - * encoder. - */ - @JsonIgnore - protected final ObjectMapper encoder = new ObjectMapper(); - - /** - * Toolset to encode/decode tools associated with a topic. - * - * @param eventProtocolParams parameter object for event encoder - * @param controllerId controller id - */ - public JacksonProtocolCoderToolset(EventProtocolParams eventProtocolParams, String controllerId) { - super(eventProtocolParams, controllerId); - this.decoder.registerModule(new JavaTimeModule()); - this.decoder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - } - - /** - * gets the Jackson decoder. - * - * @return the Jackson decoder - */ - @JsonIgnore - protected ObjectMapper getDecoder() { - return this.decoder; - } - - /** - * gets the Jackson encoder. - * - * @return the Jackson encoder - */ - @JsonIgnore - protected ObjectMapper getEncoder() { - return this.encoder; - } - - /** - * {@inheritDoc}. - */ - @Override - public Object decode(String json) { - - // 0. Use custom coder if available - - if (this.customCoder != null) { - throw new UnsupportedOperationException( - "Jackon Custom Decoder is not supported at this time"); - } - - final DroolsController droolsController = - DroolsController.factory.get(this.groupId, this.artifactId, ""); - if (droolsController == null) { - logger.warn("{}: no drools-controller to process {}", this, json); - throw new IllegalStateException("no drools-controller to process event"); - } - - final CoderFilters decoderFilter = this.filter(json); - if (decoderFilter == null) { - logger.debug("{}: no decoder to process {}", this, json); - throw new UnsupportedOperationException("no decoder to process event"); - } - - Class<?> decoderClass; - try { - decoderClass = droolsController.fetchModelClass(decoderFilter.getCodedClass()); - if (decoderClass == null) { - logger.warn(WARN_FETCH_FAILED, this, decoderFilter.getCodedClass()); - throw new IllegalStateException( - FETCH_FAILED + decoderFilter.getCodedClass()); - } - } catch (final Exception e) { - logger.warn(WARN_FETCH_FAILED_BECAUSE, this, - decoderFilter.getCodedClass(), e.getMessage()); - throw new UnsupportedOperationException( - FETCH_FAILED + decoderFilter.getCodedClass(), e); - } - - - try { - return this.decoder.readValue(json, decoderClass); - } catch (final Exception e) { - logger.warn("{} cannot decode {} into {} because of {}", this, json, decoderClass.getName(), - e.getMessage(), e); - throw new UnsupportedOperationException( - "cannont decode into " + decoderFilter.getCodedClass(), e); - } - } - - /** - * {@inheritDoc}. - */ - @Override - public String encode(Object event) { - - // 0. Use custom coder if available - - if (this.customCoder != null) { - throw new UnsupportedOperationException( - "Jackon Custom Encoder is not supported at this time"); - } - - try { - return this.encoder.writeValueAsString(event); - } catch (final JsonProcessingException e) { - logger.error("{} cannot encode {} because of {}", this, event, e.getMessage(), e); - throw new UnsupportedOperationException(ENCODE_FAILED); - } - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("JacksonProtocolCoderToolset [toString()=").append(super.toString()).append("]"); - return builder.toString(); - } - -} - - /** - * Tools used for encoding/decoding using Jackson. + * Tools used for encoding/decoding using GSON. */ class GsonProtocolCoderToolset extends ProtocolCoderToolset { /** diff --git a/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/TopicCoderFilterConfiguration.java b/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/TopicCoderFilterConfiguration.java index f7fc4d21..35a49a1d 100644 --- a/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/TopicCoderFilterConfiguration.java +++ b/policy-management/src/main/java/org/onap/policy/drools/protocol/coders/TopicCoderFilterConfiguration.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * policy-management * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -145,24 +145,6 @@ public class TopicCoderFilterConfiguration { } } - public static class CustomJacksonCoder extends CustomCoder { - - public CustomJacksonCoder(String className, String staticCoderField) { - super(className, staticCoderField); - } - - public CustomJacksonCoder(String customJackson) { - super(customJackson); - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("CustomJacksonCoder [toString()=").append(super.toString()).append("]"); - return builder.toString(); - } - } - /** * Coder/Decoder class and Filter container. The decoder class is potential, in order to be * operational needs to be fetched from an available class loader. @@ -243,24 +225,20 @@ public class TopicCoderFilterConfiguration { /* custom gson coder that this controller prefers to use instead of the framework ones */ protected CustomGsonCoder customGsonCoder; - /* custom jackson coder that this controller prefers to use instead of the framework ones */ - protected CustomJacksonCoder customJacksonCoder; - /** * Constructor. * - * @param decoderFilters list of decoders and associated filters * @param topic the topic + * @param decoderFilters list of decoders and associated filters + * @param customGsonCoder GSON coder */ public TopicCoderFilterConfiguration( String topic, List<PotentialCoderFilter> decoderFilters, - CustomGsonCoder customGsonCoder, - CustomJacksonCoder customJacksonCoder) { + CustomGsonCoder customGsonCoder) { this.coderFilters = decoderFilters; this.topic = topic; this.customGsonCoder = customGsonCoder; - this.customJacksonCoder = customJacksonCoder; } /** @@ -297,22 +275,6 @@ public class TopicCoderFilterConfiguration { this.customGsonCoder = customGsonCoder; } - /** Get custom jackson coder. - * - * @return the customJacksonCoder - **/ - public CustomJacksonCoder getCustomJacksonCoder() { - return customJacksonCoder; - } - - /** - * Set custom Jackson coder. - * @param customJacksonCoder the customJacksonCoder to set - **/ - public void setCustomJacksonCoder(CustomJacksonCoder customJacksonCoder) { - this.customJacksonCoder = customJacksonCoder; - } - @Override public String toString() { StringBuilder builder = new StringBuilder(); @@ -323,8 +285,6 @@ public class TopicCoderFilterConfiguration { .append(coderFilters) .append(", customGsonCoder=") .append(customGsonCoder) - .append(", customJacksonCoder=") - .append(customJacksonCoder) .append("]"); return builder.toString(); } diff --git a/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/EventProtocolCoderTest.java b/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/EventProtocolCoderTest.java index ec1b9994..682d2805 100644 --- a/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/EventProtocolCoderTest.java +++ b/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/EventProtocolCoderTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -88,7 +88,6 @@ public class EventProtocolCoderTest { EventProtocolParams.builder().groupId(ENCODER_GROUP).artifactId(ENCODER_ARTIFACT) .topic(NOOP_TOPIC).eventClass(DroolsConfiguration.class.getCanonicalName()) .protocolFilter(new JsonProtocolFilter()).customGsonCoder(null) - .customJacksonCoder(null) .modelClassLoaderHash(DroolsConfiguration.class.getName().hashCode())); final String json = EventProtocolCoder.manager.encode(NOOP_TOPIC, diff --git a/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolsetTest.java b/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolsetTest.java index d28f1e52..da491261 100644 --- a/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolsetTest.java +++ b/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolsetTest.java @@ -1,8 +1,8 @@ -/*- +/* * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,18 +20,14 @@ package org.onap.policy.drools.protocol.coders; -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.PropertyAccessor; import com.google.gson.Gson; import com.google.gson.GsonBuilder; - import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Properties; - import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -96,7 +92,6 @@ public class ProtocolCoderToolsetTest { public void testToolsets() { createController(); testGsonToolset(createFilterSet()); - testJacksonToolset(createFilterSet()); } /** @@ -129,28 +124,6 @@ public class ProtocolCoderToolsetTest { return new Triple<>("v1", "v2", "v3"); } - /** - * Test Jackson toolset. - * - * @param protocolFilter protocol filter - */ - public void testJacksonToolset(JsonProtocolFilter protocolFilter) { - JacksonProtocolCoderToolset jacksonToolset = new JacksonProtocolCoderToolset( - EventProtocolParams.builder() - .topic(JUNIT_PROTOCOL_CODER_TOPIC) - .groupId(this.releaseId.getGroupId()) - .artifactId(this.releaseId.getArtifactId()) - .eventClass(Triple.class.getCanonicalName()) - .protocolFilter(protocolFilter) - .customJacksonCoder(null) - .modelClassLoaderHash(12345678), CONTROLLER_ID); - - jacksonToolset.getEncoder().setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - jacksonToolset.getDecoder().setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - - testToolset(protocolFilter, jacksonToolset); - } - private void testToolset(JsonProtocolFilter protocolFilter, ProtocolCoderToolset coderToolset) { validateInitialization(protocolFilter, coderToolset); diff --git a/policy-management/src/test/java/org/onap/policy/drools/system/PolicyEngineTest.java b/policy-management/src/test/java/org/onap/policy/drools/system/PolicyEngineTest.java index 4a2767a8..dae409ee 100644 --- a/policy-management/src/test/java/org/onap/policy/drools/system/PolicyEngineTest.java +++ b/policy-management/src/test/java/org/onap/policy/drools/system/PolicyEngineTest.java @@ -208,7 +208,6 @@ public class PolicyEngineTest { EventProtocolParams.builder().groupId(ENCODER_GROUP).artifactId(ENCODER_ARTIFACT) .topic(NOOP_TOPIC).eventClass(DroolsConfiguration.class.getCanonicalName()) .protocolFilter(new JsonProtocolFilter()).customGsonCoder(null) - .customJacksonCoder(null) .modelClassLoaderHash(DroolsConfiguration.class.getName().hashCode())); assertTrue(PolicyEngine.manager.deliver(NOOP_TOPIC, |