METRON-1430: Isolate jackson from being used as arguments or returns from JSONUtils closes apache/metron#910
Project: http://git-wip-us.apache.org/repos/asf/metron/repo Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/878003a3 Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/878003a3 Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/878003a3 Branch: refs/heads/feature/METRON-1344-test-infrastructure Commit: 878003a3caf55380bd9e5898a9abe848586a278b Parents: 92c2e22 Author: cstella <ceste...@gmail.com> Authored: Fri Jan 26 15:43:35 2018 -0500 Committer: cstella <ceste...@gmail.com> Committed: Fri Jan 26 15:43:35 2018 -0500 ---------------------------------------------------------------------- .../metron/maas/functions/MaaSFunctions.java | 4 +- .../common/configuration/Configurations.java | 4 +- .../configuration/ConfigurationsUtils.java | 5 +- .../GlobalConfigurationOperations.java | 4 +- .../IndexingConfigurationOperations.java | 4 +- .../configuration/IndexingConfigurations.java | 4 +- .../apache/metron/common/utils/JSONUtils.java | 60 ++++++++++++++++---- .../apache/metron/common/utils/KafkaUtils.java | 5 +- .../configuration/StellarEnrichmentTest.java | 4 +- .../metron/common/utils/JSONUtilsTest.java | 14 ++--- .../ZKConfigurationsCacheIntegrationTest.java | 10 ++-- .../TransformFilterExtractorDecorator.java | 4 +- .../nonbulk/geo/GeoEnrichmentLoader.java | 4 +- .../bulk/ElasticsearchImportExport.java | 4 +- .../ElasticsearchSearchIntegrationTest.java | 6 ++ .../ElasticsearchUpdateIntegrationTest.java | 7 +-- .../components/ElasticSearchComponent.java | 4 +- .../enrichment/cli/LatencySummarizer.java | 3 +- .../integration/EnrichmentIntegrationTest.java | 6 +- .../apache/metron/indexing/dao/HBaseDao.java | 3 +- .../apache/metron/indexing/dao/IndexDao.java | 13 ++++- .../metron/indexing/dao/update/Document.java | 4 +- .../apache/metron/indexing/dao/InMemoryDao.java | 3 +- .../indexing/dao/SearchIntegrationTest.java | 6 +- .../HDFSIndexingIntegrationTest.java | 4 +- .../integration/IndexingIntegrationTest.java | 3 +- .../apache/metron/parsers/bolt/ParserBolt.java | 4 +- .../metron/parsers/json/JSONMapParser.java | 4 +- .../parsers/topology/ParserTopologyCLI.java | 4 +- .../parsers/topology/config/ConfigHandlers.java | 4 +- .../parsers/integration/ParserDriver.java | 4 +- .../integration/WriterBoltIntegrationTest.java | 3 +- .../common/benchmark/StellarMicrobenchmark.java | 4 +- .../common/configuration/ConfigurationType.java | 4 +- .../shell/DefaultStellarShellExecutor.java | 5 +- .../stellar/common/shell/cli/StellarShell.java | 3 +- .../metron/stellar/common/utils/JSONUtils.java | 43 ++++++++++++-- .../stellar/dsl/functions/StringFunctions.java | 27 +++++---- .../stellar/common/utils/JSONUtilsTest.java | 4 +- .../dsl/functions/StringFunctionsTest.java | 11 ++-- 40 files changed, 169 insertions(+), 147 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-analytics/metron-maas-common/src/main/java/org/apache/metron/maas/functions/MaaSFunctions.java ---------------------------------------------------------------------- diff --git a/metron-analytics/metron-maas-common/src/main/java/org/apache/metron/maas/functions/MaaSFunctions.java b/metron-analytics/metron-maas-common/src/main/java/org/apache/metron/maas/functions/MaaSFunctions.java index eacb64d..a260f25 100644 --- a/metron-analytics/metron-maas-common/src/main/java/org/apache/metron/maas/functions/MaaSFunctions.java +++ b/metron-analytics/metron-maas-common/src/main/java/org/apache/metron/maas/functions/MaaSFunctions.java @@ -17,7 +17,6 @@ */ package org.apache.metron.maas.functions; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import java.lang.invoke.MethodHandles; @@ -174,8 +173,7 @@ public class MaaSFunctions { URL u = new URL(url + "/" + modelFunction); String results = RESTUtil.INSTANCE.getRESTJSONResults(u, modelArgs); - ret = JSONUtils.INSTANCE.load(results, new TypeReference<Map<String, Object>>() { - }); + ret = JSONUtils.INSTANCE.load(results, JSONUtils.MAP_SUPPLIER); resultCache.put(cacheKey, ret); return ret; } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/Configurations.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/Configurations.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/Configurations.java index ecf8a1b..af421a9 100644 --- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/Configurations.java +++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/Configurations.java @@ -17,7 +17,6 @@ */ package org.apache.metron.common.configuration; -import com.fasterxml.jackson.core.type.TypeReference; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -61,8 +60,7 @@ public class Configurations implements Serializable { } public void updateGlobalConfig(InputStream io) throws IOException { - Map<String, Object> globalConfig = JSONUtils.INSTANCE.load(io, new TypeReference<Map<String, Object>>() { - }); + Map<String, Object> globalConfig = JSONUtils.INSTANCE.load(io, JSONUtils.MAP_SUPPLIER); updateGlobalConfig(globalConfig); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/ConfigurationsUtils.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/ConfigurationsUtils.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/ConfigurationsUtils.java index 5183788..a89db63 100644 --- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/ConfigurationsUtils.java +++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/ConfigurationsUtils.java @@ -596,10 +596,7 @@ public class ConfigurationsUtils { byte[] patchData, CuratorFramework client) throws Exception { byte[] configData = readConfigBytesFromZookeeper(configurationType, configName, client); - JsonNode source = JSONUtils.INSTANCE.readTree(configData); - JsonNode patch = JSONUtils.INSTANCE.readTree(patchData); - JsonNode patchedConfig = JSONUtils.INSTANCE.applyPatch(patch, source); - byte[] prettyPatchedConfig = JSONUtils.INSTANCE.toJSONPretty(patchedConfig); + byte[] prettyPatchedConfig = JSONUtils.INSTANCE.applyPatch(patchData, configData); // ensure the patch produces a valid result; otherwise exception thrown during deserialization String prettyPatchedConfigStr = new String(prettyPatchedConfig); http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/GlobalConfigurationOperations.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/GlobalConfigurationOperations.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/GlobalConfigurationOperations.java index 4842c91..581ec3e 100644 --- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/GlobalConfigurationOperations.java +++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/GlobalConfigurationOperations.java @@ -18,7 +18,6 @@ package org.apache.metron.common.configuration; -import com.fasterxml.jackson.core.type.TypeReference; import java.io.IOException; import java.util.Map; import org.apache.curator.framework.CuratorFramework; @@ -38,8 +37,7 @@ public class GlobalConfigurationOperations implements ConfigurationOperations { @Override public Object deserialize(String s) throws IOException { - return JSONUtils.INSTANCE.load(s, new TypeReference<Map<String, Object>>() { - }); + return JSONUtils.INSTANCE.load(s, JSONUtils.MAP_SUPPLIER); } @Override http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/IndexingConfigurationOperations.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/IndexingConfigurationOperations.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/IndexingConfigurationOperations.java index a75c84e..7884e4d 100644 --- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/IndexingConfigurationOperations.java +++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/IndexingConfigurationOperations.java @@ -18,7 +18,6 @@ package org.apache.metron.common.configuration; -import com.fasterxml.jackson.core.type.TypeReference; import java.io.IOException; import java.util.Map; import org.apache.curator.framework.CuratorFramework; @@ -33,8 +32,7 @@ public class IndexingConfigurationOperations implements ConfigurationOperations @Override public Object deserialize(String s) throws IOException { - return JSONUtils.INSTANCE.load(s, new TypeReference<Map<String, Object>>() { - }); + return JSONUtils.INSTANCE.load(s, JSONUtils.MAP_SUPPLIER); } @Override http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/IndexingConfigurations.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/IndexingConfigurations.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/IndexingConfigurations.java index 003b6df..7ef9f00 100644 --- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/IndexingConfigurations.java +++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/configuration/IndexingConfigurations.java @@ -17,7 +17,6 @@ */ package org.apache.metron.common.configuration; -import com.fasterxml.jackson.core.type.TypeReference; import org.apache.metron.stellar.common.utils.ConversionUtils; import org.apache.metron.common.utils.JSONUtils; @@ -77,8 +76,7 @@ public class IndexingConfigurations extends Configurations { } public void updateSensorIndexingConfig(String sensorType, InputStream io) throws IOException { - Map<String, Object> sensorIndexingConfig = JSONUtils.INSTANCE.load(io, new TypeReference<Map<String, Object>>() { - }); + Map<String, Object> sensorIndexingConfig = JSONUtils.INSTANCE.load(io, JSONUtils.MAP_SUPPLIER); updateSensorIndexingConfig(sensorType, sensorIndexingConfig); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-common/src/main/java/org/apache/metron/common/utils/JSONUtils.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/utils/JSONUtils.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/utils/JSONUtils.java index 280b167..135546d 100644 --- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/utils/JSONUtils.java +++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/utils/JSONUtils.java @@ -29,6 +29,15 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; + +import com.google.common.reflect.TypeToken; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; @@ -36,6 +45,31 @@ import org.json.simple.parser.ParseException; public enum JSONUtils { INSTANCE; + public static class ReferenceSupplier<T> implements Supplier<TypeReference<T>> { + Type type; + protected ReferenceSupplier() { + Type superClass = this.getClass().getGenericSuperclass(); + if(superClass instanceof Class) { + throw new IllegalArgumentException("Internal error: ReferenceSupplier constructed without actual type information"); + } else { + this.type = ((ParameterizedType)superClass).getActualTypeArguments()[0]; + } + } + + @Override + public TypeReference<T> get() { + return new TypeReference<T>() { + @Override + public Type getType() { + return type; + } + }; + } + } + + public final static ReferenceSupplier<Map<String, Object>> MAP_SUPPLIER = new ReferenceSupplier<Map<String, Object>>() {}; + public final static ReferenceSupplier<List<Object>> LIST_SUPPLIER = new ReferenceSupplier<List<Object>>(){}; + private static ThreadLocal<JSONParser> _parser = ThreadLocal.withInitial(() -> new JSONParser()); @@ -51,17 +85,17 @@ public enum JSONUtils { } - public <T> T load(InputStream is, TypeReference<T> ref) throws IOException { - return _mapper.get().readValue(is, ref); + public <T> T load(InputStream is, ReferenceSupplier<T> ref) throws IOException { + return _mapper.get().readValue(is, (TypeReference<T>)ref.get()); } - public <T> T load(String is, TypeReference<T> ref) throws IOException { - return _mapper.get().readValue(is, ref); + public <T> T load(String is, ReferenceSupplier<T> ref) throws IOException { + return _mapper.get().readValue(is, (TypeReference<T>)ref.get()); } - public <T> T load(File f, TypeReference<T> ref) throws IOException { + public <T> T load(File f, ReferenceSupplier<T> ref) throws IOException { try (InputStream is = new BufferedInputStream(new FileInputStream(f))) { - return _mapper.get().readValue(is, ref); + return _mapper.get().readValue(is, (TypeReference<T>)ref.get()); } } @@ -108,7 +142,7 @@ public enum JSONUtils { * @param json JSON value to deserialize * @return deserialized JsonNode Object */ - public JsonNode readTree(String json) throws IOException { + JsonNode readTree(String json) throws IOException { return _mapper.get().readTree(json); } @@ -118,7 +152,7 @@ public enum JSONUtils { * @param json JSON value to deserialize * @return deserialized JsonNode Object */ - public JsonNode readTree(byte[] json) throws IOException { + JsonNode readTree(byte[] json) throws IOException { return _mapper.get().readTree(json); } @@ -138,14 +172,16 @@ public enum JSONUtils { * @param source Source JSON to apply patch to * @return new json after applying the patch */ - public JsonNode applyPatch(String patch, String source) throws IOException { + public byte[] applyPatch(String patch, String source) throws IOException { JsonNode patchNode = readTree(patch); JsonNode sourceNode = readTree(source); - return applyPatch(patchNode, sourceNode); + return toJSONPretty(JsonPatch.apply(patchNode, sourceNode)); } - public JsonNode applyPatch(JsonNode patch, JsonNode source) throws IOException { - return JsonPatch.apply(patch, source); + public byte[] applyPatch(byte[] patch, byte[] source) throws IOException { + JsonNode patchNode = readTree(patch); + JsonNode sourceNode = readTree(source); + return toJSONPretty(JsonPatch.apply(patchNode, sourceNode)); } } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-common/src/main/java/org/apache/metron/common/utils/KafkaUtils.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/utils/KafkaUtils.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/utils/KafkaUtils.java index a26a3bb..d54e2b8 100644 --- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/utils/KafkaUtils.java +++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/utils/KafkaUtils.java @@ -18,7 +18,7 @@ package org.apache.metron.common.utils; -import com.fasterxml.jackson.core.type.TypeReference; +import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; import org.apache.curator.RetryPolicy; @@ -48,8 +48,7 @@ public enum KafkaUtils { for(String id : client.getChildren().forPath("/brokers/ids")) { byte[] data = client.getData().forPath("/brokers/ids/" + id); String brokerInfoStr = new String(data); - Map<String, Object> brokerInfo = JSONUtils.INSTANCE.load(brokerInfoStr, new TypeReference<Map<String, Object>>() { - }); + Map<String, Object> brokerInfo = JSONUtils.INSTANCE.load(brokerInfoStr, JSONUtils.MAP_SUPPLIER); String host = (String) brokerInfo.get("host"); if(host != null) { ret.add(host + ":" + brokerInfo.get("port")); http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-common/src/test/java/org/apache/metron/common/configuration/StellarEnrichmentTest.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-common/src/test/java/org/apache/metron/common/configuration/StellarEnrichmentTest.java b/metron-platform/metron-common/src/test/java/org/apache/metron/common/configuration/StellarEnrichmentTest.java index 8eb9bbc..60a7d82 100644 --- a/metron-platform/metron-common/src/test/java/org/apache/metron/common/configuration/StellarEnrichmentTest.java +++ b/metron-platform/metron-common/src/test/java/org/apache/metron/common/configuration/StellarEnrichmentTest.java @@ -17,7 +17,6 @@ */ package org.apache.metron.common.configuration; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.collect.ImmutableList; import org.adrianwalker.multilinestring.Multiline; import org.apache.metron.common.utils.JSONUtils; @@ -221,8 +220,7 @@ public class StellarEnrichmentTest { public static String message; public static JSONObject getMessage() throws IOException { - Map<String, Object> ret = JSONUtils.INSTANCE.load(message, new TypeReference<Map<String, Object>>() { - }); + Map<String, Object> ret = JSONUtils.INSTANCE.load(message, JSONUtils.MAP_SUPPLIER); return new JSONObject(ret); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-common/src/test/java/org/apache/metron/common/utils/JSONUtilsTest.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-common/src/test/java/org/apache/metron/common/utils/JSONUtilsTest.java b/metron-platform/metron-common/src/test/java/org/apache/metron/common/utils/JSONUtilsTest.java index 7f4846e..4676591 100644 --- a/metron-platform/metron-common/src/test/java/org/apache/metron/common/utils/JSONUtilsTest.java +++ b/metron-platform/metron-common/src/test/java/org/apache/metron/common/utils/JSONUtilsTest.java @@ -21,7 +21,6 @@ package org.apache.metron.common.utils; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; -import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import java.io.File; import java.io.IOException; @@ -56,8 +55,7 @@ public class JSONUtilsTest { put("b", "world"); }}; Map<String, Object> actual = JSONUtils.INSTANCE - .load(configFile, new TypeReference<Map<String, Object>>() { - }); + .load(configFile, JSONUtils.MAP_SUPPLIER); assertThat("config not equal", actual, equalTo(expected)); } @@ -123,9 +121,8 @@ public class JSONUtilsTest { @Test public void applyPatch_modifies_source_json_doc() throws IOException { - JsonNode actual = JSONUtils.INSTANCE.applyPatch(patchJson, sourceJson); - JsonNode expected = JSONUtils.INSTANCE.readTree(expectedJson); - assertThat(actual, equalTo(expected)); + String actual = new String(JSONUtils.INSTANCE.applyPatch(patchJson, sourceJson)); + assertThat(JSONUtils.INSTANCE.load(actual, JSONUtils.MAP_SUPPLIER), equalTo(JSONUtils.INSTANCE.load(expectedJson, JSONUtils.MAP_SUPPLIER))); } /** @@ -160,9 +157,8 @@ public class JSONUtilsTest { @Test public void applyPatch_modifies_complex_source_json_doc() throws IOException { - JsonNode actual = JSONUtils.INSTANCE.applyPatch(patchComplexJson, complexJson); - JsonNode expected = JSONUtils.INSTANCE.readTree(expectedComplexJson); - assertThat(actual, equalTo(expected)); + String actual = new String(JSONUtils.INSTANCE.applyPatch(patchComplexJson, complexJson)); + assertThat(JSONUtils.INSTANCE.load(actual, JSONUtils.MAP_SUPPLIER), equalTo(JSONUtils.INSTANCE.load(expectedComplexJson, JSONUtils.MAP_SUPPLIER))); } } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-common/src/test/java/org/apache/metron/common/zookeeper/ZKConfigurationsCacheIntegrationTest.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-common/src/test/java/org/apache/metron/common/zookeeper/ZKConfigurationsCacheIntegrationTest.java b/metron-platform/metron-common/src/test/java/org/apache/metron/common/zookeeper/ZKConfigurationsCacheIntegrationTest.java index 64bf986..ec4a98a 100644 --- a/metron-platform/metron-common/src/test/java/org/apache/metron/common/zookeeper/ZKConfigurationsCacheIntegrationTest.java +++ b/metron-platform/metron-common/src/test/java/org/apache/metron/common/zookeeper/ZKConfigurationsCacheIntegrationTest.java @@ -17,7 +17,6 @@ */ package org.apache.metron.common.zookeeper; -import com.fasterxml.jackson.core.type.TypeReference; import org.adrianwalker.multilinestring.Multiline; import org.apache.commons.io.IOUtils; import org.apache.curator.framework.CuratorFramework; @@ -226,14 +225,14 @@ public class ZKConfigurationsCacheIntegrationTest { ConfigurationsUtils.writeProfilerConfigToZookeeper( profilerConfig.getBytes(), client); //indexing { - Map<String, Object> expectedConfig = JSONUtils.INSTANCE.load(testIndexingConfig, new TypeReference<Map<String, Object>>() {}); + Map<String, Object> expectedConfig = JSONUtils.INSTANCE.load(testIndexingConfig, JSONUtils.MAP_SUPPLIER); IndexingConfigurations config = cache.get( IndexingConfigurations.class); assertEventually(() -> Assert.assertEquals(expectedConfig, config.getSensorIndexingConfig("test"))); } //enrichment { SensorEnrichmentConfig expectedConfig = JSONUtils.INSTANCE.load(testEnrichmentConfig, SensorEnrichmentConfig.class); - Map<String, Object> expectedGlobalConfig = JSONUtils.INSTANCE.load(globalConfig, new TypeReference<Map<String, Object>>() {}); + Map<String, Object> expectedGlobalConfig = JSONUtils.INSTANCE.load(globalConfig, JSONUtils.MAP_SUPPLIER); EnrichmentConfigurations config = cache.get( EnrichmentConfigurations.class); assertEventually(() -> Assert.assertEquals(expectedConfig, config.getSensorEnrichmentConfig("test"))); assertEventually(() -> Assert.assertEquals(expectedGlobalConfig, config.getGlobalConfig())); @@ -255,12 +254,11 @@ public class ZKConfigurationsCacheIntegrationTest { @Test public void validateBaseWrite() throws Exception { File globalConfigFile = new File(TestConstants.SAMPLE_CONFIG_PATH + "/global.json"); - Map<String, Object> expectedGlobalConfig = JSONUtils.INSTANCE.load(globalConfigFile, new TypeReference<Map<String, Object>>() { }); + Map<String, Object> expectedGlobalConfig = JSONUtils.INSTANCE.load(globalConfigFile, JSONUtils.MAP_SUPPLIER); //indexing { File inFile = new File(TestConstants.SAMPLE_CONFIG_PATH + "/indexing/test.json"); - Map<String, Object> expectedConfig = JSONUtils.INSTANCE.load(inFile, new TypeReference<Map<String, Object>>() { - }); + Map<String, Object> expectedConfig = JSONUtils.INSTANCE.load(inFile, JSONUtils.MAP_SUPPLIER); IndexingConfigurations config = cache.get( IndexingConfigurations.class); assertEventually(() -> Assert.assertEquals(expectedConfig, config.getSensorIndexingConfig("test"))); assertEventually(() -> Assert.assertEquals(expectedGlobalConfig, config.getGlobalConfig())); http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-data-management/src/main/java/org/apache/metron/dataloads/extractor/TransformFilterExtractorDecorator.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-data-management/src/main/java/org/apache/metron/dataloads/extractor/TransformFilterExtractorDecorator.java b/metron-platform/metron-data-management/src/main/java/org/apache/metron/dataloads/extractor/TransformFilterExtractorDecorator.java index c47dfc6..b665a01 100644 --- a/metron-platform/metron-data-management/src/main/java/org/apache/metron/dataloads/extractor/TransformFilterExtractorDecorator.java +++ b/metron-platform/metron-data-management/src/main/java/org/apache/metron/dataloads/extractor/TransformFilterExtractorDecorator.java @@ -17,7 +17,6 @@ */ package org.apache.metron.dataloads.extractor; -import com.fasterxml.jackson.core.type.TypeReference; import java.io.ByteArrayInputStream; import java.io.IOException; import java.lang.invoke.MethodHandles; @@ -208,8 +207,7 @@ public class TransformFilterExtractorDecorator extends ExtractorDecorator implem try { return JSONUtils.INSTANCE.load( new ByteArrayInputStream(ConfigurationsUtils.readGlobalConfigBytesFromZookeeper(zkClient.get())), - new TypeReference<Map<String, Object>>() { - }); + JSONUtils.MAP_SUPPLIER); } catch (Exception e) { LOG.warn("Exception thrown while attempting to get global config from Zookeeper.", e); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-data-management/src/main/java/org/apache/metron/dataloads/nonbulk/geo/GeoEnrichmentLoader.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-data-management/src/main/java/org/apache/metron/dataloads/nonbulk/geo/GeoEnrichmentLoader.java b/metron-platform/metron-data-management/src/main/java/org/apache/metron/dataloads/nonbulk/geo/GeoEnrichmentLoader.java index 322edec..b366015 100644 --- a/metron-platform/metron-data-management/src/main/java/org/apache/metron/dataloads/nonbulk/geo/GeoEnrichmentLoader.java +++ b/metron-platform/metron-data-management/src/main/java/org/apache/metron/dataloads/nonbulk/geo/GeoEnrichmentLoader.java @@ -18,7 +18,6 @@ package org.apache.metron.dataloads.nonbulk.geo; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Function; import com.google.common.base.Joiner; import org.apache.commons.cli.*; @@ -200,8 +199,7 @@ public class GeoEnrichmentLoader { // Fetch the global configuration Map<String, Object> global = JSONUtils.INSTANCE.load( new ByteArrayInputStream(ConfigurationsUtils.readGlobalConfigBytesFromZookeeper(client)), - new TypeReference<Map<String, Object>>() { - }); + JSONUtils.MAP_SUPPLIER); // Update the global config and push it back global.put(GeoLiteDatabase.GEO_HDFS_FILE, dstPath.toString() + "/" + srcPath.getName()); http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-elasticsearch/src/main/java/org/apache/metron/elasticsearch/bulk/ElasticsearchImportExport.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-elasticsearch/src/main/java/org/apache/metron/elasticsearch/bulk/ElasticsearchImportExport.java b/metron-platform/metron-elasticsearch/src/main/java/org/apache/metron/elasticsearch/bulk/ElasticsearchImportExport.java index 0a04dfc..77e0d61 100644 --- a/metron-platform/metron-elasticsearch/src/main/java/org/apache/metron/elasticsearch/bulk/ElasticsearchImportExport.java +++ b/metron-platform/metron-elasticsearch/src/main/java/org/apache/metron/elasticsearch/bulk/ElasticsearchImportExport.java @@ -18,7 +18,6 @@ package org.apache.metron.elasticsearch.bulk; -import com.fasterxml.jackson.core.type.TypeReference; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; @@ -71,8 +70,7 @@ public class ElasticsearchImportExport { String line; while ((line = br.readLine()) != null) { Map<String, Object> inDoc = JSONUtils.INSTANCE - .load(line, new TypeReference<Map<String, Object>>() { - }); + .load(line, JSONUtils.MAP_SUPPLIER); Object id = inDoc.get("_id"); Object type = inDoc.get("_type"); String createRaw = String http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/ElasticsearchSearchIntegrationTest.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/ElasticsearchSearchIntegrationTest.java b/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/ElasticsearchSearchIntegrationTest.java index f86a04d..1bc5b6e 100644 --- a/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/ElasticsearchSearchIntegrationTest.java +++ b/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/ElasticsearchSearchIntegrationTest.java @@ -21,13 +21,16 @@ package org.apache.metron.elasticsearch.integration; import java.io.File; import java.io.IOException; import java.util.HashMap; +import java.util.List; import java.util.concurrent.ExecutionException; import org.adrianwalker.multilinestring.Multiline; +import org.apache.metron.common.utils.JSONUtils; import org.apache.metron.elasticsearch.dao.ElasticsearchDao; import org.apache.metron.elasticsearch.integration.components.ElasticSearchComponent; import org.apache.metron.indexing.dao.AccessConfig; import org.apache.metron.indexing.dao.IndexDao; import org.apache.metron.indexing.dao.SearchIntegrationTest; +import org.apache.metron.indexing.dao.search.GetRequest; import org.apache.metron.integration.InMemoryComponent; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.bulk.BulkResponse; @@ -37,6 +40,7 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; +import org.junit.Test; public class ElasticsearchSearchIntegrationTest extends SearchIntegrationTest { @@ -233,4 +237,6 @@ public class ElasticsearchSearchIntegrationTest extends SearchIntegrationTest { throw new RuntimeException("Failed to index test data"); } } + + } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/ElasticsearchUpdateIntegrationTest.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/ElasticsearchUpdateIntegrationTest.java b/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/ElasticsearchUpdateIntegrationTest.java index 116ee4b..325d42e 100644 --- a/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/ElasticsearchUpdateIntegrationTest.java +++ b/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/ElasticsearchUpdateIntegrationTest.java @@ -18,7 +18,6 @@ package org.apache.metron.elasticsearch.integration; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.collect.Iterables; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; @@ -158,7 +157,7 @@ public class ElasticsearchUpdateIntegrationTest { Assert.assertEquals(1, columns.size()); Assert.assertEquals(message0 , JSONUtils.INSTANCE.load(new String(columns.lastEntry().getValue()) - , new TypeReference<Map<String, Object>>() {}) + , JSONUtils.MAP_SUPPLIER) ); } { @@ -195,10 +194,10 @@ public class ElasticsearchUpdateIntegrationTest { NavigableMap<byte[], byte[]> columns = r.getFamilyMap(CF.getBytes()); Assert.assertEquals(2, columns.size()); Assert.assertEquals(message0, JSONUtils.INSTANCE.load(new String(columns.lastEntry().getValue()) - , new TypeReference<Map<String, Object>>() {}) + , JSONUtils.MAP_SUPPLIER) ); Assert.assertNotEquals(message0, JSONUtils.INSTANCE.load(new String(columns.firstEntry().getValue()) - , new TypeReference<Map<String, Object>>() {}) + , JSONUtils.MAP_SUPPLIER) ); } { http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/components/ElasticSearchComponent.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/components/ElasticSearchComponent.java b/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/components/ElasticSearchComponent.java index f95ef21..e716ce1 100644 --- a/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/components/ElasticSearchComponent.java +++ b/metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/integration/components/ElasticSearchComponent.java @@ -19,7 +19,6 @@ package org.apache.metron.elasticsearch.integration.components; import static java.util.Arrays.asList; -import com.fasterxml.jackson.core.type.TypeReference; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -210,8 +209,7 @@ public class ElasticSearchComponent implements InMemoryComponent { indexRequestBuilder = indexRequestBuilder.setSource(doc); Map<String, Object> esDoc = JSONUtils.INSTANCE - .load(doc, new TypeReference<Map<String, Object>>() { - }); + .load(doc, JSONUtils.MAP_SUPPLIER); indexRequestBuilder.setId((String) esDoc.get(Constants.GUID)); Object ts = esDoc.get("timestamp"); if (ts != null) { http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-enrichment/src/main/java/org/apache/metron/enrichment/cli/LatencySummarizer.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-enrichment/src/main/java/org/apache/metron/enrichment/cli/LatencySummarizer.java b/metron-platform/metron-enrichment/src/main/java/org/apache/metron/enrichment/cli/LatencySummarizer.java index b40f2ad..2e5e8bf 100644 --- a/metron-platform/metron-enrichment/src/main/java/org/apache/metron/enrichment/cli/LatencySummarizer.java +++ b/metron-platform/metron-enrichment/src/main/java/org/apache/metron/enrichment/cli/LatencySummarizer.java @@ -17,7 +17,6 @@ */ package org.apache.metron.enrichment.cli; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; @@ -181,7 +180,7 @@ public class LatencySummarizer { LatencyStats statsMap = new LatencyStats(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); for(String line = null;(line = reader.readLine()) != null;) { - Map<String, Object> doc = JSONUtils.INSTANCE.load(line, new TypeReference<HashMap<String, Object>>() {}); + Map<String, Object> doc = JSONUtils.INSTANCE.load(line, JSONUtils.MAP_SUPPLIER); updateStats(statsMap, doc); } statsMap.printSummary(cmd.hasOption('m')); http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/integration/EnrichmentIntegrationTest.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/integration/EnrichmentIntegrationTest.java b/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/integration/EnrichmentIntegrationTest.java index c457e86..828f4e3 100644 --- a/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/integration/EnrichmentIntegrationTest.java +++ b/metron-platform/metron-enrichment/src/test/java/org/apache/metron/enrichment/integration/EnrichmentIntegrationTest.java @@ -24,7 +24,6 @@ import static org.apache.metron.enrichment.bolt.ThreatIntelJoinBolt.THREAT_TRIAG import static org.apache.metron.enrichment.bolt.ThreatIntelJoinBolt.THREAT_TRIAGE_RULE_SCORE; import static org.apache.metron.enrichment.bolt.ThreatIntelJoinBolt.THREAT_TRIAGE_SCORE_KEY; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Predicate; @@ -163,8 +162,7 @@ public class EnrichmentIntegrationTest extends BaseIntegrationTest { String globalConfigStr = null; { File globalConfig = new File(new File(TestConstants.SAMPLE_CONFIG_PATH), "global.json"); - Map<String, Object> config = JSONUtils.INSTANCE.load(globalConfig, new TypeReference<Map<String, Object>>() { - }); + Map<String, Object> config = JSONUtils.INSTANCE.load(globalConfig, JSONUtils.MAP_SUPPLIER); config.put(SimpleHBaseEnrichmentFunctions.TABLE_PROVIDER_TYPE_CONF, MockHBaseTableProvider.class.getName()); config.put(SimpleHBaseEnrichmentFunctions.ACCESS_TRACKER_TYPE_CONF, "PERSISTENT_BLOOM"); config.put(PersistentBloomTrackerCreator.Config.PERSISTENT_BLOOM_TABLE, trackerHBaseTableName); @@ -531,7 +529,7 @@ public class EnrichmentIntegrationTest extends BaseIntegrationTest { , message -> { try { return new HashMap<>(JSONUtils.INSTANCE.load(new String(message) - , new TypeReference<Map<String, Object>>() {} + , JSONUtils.MAP_SUPPLIER ) ); } catch (Exception ex) { http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/HBaseDao.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/HBaseDao.java b/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/HBaseDao.java index 72f2980..ebb9907 100644 --- a/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/HBaseDao.java +++ b/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/HBaseDao.java @@ -18,7 +18,6 @@ package org.apache.metron.indexing.dao; -import com.fasterxml.jackson.core.type.TypeReference; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -210,7 +209,7 @@ public class HBaseDao implements IndexDao { Long ts = Bytes.toLong(entry.getKey()); if(entry.getValue()!= null) { Map<String, Object> json = JSONUtils.INSTANCE.load(new String(entry.getValue()), - new TypeReference<Map<String, Object>>() {}); + JSONUtils.MAP_SUPPLIER); try { Key k = Key.fromBytes(result.getRow()); return new Document(json, k.getGuid(), k.getSensorType(), ts); http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/IndexDao.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/IndexDao.java b/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/IndexDao.java index 03d348a..2c057d4 100644 --- a/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/IndexDao.java +++ b/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/IndexDao.java @@ -17,12 +17,16 @@ */ package org.apache.metron.indexing.dao; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Optional; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.flipkart.zjsonpatch.JsonPatch; import org.apache.metron.common.utils.JSONUtils; import org.apache.metron.indexing.dao.search.FieldType; import org.apache.metron.indexing.dao.search.GetRequest; @@ -42,6 +46,9 @@ import org.apache.metron.indexing.dao.update.ReplaceRequest; */ public interface IndexDao { + public static ThreadLocal<ObjectMapper> _mapper = ThreadLocal.withInitial(() -> + new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL)); + /** * Return search response based on the search request * @@ -140,9 +147,9 @@ public interface IndexDao { throw new OriginalNotFoundException("Unable to patch an document that doesn't exist and isn't specified."); } } - JsonNode originalNode = JSONUtils.INSTANCE.convert(latest, JsonNode.class); - JsonNode patched = JSONUtils.INSTANCE.applyPatch(request.getPatch(), originalNode); - Map<String, Object> updated = JSONUtils.INSTANCE.getMapper() + JsonNode originalNode = _mapper.get().convertValue(latest, JsonNode.class); + JsonNode patched = JsonPatch.apply(request.getPatch(), originalNode); + Map<String, Object> updated = _mapper.get() .convertValue(patched, new TypeReference<Map<String, Object>>() {}); return new Document( updated , request.getGuid() http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/update/Document.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/update/Document.java b/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/update/Document.java index b5fcb02..6f2f779 100644 --- a/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/update/Document.java +++ b/metron-platform/metron-indexing/src/main/java/org/apache/metron/indexing/dao/update/Document.java @@ -18,7 +18,6 @@ package org.apache.metron.indexing.dao.update; -import com.fasterxml.jackson.core.type.TypeReference; import org.apache.metron.common.utils.JSONUtils; import java.io.IOException; @@ -47,8 +46,7 @@ public class Document { } private static Map<String, Object> convertDoc(String document) throws IOException { - return JSONUtils.INSTANCE.load(document, new TypeReference<Map<String, Object>>() { - }); + return JSONUtils.INSTANCE.load(document, JSONUtils.MAP_SUPPLIER); } public String getSensorType() { http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/InMemoryDao.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/InMemoryDao.java b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/InMemoryDao.java index 002ec28..79c3bb3 100644 --- a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/InMemoryDao.java +++ b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/InMemoryDao.java @@ -17,7 +17,6 @@ */ package org.apache.metron.indexing.dao; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Splitter; import com.google.common.collect.ComparisonChain; import com.google.common.collect.Iterables; @@ -193,7 +192,7 @@ public class InMemoryDao implements IndexDao { public static Map<String, Object> parse(String doc) { try { - return JSONUtils.INSTANCE.load(doc, new TypeReference<Map<String, Object>>() {}); + return JSONUtils.INSTANCE.load(doc, JSONUtils.MAP_SUPPLIER); } catch (IOException e) { throw new IllegalStateException(e.getMessage(), e); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/SearchIntegrationTest.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/SearchIntegrationTest.java b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/SearchIntegrationTest.java index f381688..b40db46 100644 --- a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/SearchIntegrationTest.java +++ b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/dao/SearchIntegrationTest.java @@ -18,7 +18,6 @@ */ package org.apache.metron.indexing.dao; -import com.fasterxml.jackson.core.type.TypeReference; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -464,8 +463,7 @@ public abstract class SearchIntegrationTest { @Test public void get_all_latest_guid() throws Exception { - List<GetRequest> request = JSONUtils.INSTANCE.load(getAllLatestQuery, new TypeReference<List<GetRequest>>() { - }); + List<GetRequest> request = JSONUtils.INSTANCE.load(getAllLatestQuery, new JSONUtils.ReferenceSupplier<List<GetRequest>>(){}); Map<String, Document> docs = new HashMap<>(); for(Document doc : dao.getAllLatest(request)) { @@ -945,4 +943,4 @@ public abstract class SearchIntegrationTest { protected abstract IndexDao createDao() throws Exception; protected abstract InMemoryComponent startIndex() throws Exception; protected abstract void loadTestData() throws Exception; -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/integration/HDFSIndexingIntegrationTest.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/integration/HDFSIndexingIntegrationTest.java b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/integration/HDFSIndexingIntegrationTest.java index ab5cc3f..b8af6a3 100644 --- a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/integration/HDFSIndexingIntegrationTest.java +++ b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/integration/HDFSIndexingIntegrationTest.java @@ -18,7 +18,6 @@ package org.apache.metron.indexing.integration; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Function; import com.google.common.collect.Iterables; import org.apache.metron.common.interfaces.FieldNameConverter; @@ -75,8 +74,7 @@ public class HDFSIndexingIntegrationTest extends IndexingIntegrationTest { Iterables.addAll(ret, Iterables.transform(data, bytes -> { String s = new String(bytes); try { - return JSONUtils.INSTANCE.load(s, new TypeReference<Map<String, Object>>() { - }); + return JSONUtils.INSTANCE.load(s,JSONUtils.MAP_SUPPLIER); } catch (IOException e) { throw new RuntimeException(e); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/integration/IndexingIntegrationTest.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/integration/IndexingIntegrationTest.java b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/integration/IndexingIntegrationTest.java index b0b6cc2..1671ab3 100644 --- a/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/integration/IndexingIntegrationTest.java +++ b/metron-platform/metron-indexing/src/test/java/org/apache/metron/indexing/integration/IndexingIntegrationTest.java @@ -18,7 +18,6 @@ package org.apache.metron.indexing.integration; -import com.fasterxml.jackson.core.type.TypeReference; import org.apache.curator.framework.CuratorFramework; import org.apache.metron.TestConstants; import org.apache.metron.common.Constants; @@ -81,7 +80,7 @@ public abstract class IndexingIntegrationTest extends BaseIntegrationTest { }}); List<Map<String, Object>> inputDocs = new ArrayList<>(); for(byte[] b : inputMessages) { - Map<String, Object> m = JSONUtils.INSTANCE.load(new String(b), new TypeReference<Map<String, Object>>() {}); + Map<String, Object> m = JSONUtils.INSTANCE.load(new String(b), JSONUtils.MAP_SUPPLIER); inputDocs.add(m); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/bolt/ParserBolt.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/bolt/ParserBolt.java b/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/bolt/ParserBolt.java index 99785b2..6fc4ed7 100644 --- a/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/bolt/ParserBolt.java +++ b/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/bolt/ParserBolt.java @@ -19,7 +19,6 @@ package org.apache.metron.parsers.bolt; import static org.apache.metron.common.Constants.METADATA_PREFIX; -import com.fasterxml.jackson.core.type.TypeReference; import java.io.IOException; import java.io.Serializable; import java.lang.invoke.MethodHandles; @@ -146,8 +145,7 @@ public class ParserBolt extends ConfiguredParserBolt implements Serializable { try { keyStr = keyObj == null?null:new String(keyObj); if(!StringUtils.isEmpty(keyStr)) { - Map<String, Object> metadata = JSONUtils.INSTANCE.load(keyStr, new TypeReference<Map<String, Object>>() { - }); + Map<String, Object> metadata = JSONUtils.INSTANCE.load(keyStr,JSONUtils.MAP_SUPPLIER); for(Map.Entry<String, Object> kv : metadata.entrySet()) { ret.put(METADATA_PREFIX + kv.getKey(), kv.getValue()); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/json/JSONMapParser.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/json/JSONMapParser.java b/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/json/JSONMapParser.java index 5d82456..7e5468f 100644 --- a/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/json/JSONMapParser.java +++ b/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/json/JSONMapParser.java @@ -17,7 +17,6 @@ */ package org.apache.metron.parsers.json; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import org.apache.metron.common.utils.JSONUtils; @@ -96,8 +95,7 @@ public class JSONMapParser extends BasicParser { try { String originalString = new String(rawMessage); //convert the JSON blob into a String -> Object map - Map<String, Object> rawMap = JSONUtils.INSTANCE.load(originalString, new TypeReference<Map<String, Object>>() { - }); + Map<String, Object> rawMap = JSONUtils.INSTANCE.load(originalString, JSONUtils.MAP_SUPPLIER); JSONObject ret = normalizeJSON(rawMap); ret.put("original_string", originalString ); if(!ret.containsKey("timestamp")) { http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/topology/ParserTopologyCLI.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/topology/ParserTopologyCLI.java b/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/topology/ParserTopologyCLI.java index 4ce0508..3824212 100644 --- a/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/topology/ParserTopologyCLI.java +++ b/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/topology/ParserTopologyCLI.java @@ -24,7 +24,6 @@ import org.apache.storm.Config; import org.apache.storm.LocalCluster; import org.apache.storm.StormSubmitter; import org.apache.storm.utils.Utils; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Joiner; import org.apache.commons.cli.*; import org.apache.commons.io.FileUtils; @@ -492,8 +491,7 @@ public class ParserTopologyCLI { throw new IllegalArgumentException("Unable to load JSON file at " + inputFile.getAbsolutePath()); } try { - return JSONUtils.INSTANCE.load(json, new TypeReference<Map<String, Object>>() { - }); + return JSONUtils.INSTANCE.load(json, JSONUtils.MAP_SUPPLIER); } catch (IOException e) { throw new IllegalStateException("Unable to process JSON.", e); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/topology/config/ConfigHandlers.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/topology/config/ConfigHandlers.java b/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/topology/config/ConfigHandlers.java index f6c04a6..8d98922 100644 --- a/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/topology/config/ConfigHandlers.java +++ b/metron-platform/metron-parsers/src/main/java/org/apache/metron/parsers/topology/config/ConfigHandlers.java @@ -19,7 +19,6 @@ package org.apache.metron.parsers.topology.config; import org.apache.storm.Config; -import com.fasterxml.jackson.core.type.TypeReference; import org.apache.commons.io.FileUtils; import org.apache.metron.common.utils.JSONUtils; @@ -81,8 +80,7 @@ public class ConfigHandlers { json = arg.getArg(); } try { - arg.getConfig().putAll(JSONUtils.INSTANCE.load(json, new TypeReference<Map<String, Object>>() { - })); + arg.getConfig().putAll(JSONUtils.INSTANCE.load(json, JSONUtils.MAP_SUPPLIER)); } catch (IOException e) { throw new IllegalStateException("Unable to process JSON snippet.", e); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-parsers/src/test/java/org/apache/metron/parsers/integration/ParserDriver.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-parsers/src/test/java/org/apache/metron/parsers/integration/ParserDriver.java b/metron-platform/metron-parsers/src/test/java/org/apache/metron/parsers/integration/ParserDriver.java index b844104..deb0217 100644 --- a/metron-platform/metron-parsers/src/test/java/org/apache/metron/parsers/integration/ParserDriver.java +++ b/metron-platform/metron-parsers/src/test/java/org/apache/metron/parsers/integration/ParserDriver.java @@ -17,7 +17,6 @@ */ package org.apache.metron.parsers.integration; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.collect.ImmutableList; import org.apache.metron.common.configuration.ConfigurationsUtils; import org.apache.metron.common.configuration.FieldValidator; @@ -147,8 +146,7 @@ public class ParserDriver { public ParserDriver(String sensorType, String parserConfig, String globalConfig) throws IOException { config = SensorParserConfig.fromBytes(parserConfig.getBytes()); this.sensorType = sensorType; - this.globalConfig = JSONUtils.INSTANCE.load(globalConfig, new TypeReference<Map<String, Object>>() { - }); + this.globalConfig = JSONUtils.INSTANCE.load(globalConfig, JSONUtils.MAP_SUPPLIER); } public ProcessorResult<List<byte[]>> run(List<byte[]> in) { http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-platform/metron-parsers/src/test/java/org/apache/metron/writers/integration/WriterBoltIntegrationTest.java ---------------------------------------------------------------------- diff --git a/metron-platform/metron-parsers/src/test/java/org/apache/metron/writers/integration/WriterBoltIntegrationTest.java b/metron-platform/metron-parsers/src/test/java/org/apache/metron/writers/integration/WriterBoltIntegrationTest.java index d4d1c02..0cfaae3 100644 --- a/metron-platform/metron-parsers/src/test/java/org/apache/metron/writers/integration/WriterBoltIntegrationTest.java +++ b/metron-platform/metron-parsers/src/test/java/org/apache/metron/writers/integration/WriterBoltIntegrationTest.java @@ -17,7 +17,6 @@ */ package org.apache.metron.writers.integration; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Function; import com.google.common.collect.Iterables; import org.adrianwalker.multilinestring.Multiline; @@ -171,7 +170,7 @@ public class WriterBoltIntegrationTest extends BaseIntegrationTest { , message -> { try { return new JSONObject(JSONUtils.INSTANCE.load(new String(message) - , new TypeReference<Map<String, Object>>() {} + ,JSONUtils.MAP_SUPPLIER ) ); } catch (Exception ex) { http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/benchmark/StellarMicrobenchmark.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/benchmark/StellarMicrobenchmark.java b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/benchmark/StellarMicrobenchmark.java index 35fa673..914105e 100644 --- a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/benchmark/StellarMicrobenchmark.java +++ b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/benchmark/StellarMicrobenchmark.java @@ -17,7 +17,6 @@ */ package org.apache.metron.stellar.common.benchmark; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.io.Files; @@ -231,8 +230,7 @@ public class StellarMicrobenchmark { List<String> lines = Files.readLines(expressionsFile, Charset.defaultCharset()); Map<String, Object> variables = new HashMap<>(); if(variablesFile.isPresent()) { - variables = JSONUtils.INSTANCE.load(new FileInputStream(variablesFile.get()), new TypeReference<Map<String, Object>>() { - }); + variables = JSONUtils.INSTANCE.load(new FileInputStream(variablesFile.get()), JSONUtils.MAP_SUPPLIER); } int numTimes = DEFAULT_NUM_TIMES; if(BenchmarkOptions.NUM_TIMES.has(cli)) { http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/configuration/ConfigurationType.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/configuration/ConfigurationType.java b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/configuration/ConfigurationType.java index 16cde83..99859b2 100644 --- a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/configuration/ConfigurationType.java +++ b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/configuration/ConfigurationType.java @@ -18,7 +18,6 @@ package org.apache.metron.stellar.common.configuration; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Function; import org.apache.metron.stellar.common.Constants; import org.apache.metron.stellar.common.utils.JSONUtils; @@ -30,8 +29,7 @@ public enum ConfigurationType implements Function<String, Object> { GLOBAL("global",".", s -> { try { - return JSONUtils.INSTANCE.load(s, new TypeReference<Map<String, Object>>() { - }); + return JSONUtils.INSTANCE.load(s, JSONUtils.MAP_SUPPLIER); } catch (IOException e) { throw new RuntimeException("Unable to load " + s, e); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/DefaultStellarShellExecutor.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/DefaultStellarShellExecutor.java b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/DefaultStellarShellExecutor.java index f83bb9e..3f2c495 100644 --- a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/DefaultStellarShellExecutor.java +++ b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/DefaultStellarShellExecutor.java @@ -19,7 +19,6 @@ */ package org.apache.metron.stellar.common.shell; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.collect.Maps; import org.apache.commons.collections.map.UnmodifiableMap; import org.apache.commons.lang3.StringUtils; @@ -370,9 +369,7 @@ public class DefaultStellarShellExecutor implements StellarShellExecutor { */ private Map<String, Object> fetchGlobalConfig(CuratorFramework zkClient) throws Exception { byte[] raw = readGlobalConfigBytesFromZookeeper(zkClient); - return JSONUtils.INSTANCE.load( - new ByteArrayInputStream(raw), - new TypeReference<Map<String, Object>>() {}); + return JSONUtils.INSTANCE.load( new ByteArrayInputStream(raw), JSONUtils.MAP_SUPPLIER); } /** http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/cli/StellarShell.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/cli/StellarShell.java b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/cli/StellarShell.java index 44ad28c..c81df61 100644 --- a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/cli/StellarShell.java +++ b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/shell/cli/StellarShell.java @@ -20,7 +20,6 @@ package org.apache.metron.stellar.common.shell.cli; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; import org.apache.commons.cli.CommandLine; @@ -221,7 +220,7 @@ public class StellarShell extends AeshConsoleCallback implements Completion { String variablePath = commandLine.getOptionValue("v"); Map<String, Object> variables = JSONUtils.INSTANCE.load( new File(variablePath), - new TypeReference<Map<String, Object>>() {}); + JSONUtils.MAP_SUPPLIER); // for each variable... for(Map.Entry<String, Object> kv : variables.entrySet()) { http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/JSONUtils.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/JSONUtils.java b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/JSONUtils.java index d7e90cf..9fb1c3f 100644 --- a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/JSONUtils.java +++ b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/utils/JSONUtils.java @@ -27,6 +27,12 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; + import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; @@ -35,23 +41,48 @@ import org.json.simple.parser.ParseException; public enum JSONUtils { INSTANCE; + public static class ReferenceSupplier<T> implements Supplier<TypeReference<T>> { + Type type; + protected ReferenceSupplier() { + Type superClass = this.getClass().getGenericSuperclass(); + if(superClass instanceof Class) { + throw new IllegalArgumentException("Internal error: ReferenceSupplier constructed without actual type information"); + } else { + this.type = ((ParameterizedType)superClass).getActualTypeArguments()[0]; + } + } + + @Override + public TypeReference<T> get() { + return new TypeReference<T>() { + @Override + public Type getType() { + return type; + } + }; + } + } + + public final static ReferenceSupplier<Map<String, Object>> MAP_SUPPLIER = new ReferenceSupplier<Map<String, Object>>(){}; + public final static ReferenceSupplier<List<Object>> LIST_SUPPLIER = new ReferenceSupplier<List<Object>>(){}; + private static ThreadLocal<JSONParser> _parser = ThreadLocal.withInitial(() -> new JSONParser()); private static ThreadLocal<ObjectMapper> _mapper = ThreadLocal.withInitial(() -> new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL)); - public <T> T load(InputStream is, TypeReference<T> ref) throws IOException { - return _mapper.get().readValue(is, ref); + public <T> T load(InputStream is, ReferenceSupplier<T> ref) throws IOException { + return _mapper.get().readValue(is, (TypeReference<T>)ref.get()); } - public <T> T load(String is, TypeReference<T> ref) throws IOException { - return _mapper.get().readValue(is, ref); + public <T> T load(String is, ReferenceSupplier<T> ref) throws IOException { + return _mapper.get().readValue(is, (TypeReference<T>)ref.get()); } - public <T> T load(File f, TypeReference<T> ref) throws IOException { + public <T> T load(File f, ReferenceSupplier<T> ref) throws IOException { try (InputStream is = new BufferedInputStream(new FileInputStream(f))) { - return _mapper.get().readValue(is, ref); + return _mapper.get().readValue(is, (TypeReference<T>)ref.get()); } } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java index 4dc4790..2865ea7 100644 --- a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java +++ b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java @@ -20,7 +20,6 @@ package org.apache.metron.stellar.dsl.functions; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; @@ -569,15 +568,18 @@ public class StringFunctions { throw new ParseException("Valid JSON string not supplied"); } // Return parsed JSON Object as a HashMap + String in = (String)strings.get(0); try { - return JSONUtils.INSTANCE.load((String) strings.get(0), new TypeReference<Map<String, Object>>(){}); + return (Map)JSONUtils.INSTANCE.load(in, JSONUtils.MAP_SUPPLIER); } catch (JsonProcessingException ex) { - throw new ParseException("Valid JSON string not supplied", ex); - } catch (IOException e) { - e.printStackTrace(); + throw new ParseException(String.format("%s is not a valid JSON string", in), ex); + } catch (IOException ex) { + throw new ParseException(String.format("%s is not a valid JSON string", in), ex); + } + catch (ClassCastException ex) { + throw new ParseException(String.format("%s is not a valid JSON string, expected a map", in), ex); } } - return new ParseException("Unable to parse JSON string"); } } @@ -606,13 +608,16 @@ public class StringFunctions { throw new ParseException("Valid JSON string not supplied"); } // Return parsed JSON Object as a List + String in = (String)strings.get(0); try { - return (List) JSONUtils.INSTANCE.load((String) strings.get(0), new TypeReference<List<Object>>(){}); + return (List) JSONUtils.INSTANCE.load(in, JSONUtils.LIST_SUPPLIER); } catch (JsonProcessingException ex) { - throw new ParseException("Valid JSON string not supplied", ex); - } catch (IOException e) { - e.printStackTrace(); - throw new ParseException("Valid JSON string not supplied", e); + throw new ParseException(String.format("%s is not a valid JSON string", in), ex); + } catch (IOException ex) { + throw new ParseException(String.format("%s is not a valid JSON string", in), ex); + } + catch (ClassCastException ex) { + throw new ParseException(String.format("%s is not a valid JSON string, expected a list", in), ex); } } } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/utils/JSONUtilsTest.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/utils/JSONUtilsTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/utils/JSONUtilsTest.java index f4692e3..e28bfb7 100644 --- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/utils/JSONUtilsTest.java +++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/common/utils/JSONUtilsTest.java @@ -17,7 +17,6 @@ */ package org.apache.metron.stellar.common.utils; -import com.fasterxml.jackson.core.type.TypeReference; import org.adrianwalker.multilinestring.Multiline; import org.junit.Assert; import org.junit.BeforeClass; @@ -54,8 +53,7 @@ public class JSONUtilsTest { put("a", "hello"); put("b", "world"); }}; - Map<String, Object> actual = JSONUtils.INSTANCE.load(configFile, new TypeReference<Map<String, Object>>() { - }); + Map<String, Object> actual = JSONUtils.INSTANCE.load(configFile, JSONUtils.MAP_SUPPLIER); Assert.assertThat("config not equal", actual, equalTo(expected)); } http://git-wip-us.apache.org/repos/asf/metron/blob/878003a3/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java ---------------------------------------------------------------------- diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java index 418bf2d..9f78fe1 100644 --- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java +++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java @@ -617,7 +617,8 @@ public class StringFunctionsTest { //Simple Arrays boolean thrown = false; try { - run("TO_JSON_MAP(msg)", ImmutableMap.of("msg", string3)); + Object o = run("TO_JSON_MAP(msg)", ImmutableMap.of("msg", string3)); + System.out.println(string3 + " == " + o); } catch (ParseException pe) { thrown = true; } @@ -656,7 +657,7 @@ public class StringFunctionsTest { run("TO_JSON_MAP('123, 456')", new HashedMap<>()); } catch (ParseException pe) { thrown = true; - Assert.assertTrue(pe.getMessage().contains("Valid JSON string not supplied")); + Assert.assertTrue(pe.getMessage().contains("is not a valid JSON string")); } Assert.assertTrue(thrown); thrown = false; @@ -666,7 +667,7 @@ public class StringFunctionsTest { run("TO_JSON_MAP('{\"foo\" : 2')", new HashedMap<>()); } catch (ParseException pe) { thrown = true; - Assert.assertTrue(pe.getMessage().contains("Valid JSON string not supplied")); + Assert.assertTrue(pe.getMessage().contains("is not a valid JSON string")); } Assert.assertTrue(thrown); thrown = false; @@ -730,7 +731,7 @@ public class StringFunctionsTest { run("TO_JSON_LIST('123, 456')", new HashedMap<>()); } catch (ParseException pe) { thrown = true; - Assert.assertTrue(pe.getMessage().contains("Valid JSON string not supplied")); + Assert.assertTrue(pe.getMessage().contains("is not a valid JSON string")); } Assert.assertTrue(thrown); @@ -740,7 +741,7 @@ public class StringFunctionsTest { run("TO_JSON_LIST('{\"foo\" : 2')", new HashedMap<>()); } catch (ParseException pe) { thrown = true; - Assert.assertTrue(pe.getMessage().contains("Valid JSON string not supplied")); + Assert.assertTrue(pe.getMessage().contains("is not a valid JSON string")); } Assert.assertTrue(thrown); }