This is an automated email from the ASF dual-hosted git repository.
jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 9beb63049f Remove abuse of new ObjectMapper. (#8736)
9beb63049f is described below
commit 9beb63049fd8e19c08c8fba137547f2c58dc9ca5
Author: Gonzalo Ortiz Jaureguizar <[email protected]>
AuthorDate: Wed May 25 18:58:42 2022 +0200
Remove abuse of new ObjectMapper. (#8736)
---
.../LiteralOnlyBrokerRequestTest.java | 15 +++++++--------
.../java/org/apache/pinot/client/BrokerCache.java | 5 ++---
.../org/apache/pinot/client/ExternalViewReader.java | 4 ++--
.../client/JsonAsyncHttpPinotClientTransport.java | 4 ++--
.../pinot/client/AggregationResultSetTest.java | 5 ++---
.../org/apache/pinot/client/ExecutionStatsTest.java | 5 ++---
.../apache/pinot/client/GroupByResultSetTest.java | 5 ++---
.../org/apache/pinot/client/ResultSetGroupTest.java | 4 ++--
.../pinot/client/ResultTableResultSetTest.java | 5 ++---
.../apache/pinot/client/SelectionResultSetTest.java | 5 ++---
.../pinot/client/PinotConnectionMetaData.java | 10 ++++------
.../org/apache/pinot/client/PinotResultSet.java | 4 ++--
.../response/ControllerTenantBrokerResponse.java | 7 ++-----
.../client/controller/response/SchemaResponse.java | 7 ++-----
.../client/controller/response/TableResponse.java | 7 ++-----
.../pinot/client/DummyPinotControllerTransport.java | 5 ++---
.../org/apache/pinot/client/PinotResultSetTest.java | 4 ++--
.../segment/generation/SegmentGenerationUtils.java | 9 +++------
.../apache/pinot/common/utils/PinotAppConfigs.java | 5 ++---
.../pinot/common/function/JsonFunctionsTest.java | 10 ++++------
.../pinot/common/utils/config/TableConfigTest.java | 6 ++----
.../api/resources/TableDebugResource.java | 3 +--
.../controller/recommender/RecommenderDriver.java | 1 +
.../controller/recommender/io/InputManager.java | 9 +++------
.../api/PinotControllerAppConfigsTest.java | 7 +++----
.../controller/recommender/TestConfigEngine.java | 7 +++----
.../common/evaluators/DefaultJsonPathEvaluator.java | 1 +
.../JsonExtractScalarTransformFunction.java | 1 +
.../batch/common/SegmentGenerationTaskRunner.java | 3 +--
.../ingestion/common/DefaultControllerRestApi.java | 4 +---
.../plugin/provider/AzureEnvironmentProvider.java | 5 ++---
.../inputformat/avro/AvroRecordExtractorTest.java | 7 ++-----
.../plugin/inputformat/json/JSONMessageDecoder.java | 6 +-----
.../stream/kafka/KafkaJSONMessageDecoderTest.java | 6 ++----
.../pinot/server/api/PinotServerAppConfigsTest.java | 7 +++----
.../pinot/spi/data/readers/RecordReaderFactory.java | 3 +--
.../java/org/apache/pinot/spi/utils/JsonUtils.java | 21 ++++++++++++++-------
37 files changed, 92 insertions(+), 130 deletions(-)
diff --git
a/pinot-broker/src/test/java/org/apache/pinot/broker/requesthandler/LiteralOnlyBrokerRequestTest.java
b/pinot-broker/src/test/java/org/apache/pinot/broker/requesthandler/LiteralOnlyBrokerRequestTest.java
index 90d611b132..0868213cb4 100644
---
a/pinot-broker/src/test/java/org/apache/pinot/broker/requesthandler/LiteralOnlyBrokerRequestTest.java
+++
b/pinot-broker/src/test/java/org/apache/pinot/broker/requesthandler/LiteralOnlyBrokerRequestTest.java
@@ -19,7 +19,6 @@
package org.apache.pinot.broker.requesthandler;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Collections;
import java.util.Random;
import java.util.concurrent.TimeUnit;
@@ -33,6 +32,7 @@ import org.apache.pinot.spi.metrics.PinotMetricUtils;
import org.apache.pinot.spi.trace.RequestContext;
import org.apache.pinot.spi.trace.Tracing;
import org.apache.pinot.spi.utils.BytesUtils;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.apache.pinot.sql.parsers.CalciteSqlParser;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -128,7 +128,7 @@ public class LiteralOnlyBrokerRequestTest {
byte[] randBytes = new byte[12];
RANDOM.nextBytes(randBytes);
String ranStr = BytesUtils.toHexString(randBytes);
- JsonNode request = new
ObjectMapper().readTree(String.format("{\"sql\":\"SELECT %d, '%s'\"}", randNum,
ranStr));
+ JsonNode request =
JsonUtils.stringToJsonNode(String.format("{\"sql\":\"SELECT %d, '%s'\"}",
randNum, ranStr));
RequestContext requestStats = Tracing.getTracer().createRequestScope();
BrokerResponseNative brokerResponse =
requestHandler.handleRequest(request, null, requestStats);
Assert.assertEquals(brokerResponse.getResultTable().getDataSchema().getColumnName(0),
String.format("%d", randNum));
@@ -152,7 +152,7 @@ public class LiteralOnlyBrokerRequestTest {
new BrokerMetrics("", PinotMetricUtils.getPinotMetricsRegistry(),
true, Collections.emptySet()),
null, null);
long currentTsMin = System.currentTimeMillis();
- JsonNode request = new ObjectMapper().readTree(
+ JsonNode request = JsonUtils.stringToJsonNode(
"{\"sql\":\"SELECT now() as currentTs, fromDateTime('2020-01-01 UTC',
'yyyy-MM-dd z') as firstDayOf2020\"}");
RequestContext requestStats = Tracing.getTracer().createRequestScope();
BrokerResponseNative brokerResponse =
requestHandler.handleRequest(request, null, requestStats);
@@ -171,7 +171,7 @@ public class LiteralOnlyBrokerRequestTest {
Assert.assertEquals(brokerResponse.getTotalDocs(), 0);
long oneHourAgoTsMin = System.currentTimeMillis() - ONE_HOUR_IN_MS;
- request = new ObjectMapper().readTree(
+ request = JsonUtils.stringToJsonNode(
"{\"sql\":\"SELECT ago('PT1H') as oneHourAgoTs,
fromDateTime('2020-01-01 UTC', 'yyyy-MM-dd z') as "
+ "firstDayOf2020\"}");
requestStats = Tracing.getTracer().createRequestScope();
@@ -192,7 +192,7 @@ public class LiteralOnlyBrokerRequestTest {
Assert.assertEquals(brokerResponse.getResultTable().getRows().get(0)[1],
1577836800000L);
Assert.assertEquals(brokerResponse.getTotalDocs(), 0);
- request = new ObjectMapper().readTree(
+ request = JsonUtils.stringToJsonNode(
"{\"sql\":\"SELECT encodeUrl('key1=value
1&key2=value@!$2&key3=value%3') AS encoded, "
+
"decodeUrl('key1%3Dvalue+1%26key2%3Dvalue%40%21%242%26key3%3Dvalue%253') AS
decoded\"}");
requestStats = Tracing.getTracer().createRequestScope();
@@ -222,9 +222,8 @@ public class LiteralOnlyBrokerRequestTest {
new BrokerMetrics("", PinotMetricUtils.getPinotMetricsRegistry(),
true, Collections.emptySet()),
null, null);
- ObjectMapper objectMapper = new ObjectMapper();
// Test 1: select constant
- JsonNode request = objectMapper.readTree("{\"sql\":\"EXPLAIN PLAN FOR
SELECT 1.5, 'test'\"}");
+ JsonNode request = JsonUtils.stringToJsonNode("{\"sql\":\"EXPLAIN PLAN FOR
SELECT 1.5, 'test'\"}");
RequestContext requestStats = Tracing.getTracer().createRequestScope();
BrokerResponseNative brokerResponse =
requestHandler.handleRequest(request, null, requestStats);
@@ -242,7 +241,7 @@ public class LiteralOnlyBrokerRequestTest {
// Test 2: invoke compile time function -> literal only
long currentTsMin = System.currentTimeMillis();
- request = objectMapper.readTree(
+ request = JsonUtils.stringToJsonNode(
"{\"sql\":\"EXPLAIN PLAN FOR SELECT 6+8 as addition,
fromDateTime('2020-01-01 UTC', 'yyyy-MM-dd z') as "
+ "firstDayOf2020\"}");
requestStats = Tracing.getTracer().createRequestScope();
diff --git
a/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/BrokerCache.java
b/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/BrokerCache.java
index 8f296d3d9c..57a69593e2 100644
---
a/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/BrokerCache.java
+++
b/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/BrokerCache.java
@@ -20,7 +20,6 @@ package org.apache.pinot.client;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
@@ -31,6 +30,7 @@ import java.util.Random;
import java.util.Set;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.apache.pinot.spi.utils.builder.ControllerRequestURLBuilder;
import org.apache.pinot.spi.utils.builder.TableNameBuilder;
import org.asynchttpclient.AsyncHttpClient;
@@ -70,7 +70,6 @@ public class BrokerCache {
private static final TypeReference<Map<String, List<BrokerInstance>>>
RESPONSE_TYPE_REF =
new TypeReference<Map<String, List<BrokerInstance>>>() {
};
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private final Random _random = new Random();
private final AsyncHttpClient _client;
private final String _address;
@@ -88,7 +87,7 @@ public class BrokerCache {
Future<Response> responseFuture = getRequest.addHeader("accept",
"application/json").execute();
Response response = responseFuture.get();
String responseBody = response.getResponseBody(StandardCharsets.UTF_8);
- return OBJECT_MAPPER.readValue(responseBody, RESPONSE_TYPE_REF);
+ return JsonUtils.stringToObject(responseBody, RESPONSE_TYPE_REF);
}
private BrokerData getBrokerData(Map<String, List<BrokerInstance>>
responses) {
diff --git
a/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/ExternalViewReader.java
b/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/ExternalViewReader.java
index 32bd125780..88ed54976c 100644
---
a/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/ExternalViewReader.java
+++
b/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/ExternalViewReader.java
@@ -20,7 +20,6 @@ package org.apache.pinot.client;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
@@ -38,6 +37,7 @@ import java.util.Map.Entry;
import java.util.Set;
import java.util.zip.GZIPInputStream;
import org.I0Itec.zkclient.ZkClient;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,7 +47,7 @@ import org.slf4j.LoggerFactory;
*/
public class ExternalViewReader {
private static final Logger LOGGER =
LoggerFactory.getLogger(ExternalViewReader.class);
- private static final ObjectReader OBJECT_READER = new
ObjectMapper().reader();
+ private static final ObjectReader OBJECT_READER = JsonUtils.DEFAULT_READER;
public static final String BROKER_EXTERNAL_VIEW_PATH =
"/EXTERNALVIEW/brokerResource";
public static final String BROKER_INSTANCE_PATH = "/CONFIGS/PARTICIPANT";
public static final String REALTIME_SUFFIX = "_REALTIME";
diff --git
a/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/JsonAsyncHttpPinotClientTransport.java
b/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/JsonAsyncHttpPinotClientTransport.java
index 2c52626302..71ea4b4262 100644
---
a/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/JsonAsyncHttpPinotClientTransport.java
+++
b/pinot-clients/pinot-java-client/src/main/java/org/apache/pinot/client/JsonAsyncHttpPinotClientTransport.java
@@ -18,7 +18,6 @@
*/
package org.apache.pinot.client;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -35,6 +34,7 @@ import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
import javax.net.ssl.SSLContext;
import org.apache.pinot.spi.utils.CommonConstants;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.asynchttpclient.AsyncHttpClient;
import org.asynchttpclient.BoundRequestBuilder;
import org.asynchttpclient.DefaultAsyncHttpClientConfig.Builder;
@@ -49,7 +49,7 @@ import org.slf4j.LoggerFactory;
*/
public class JsonAsyncHttpPinotClientTransport implements PinotClientTransport
{
private static final Logger LOGGER =
LoggerFactory.getLogger(JsonAsyncHttpPinotClientTransport.class);
- private static final ObjectReader OBJECT_READER = new
ObjectMapper().reader();
+ private static final ObjectReader OBJECT_READER = JsonUtils.DEFAULT_READER;
private final Map<String, String> _headers;
private final String _scheme;
diff --git
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/AggregationResultSetTest.java
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/AggregationResultSetTest.java
index b3af907f44..e0c095ea41 100644
---
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/AggregationResultSetTest.java
+++
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/AggregationResultSetTest.java
@@ -19,7 +19,7 @@
package org.apache.pinot.client;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -37,8 +37,7 @@ public class AggregationResultSetTest {
public void setUp()
throws Exception {
String jsonString = "{\"function\":\"testFunction\", \"value\":\"123\"}";
- ObjectMapper objectMapper = new ObjectMapper();
- _mockJsonObject = objectMapper.readTree(jsonString);
+ _mockJsonObject = JsonUtils.stringToJsonNode(jsonString);
_aggregationResultSetUnderTest = new AggregationResultSet(_mockJsonObject);
}
diff --git
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ExecutionStatsTest.java
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ExecutionStatsTest.java
index 476bea869e..583a28e5ff 100644
---
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ExecutionStatsTest.java
+++
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ExecutionStatsTest.java
@@ -19,7 +19,7 @@
package org.apache.pinot.client;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -44,8 +44,7 @@ public class ExecutionStatsTest {
+ "\"numSegmentsProcessed\":10, \"numSegmentsMatched\":10,
\"numConsumingSegmentsQueried\":10, "
+ "\"minConsumingFreshnessTimeMs\":10, \"totalDocs\":10,
\"numGroupsLimitReached\":true, "
+ "\"timeUsedMs\":10}";
- ObjectMapper objectMapper = new ObjectMapper();
- _mockBrokerResponse = objectMapper.readTree(json);
+ _mockBrokerResponse = JsonUtils.stringToJsonNode(json);
_executionStatsUnderTest = new ExecutionStats(_mockBrokerResponse);
}
diff --git
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/GroupByResultSetTest.java
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/GroupByResultSetTest.java
index 26d74639a5..accb42ca0f 100644
---
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/GroupByResultSetTest.java
+++
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/GroupByResultSetTest.java
@@ -19,7 +19,7 @@
package org.apache.pinot.client;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -39,8 +39,7 @@ public class GroupByResultSetTest {
String jsonString =
"{\"groupByResult\":[{\"value\":1,
\"group\":[\"testGroup1\"]},{\"value\":2, \"group\":[\"testGroup2\"]}], "
+ "\"groupByColumns\":[\"testGroupColumn\"],
\"function\":\"testFunction\"}";
- ObjectMapper objectMapper = new ObjectMapper();
- _mockJsonObject = objectMapper.readTree(jsonString);
+ _mockJsonObject = JsonUtils.stringToJsonNode(jsonString);
_groupByResultSetUnderTest = new GroupByResultSet(_mockJsonObject);
}
diff --git
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ResultSetGroupTest.java
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ResultSetGroupTest.java
index d986a39e5e..c513587696 100644
---
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ResultSetGroupTest.java
+++
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ResultSetGroupTest.java
@@ -18,11 +18,11 @@
*/
package org.apache.pinot.client;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.InputStream;
import java.util.Collections;
import java.util.Properties;
import java.util.concurrent.Future;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -157,7 +157,7 @@ public class ResultSetGroupTest {
lastByte = stream.read();
}
String jsonText = builder.toString();
- return BrokerResponse.fromJson(new ObjectMapper().readTree(jsonText));
+ return BrokerResponse.fromJson(JsonUtils.stringToJsonNode(jsonText));
} catch (Exception e) {
Assert.fail("Unexpected exception", e);
return null;
diff --git
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ResultTableResultSetTest.java
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ResultTableResultSetTest.java
index 6e05773766..e57514f71f 100644
---
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ResultTableResultSetTest.java
+++
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/ResultTableResultSetTest.java
@@ -19,8 +19,8 @@
package org.apache.pinot.client;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
@@ -41,8 +41,7 @@ public class ResultTableResultSetTest {
String json =
"{ \"rows\" : [[\"r1c1\", \"r1c2\"], [\"r2c1\", \"r2c2\"]],
\"dataSchema\" : {\"columnNames\":[\"column1\", "
+ "\"column2\"], " + "\"columnDataTypes\":[\"column1DataType\",
\"column2DataType\"]} } ";
- ObjectMapper objectMapper = new ObjectMapper();
- _jsonNode = objectMapper.readTree(json);
+ _jsonNode = JsonUtils.stringToJsonNode(json);
_resultTableResultSetUnderTest = new ResultTableResultSet(_jsonNode);
}
diff --git
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/SelectionResultSetTest.java
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/SelectionResultSetTest.java
index 6de0fcbe03..0fb7a7a504 100644
---
a/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/SelectionResultSetTest.java
+++
b/pinot-clients/pinot-java-client/src/test/java/org/apache/pinot/client/SelectionResultSetTest.java
@@ -19,7 +19,7 @@
package org.apache.pinot.client;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -37,8 +37,7 @@ public class SelectionResultSetTest {
public void setUp()
throws Exception {
String jsonString = "{\"results\":[[\"r1c1\",\"r1c2\"]],
\"columns\":[\"column1\", \"column2\"]}";
- ObjectMapper objectMapper = new ObjectMapper();
- _mockSelectionResults = objectMapper.readTree(jsonString);
+ _mockSelectionResults = JsonUtils.stringToJsonNode(jsonString);
_selectionResultSetUnderTest = new
SelectionResultSet(_mockSelectionResults);
}
diff --git
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotConnectionMetaData.java
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotConnectionMetaData.java
index 97fa53c390..30f13d2b0c 100644
---
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotConnectionMetaData.java
+++
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotConnectionMetaData.java
@@ -19,7 +19,6 @@
package org.apache.pinot.client;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -31,6 +30,7 @@ import
org.apache.pinot.client.controller.PinotControllerTransport;
import org.apache.pinot.client.controller.response.SchemaResponse;
import org.apache.pinot.client.controller.response.TableResponse;
import org.apache.pinot.client.utils.DriverUtils;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,8 +40,6 @@ import static org.apache.pinot.client.utils.Constants.*;
public class PinotConnectionMetaData extends AbstractBaseConnectionMetaData {
private static final Logger LOGGER =
LoggerFactory.getLogger(PinotConnectionMetaData.class);
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
-
private final PinotConnection _connection;
private final PinotControllerTransport _controllerTransport;
private final String _controllerURL;
@@ -114,7 +112,7 @@ public class PinotConnectionMetaData extends
AbstractBaseConnectionMetaData {
pinotMeta.addRow(Arrays.asList(row));
}
- JsonNode resultTable = OBJECT_MAPPER.valueToTree(pinotMeta);
+ JsonNode resultTable = JsonUtils.objectToJsonNode(pinotMeta);
return PinotResultSet.fromResultTable(new
ResultTableResultSet(resultTable));
} catch (Exception e) {
throw new SQLException(e);
@@ -144,7 +142,7 @@ public class PinotConnectionMetaData extends
AbstractBaseConnectionMetaData {
row.add(TABLE_TYPE);
pinotMeta.addRow(row);
- JsonNode resultTable = OBJECT_MAPPER.valueToTree(pinotMeta);
+ JsonNode resultTable = JsonUtils.objectToJsonNode(pinotMeta);
return PinotResultSet.fromResultTable(new
ResultTableResultSet(resultTable));
}
@@ -180,7 +178,7 @@ public class PinotConnectionMetaData extends
AbstractBaseConnectionMetaData {
}
}
- JsonNode resultTable = OBJECT_MAPPER.valueToTree(pinotMeta);
+ JsonNode resultTable = JsonUtils.objectToJsonNode(pinotMeta);
return PinotResultSet.fromResultTable(new
ResultTableResultSet(resultTable));
}
diff --git
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultSet.java
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultSet.java
index 212a01c51b..3e900c64ea 100644
---
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultSet.java
+++
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultSet.java
@@ -19,7 +19,6 @@
package org.apache.pinot.client;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -39,6 +38,7 @@ import java.util.Map;
import org.apache.commons.codec.binary.Hex;
import org.apache.pinot.client.base.AbstractBaseResultSet;
import org.apache.pinot.client.utils.DateTimeUtils;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -79,7 +79,7 @@ public class PinotResultSet extends AbstractBaseResultSet {
public static PinotResultSet fromJson(String jsonText) {
try {
- JsonNode brokerResponse = new ObjectMapper().readTree(jsonText);
+ JsonNode brokerResponse = JsonUtils.stringToJsonNode(jsonText);
ResultSet resultSet = new
ResultTableResultSet(brokerResponse.get("resultTable"));
return new PinotResultSet(resultSet);
} catch (Exception e) {
diff --git
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/ControllerTenantBrokerResponse.java
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/ControllerTenantBrokerResponse.java
index 1ba9068006..68d212aade 100644
---
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/ControllerTenantBrokerResponse.java
+++
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/ControllerTenantBrokerResponse.java
@@ -19,14 +19,13 @@
package org.apache.pinot.client.controller.response;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.asynchttpclient.Response;
@@ -68,8 +67,6 @@ public class ControllerTenantBrokerResponse {
public static class ControllerTenantBrokerResponseFuture
extends ControllerResponseFuture<ControllerTenantBrokerResponse> {
- private static final ObjectReader OBJECT_READER = new
ObjectMapper().reader();
-
public ControllerTenantBrokerResponseFuture(Future<Response> response,
String url) {
super(response, url);
}
@@ -79,7 +76,7 @@ public class ControllerTenantBrokerResponse {
throws ExecutionException {
String response = getStringResponse(timeout, unit);
try {
- JsonNode jsonResponse = OBJECT_READER.readTree(response);
+ JsonNode jsonResponse = JsonUtils.stringToJsonNode(response);
ControllerTenantBrokerResponse tableResponse =
ControllerTenantBrokerResponse.fromJson(jsonResponse);
return tableResponse;
} catch (IOException e) {
diff --git
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/SchemaResponse.java
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/SchemaResponse.java
index 76e737679e..27116a634a 100644
---
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/SchemaResponse.java
+++
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/SchemaResponse.java
@@ -19,12 +19,11 @@
package org.apache.pinot.client.controller.response;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectReader;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.asynchttpclient.Response;
@@ -69,8 +68,6 @@ public class SchemaResponse {
}
public static class SchemaResponseFuture extends
ControllerResponseFuture<SchemaResponse> {
- private static final ObjectReader OBJECT_READER = new
ObjectMapper().reader();
-
public SchemaResponseFuture(Future<Response> response, String url) {
super(response, url);
}
@@ -80,7 +77,7 @@ public class SchemaResponse {
throws ExecutionException {
String response = getStringResponse(timeout, unit);
try {
- JsonNode jsonResponse = OBJECT_READER.readTree(response);
+ JsonNode jsonResponse = JsonUtils.stringToJsonNode(response);
return SchemaResponse.fromJson(jsonResponse);
} catch (IOException e) {
new ExecutionException(e);
diff --git
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/TableResponse.java
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/TableResponse.java
index 8f41afcfca..7e4a1c35fc 100644
---
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/TableResponse.java
+++
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/controller/response/TableResponse.java
@@ -19,14 +19,13 @@
package org.apache.pinot.client.controller.response;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.asynchttpclient.Response;
@@ -72,8 +71,6 @@ public class TableResponse {
}
public static class TableResponseFuture extends
ControllerResponseFuture<TableResponse> {
- private static final ObjectReader OBJECT_READER = new
ObjectMapper().reader();
-
public TableResponseFuture(Future<Response> response, String url) {
super(response, url);
}
@@ -83,7 +80,7 @@ public class TableResponse {
throws ExecutionException {
String response = getStringResponse(timeout, unit);
try {
- JsonNode jsonResponse = OBJECT_READER.readTree(response);
+ JsonNode jsonResponse = JsonUtils.stringToJsonNode(response);
TableResponse tableResponse = TableResponse.fromJson(jsonResponse);
return tableResponse;
} catch (IOException e) {
diff --git
a/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/DummyPinotControllerTransport.java
b/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/DummyPinotControllerTransport.java
index 1993ce6ea2..0a11da3fc6 100644
---
a/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/DummyPinotControllerTransport.java
+++
b/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/DummyPinotControllerTransport.java
@@ -19,9 +19,9 @@
package org.apache.pinot.client;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.pinot.client.controller.PinotControllerTransport;
import
org.apache.pinot.client.controller.response.ControllerTenantBrokerResponse;
+import org.apache.pinot.spi.utils.JsonUtils;
public class DummyPinotControllerTransport extends PinotControllerTransport {
@@ -30,8 +30,7 @@ public class DummyPinotControllerTransport extends
PinotControllerTransport {
public ControllerTenantBrokerResponse getBrokersFromController(String
controllerAddress, String tenant) {
try {
String jsonString = "[{\"instanceName\": \"dummy\", \"host\" :
\"dummy\", \"port\" : 8000}]";
- ObjectMapper objectMapper = new ObjectMapper();
- JsonNode dummyBrokerJsonResponse = objectMapper.readTree(jsonString);
+ JsonNode dummyBrokerJsonResponse =
JsonUtils.stringToJsonNode(jsonString);
return ControllerTenantBrokerResponse.fromJson(dummyBrokerJsonResponse);
} catch (Exception e) {
}
diff --git
a/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotResultSetTest.java
b/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotResultSetTest.java
index 4c3c3cd9c0..7e92cc1040 100644
---
a/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotResultSetTest.java
+++
b/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotResultSetTest.java
@@ -18,7 +18,6 @@
*/
package org.apache.pinot.client;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.InputStream;
import java.sql.ResultSetMetaData;
import java.util.Calendar;
@@ -27,6 +26,7 @@ import java.util.Date;
import java.util.concurrent.Future;
import org.apache.commons.io.IOUtils;
import org.apache.pinot.client.utils.DateTimeUtils;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -181,7 +181,7 @@ public class PinotResultSetTest {
lastByte = stream.read();
}
String jsonText = builder.toString();
- return BrokerResponse.fromJson(new ObjectMapper().readTree(jsonText));
+ return BrokerResponse.fromJson(JsonUtils.stringToJsonNode(jsonText));
} catch (Exception e) {
Assert.fail("Unexpected exception", e);
return null;
diff --git
a/pinot-common/src/main/java/org/apache/pinot/common/segment/generation/SegmentGenerationUtils.java
b/pinot-common/src/main/java/org/apache/pinot/common/segment/generation/SegmentGenerationUtils.java
index 2eaeeefb5e..121f2da164 100644
---
a/pinot-common/src/main/java/org/apache/pinot/common/segment/generation/SegmentGenerationUtils.java
+++
b/pinot-common/src/main/java/org/apache/pinot/common/segment/generation/SegmentGenerationUtils.java
@@ -19,7 +19,6 @@
package org.apache.pinot.common.segment.generation;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Preconditions;
import java.io.File;
import java.io.IOException;
@@ -69,9 +68,8 @@ public class SegmentGenerationUtils {
String schemaJson;
if (PinotFSFactory.isSchemeSupported(scheme)) {
// Try to use PinotFS to read schema URI
- PinotFS pinotFS = PinotFSFactory.create(scheme);
InputStream schemaStream;
- try {
+ try (PinotFS pinotFS = PinotFSFactory.create(scheme)) {
schemaStream = pinotFS.open(schemaURI);
} catch (IOException e) {
throw new RuntimeException("Failed to fetch schema from PinotFS - '" +
schemaURI + "'", e);
@@ -112,8 +110,7 @@ public class SegmentGenerationUtils {
String tableConfigJson;
if (PinotFSFactory.isSchemeSupported(scheme)) {
// Try to use PinotFS to read table config URI
- PinotFS pinotFS = PinotFSFactory.create(scheme);
- try {
+ try (PinotFS pinotFS = PinotFSFactory.create(scheme);) {
tableConfigJson = IOUtils.toString(pinotFS.open(tableConfigURI),
StandardCharsets.UTF_8);
} catch (IOException e) {
throw new RuntimeException("Failed to open table config file stream on
Pinot fs - '" + tableConfigURI + "'", e);
@@ -129,7 +126,7 @@ public class SegmentGenerationUtils {
// Controller API returns a wrapper of table config.
JsonNode tableJsonNode;
try {
- tableJsonNode = new ObjectMapper().readTree(tableConfigJson);
+ tableJsonNode = JsonUtils.stringToJsonNode(tableConfigJson);
} catch (IOException e) {
throw new RuntimeException("Failed to decode table config into JSON from
String - '" + tableConfigJson + "'", e);
}
diff --git
a/pinot-common/src/main/java/org/apache/pinot/common/utils/PinotAppConfigs.java
b/pinot-common/src/main/java/org/apache/pinot/common/utils/PinotAppConfigs.java
index 35d8e44800..6f93bf8a19 100644
---
a/pinot-common/src/main/java/org/apache/pinot/common/utils/PinotAppConfigs.java
+++
b/pinot-common/src/main/java/org/apache/pinot/common/utils/PinotAppConfigs.java
@@ -23,7 +23,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
@@ -38,6 +37,7 @@ import java.util.Objects;
import java.util.stream.Collectors;
import org.apache.commons.io.FileUtils;
import org.apache.pinot.spi.env.PinotConfiguration;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.apache.pinot.spi.utils.Obfuscator;
@@ -56,7 +56,6 @@ import org.apache.pinot.spi.utils.Obfuscator;
@JsonPropertyOrder({"systemConfig", "runtimeConfig", "pinotConfig",
"jvmConfig"})
public class PinotAppConfigs {
private static final String UNKNOWN_VALUE = "-";
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@JsonProperty("systemConfig")
private SystemConfig _systemConfig;
@@ -341,7 +340,7 @@ public class PinotAppConfigs {
public String toJSONString() {
try {
- return
OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(new
Obfuscator().toJson(this));
+ return JsonUtils.objectToPrettyString(new Obfuscator().toJson(this));
} catch (JsonProcessingException e) {
return e.getMessage();
}
diff --git
a/pinot-common/src/test/java/org/apache/pinot/common/function/JsonFunctionsTest.java
b/pinot-common/src/test/java/org/apache/pinot/common/function/JsonFunctionsTest.java
index 585afc9b7e..ee98705f10 100644
---
a/pinot-common/src/test/java/org/apache/pinot/common/function/JsonFunctionsTest.java
+++
b/pinot-common/src/test/java/org/apache/pinot/common/function/JsonFunctionsTest.java
@@ -19,7 +19,6 @@
package org.apache.pinot.common.function;
import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.ArrayList;
@@ -27,6 +26,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.apache.pinot.common.function.scalar.JsonFunctions;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
@@ -254,8 +254,6 @@ public class JsonFunctionsTest {
assertEquals(JsonFunctions.jsonPathArray(rawData, "$.[*].score"), new
Integer[]{90, 50});
}
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
-
@DataProvider
public static Object[][] jsonPathStringTestCases() {
return new Object[][]{
@@ -268,14 +266,14 @@ public class JsonFunctionsTest {
@Test(dataProvider = "jsonPathStringTestCases")
public void testJsonPathString(Map<String, Object> map, String path, String
expected)
throws JsonProcessingException {
- String value =
JsonFunctions.jsonPathString(OBJECT_MAPPER.writeValueAsString(map), path);
+ String value = JsonFunctions.jsonPathString(JsonUtils.objectToString(map),
path);
assertEquals(value, expected);
}
@Test(dataProvider = "jsonPathStringTestCases")
public void testJsonPathStringWithDefaultValue(Map<String, Object> map,
String path, String expected)
throws JsonProcessingException {
- String value =
JsonFunctions.jsonPathString(OBJECT_MAPPER.writeValueAsString(map), path,
expected);
+ String value = JsonFunctions.jsonPathString(JsonUtils.objectToString(map),
path, expected);
assertEquals(value, expected);
}
@@ -295,7 +293,7 @@ public class JsonFunctionsTest {
@Test(dataProvider = "jsonPathArrayTestCases")
public void testJsonPathArray(Map<String, Object> map, String path, Object[]
expected)
throws JsonProcessingException {
- Object[] value =
JsonFunctions.jsonPathArray(OBJECT_MAPPER.writeValueAsString(map), path);
+ Object[] value =
JsonFunctions.jsonPathArray(JsonUtils.objectToString(map), path);
if (expected == null) {
assertNull(value);
} else {
diff --git
a/pinot-common/src/test/java/org/apache/pinot/common/utils/config/TableConfigTest.java
b/pinot-common/src/test/java/org/apache/pinot/common/utils/config/TableConfigTest.java
index ba4cc5238e..ffeef06aca 100644
---
a/pinot-common/src/test/java/org/apache/pinot/common/utils/config/TableConfigTest.java
+++
b/pinot-common/src/test/java/org/apache/pinot/common/utils/config/TableConfigTest.java
@@ -18,7 +18,6 @@
*/
package org.apache.pinot.common.utils.config;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -26,6 +25,7 @@ import java.nio.file.Paths;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
@@ -34,8 +34,6 @@ import static org.testng.AssertJUnit.assertTrue;
public class TableConfigTest {
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
-
@DataProvider
public Object[][] configs()
throws IOException {
@@ -55,7 +53,7 @@ public class TableConfigTest {
@Test(dataProvider = "configs")
public void testConfigNotRejected(byte[] config)
throws IOException {
- TableConfig tableConfig =
OBJECT_MAPPER.readerFor(TableConfig.class).readValue(config);
+ TableConfig tableConfig =
JsonUtils.DEFAULT_READER.forType(TableConfig.class).readValue(config);
assertTrue(StringUtils.isNotBlank(tableConfig.getTableName()));
}
}
diff --git
a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/TableDebugResource.java
b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/TableDebugResource.java
index e3f2b349fd..d82221b4b3 100644
---
a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/TableDebugResource.java
+++
b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/TableDebugResource.java
@@ -20,7 +20,6 @@ package org.apache.pinot.controller.api.resources;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.BiMap;
import io.swagger.annotations.Api;
@@ -132,7 +131,7 @@ public class TableDebugResource {
tableDebugInfos.add(debugTable(_pinotHelixResourceManager, tableName,
type, verbosity));
}
- return new
ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(tableDebugInfos);
+ return JsonUtils.objectToPrettyString(tableDebugInfos);
}
/**
diff --git
a/pinot-controller/src/main/java/org/apache/pinot/controller/recommender/RecommenderDriver.java
b/pinot-controller/src/main/java/org/apache/pinot/controller/recommender/RecommenderDriver.java
index 71cf3f8375..86e15939df 100644
---
a/pinot-controller/src/main/java/org/apache/pinot/controller/recommender/RecommenderDriver.java
+++
b/pinot-controller/src/main/java/org/apache/pinot/controller/recommender/RecommenderDriver.java
@@ -53,6 +53,7 @@ public class RecommenderDriver {
InputManager inputManager;
ConfigManager outputManager;
+ // This ObjectMapper requires special configurations, hence we can't use
pinot JsonUtils here.
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
diff --git
a/pinot-controller/src/main/java/org/apache/pinot/controller/recommender/io/InputManager.java
b/pinot-controller/src/main/java/org/apache/pinot/controller/recommender/io/InputManager.java
index dc5deab407..c6bbea84e4 100644
---
a/pinot-controller/src/main/java/org/apache/pinot/controller/recommender/io/InputManager.java
+++
b/pinot-controller/src/main/java/org/apache/pinot/controller/recommender/io/InputManager.java
@@ -23,8 +23,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectReader;
import com.google.common.annotations.VisibleForTesting;
import java.io.IOException;
import java.util.HashMap;
@@ -59,6 +57,7 @@ import org.apache.pinot.spi.data.DimensionFieldSpec;
import org.apache.pinot.spi.data.FieldSpec;
import org.apache.pinot.spi.data.MetricFieldSpec;
import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.apache.pinot.sql.parsers.CalciteSqlCompiler;
import org.apache.pinot.sql.parsers.CalciteSqlParser;
import org.apache.pinot.sql.parsers.SqlCompilationException;
@@ -337,11 +336,9 @@ public class InputManager {
@JsonSetter(nulls = Nulls.SKIP)
public void setSchema(JsonNode jsonNode)
throws IOException {
- ObjectReader reader = new ObjectMapper().readerFor(Schema.class);
- _schema = reader.readValue(jsonNode);
+ _schema = JsonUtils.jsonNodeToObject(jsonNode, Schema.class);
SchemaUtils.validate(_schema);
- reader = new ObjectMapper().readerFor(SchemaWithMetaData.class);
- _schemaWithMetaData = reader.readValue(jsonNode);
+ _schemaWithMetaData = JsonUtils.jsonNodeToObject(jsonNode,
SchemaWithMetaData.class);
_schemaWithMetaData.getDimensionFieldSpecs().forEach(fieldMetadata -> {
_metaDataMap.put(fieldMetadata.getName(), fieldMetadata);
});
diff --git
a/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotControllerAppConfigsTest.java
b/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotControllerAppConfigsTest.java
index 5811ef6a2e..7b95a68dd4 100644
---
a/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotControllerAppConfigsTest.java
+++
b/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotControllerAppConfigsTest.java
@@ -18,11 +18,11 @@
*/
package org.apache.pinot.controller.api;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import org.apache.pinot.common.utils.PinotAppConfigs;
import org.apache.pinot.controller.ControllerConf;
import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.apache.pinot.spi.utils.Obfuscator;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
@@ -55,8 +55,7 @@ public class PinotControllerAppConfigsTest {
String configsJson =
ControllerTest.sendGetRequest(TEST_INSTANCE.getControllerRequestURLBuilder().forAppConfigs());
- ObjectMapper mapper = new ObjectMapper();
- PinotAppConfigs actual = mapper.readValue(configsJson,
PinotAppConfigs.class);
+ PinotAppConfigs actual = JsonUtils.stringToObject(configsJson,
PinotAppConfigs.class);
// RuntimeConfig is not checked as it has information that can change
during the test run.
// Also, some of the system configs can change, so compare the ones that
don't.
@@ -72,7 +71,7 @@ public class PinotControllerAppConfigsTest {
// tests Equals on obfuscated expected and actual
Obfuscator obfuscator = new Obfuscator();
String obfuscatedExpectedJson = obfuscator.toJsonString(expected);
- PinotAppConfigs obfuscatedExpected =
mapper.readValue(obfuscatedExpectedJson, PinotAppConfigs.class);
+ PinotAppConfigs obfuscatedExpected =
JsonUtils.stringToObject(obfuscatedExpectedJson, PinotAppConfigs.class);
Assert.assertEquals(actual.getJvmConfig(),
obfuscatedExpected.getJvmConfig());
Assert.assertEquals(actual.getPinotConfig(),
obfuscatedExpected.getPinotConfig());
}
diff --git
a/pinot-controller/src/test/java/org/apache/pinot/controller/recommender/TestConfigEngine.java
b/pinot-controller/src/test/java/org/apache/pinot/controller/recommender/TestConfigEngine.java
index c99492d7bb..7f96d8378b 100644
---
a/pinot-controller/src/test/java/org/apache/pinot/controller/recommender/TestConfigEngine.java
+++
b/pinot-controller/src/test/java/org/apache/pinot/controller/recommender/TestConfigEngine.java
@@ -18,7 +18,6 @@
*/
package org.apache.pinot.controller.recommender;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
import java.net.URL;
@@ -40,6 +39,7 @@ import
org.apache.pinot.controller.recommender.rules.io.configs.SegmentSizeRecom
import org.apache.pinot.controller.recommender.rules.utils.FixedLenBitset;
import
org.apache.pinot.controller.recommender.rules.utils.QueryInvertedSortedIndexRecommender;
import org.apache.pinot.spi.data.FieldSpec;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
@@ -52,12 +52,11 @@ import static org.testng.Assert.*;
public class TestConfigEngine {
private static final Logger LOGGER =
LoggerFactory.getLogger(TestConfigEngine.class);
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private InputManager _input;
void loadInput(String fName)
throws InvalidInputException, IOException {
- _input = OBJECT_MAPPER.readValue(readInputToStr(fName),
InputManager.class);
+ _input = JsonUtils.stringToObject(readInputToStr(fName),
InputManager.class);
_input.init();
}
@@ -500,7 +499,7 @@ public class TestConfigEngine {
throws IOException, InvalidInputException {
String input = readInputToStr(fileName);
String output = RecommenderDriver.run(input);
- return OBJECT_MAPPER.readValue(output, ConfigManager.class);
+ return JsonUtils.stringToObject(output, ConfigManager.class);
}
private void assertRealtimeProvisioningRecommendation(Map<String, String>
matrix) {
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/common/evaluators/DefaultJsonPathEvaluator.java
b/pinot-core/src/main/java/org/apache/pinot/core/common/evaluators/DefaultJsonPathEvaluator.java
index 75f70d7230..9e586961e3 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/common/evaluators/DefaultJsonPathEvaluator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/common/evaluators/DefaultJsonPathEvaluator.java
@@ -41,6 +41,7 @@ import org.apache.pinot.spi.utils.JsonUtils;
public final class DefaultJsonPathEvaluator implements JsonPathEvaluator {
+ // This ObjectMapper requires special configurations, hence we can't use
pinot JsonUtils here.
private static final ObjectMapper OBJECT_MAPPER_WITH_BIG_DECIMAL = new
ObjectMapper()
.configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true);
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/JsonExtractScalarTransformFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/JsonExtractScalarTransformFunction.java
index b30774a5f1..0d93e5038c 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/JsonExtractScalarTransformFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/JsonExtractScalarTransformFunction.java
@@ -56,6 +56,7 @@ import org.apache.pinot.spi.utils.JsonUtils;
public class JsonExtractScalarTransformFunction extends BaseTransformFunction {
public static final String FUNCTION_NAME = "jsonExtractScalar";
+ // This ObjectMapper requires special configurations, hence we can't use
pinot JsonUtils here.
private static final ObjectMapper OBJECT_MAPPER_WITH_BIG_DECIMAL = new
ObjectMapper()
.configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true);
diff --git
a/pinot-plugins/pinot-batch-ingestion/pinot-batch-ingestion-common/src/main/java/org/apache/pinot/plugin/ingestion/batch/common/SegmentGenerationTaskRunner.java
b/pinot-plugins/pinot-batch-ingestion/pinot-batch-ingestion-common/src/main/java/org/apache/pinot/plugin/ingestion/batch/common/SegmentGenerationTaskRunner.java
index 8757040df5..1dd0c6b9d5 100644
---
a/pinot-plugins/pinot-batch-ingestion/pinot-batch-ingestion-common/src/main/java/org/apache/pinot/plugin/ingestion/batch/common/SegmentGenerationTaskRunner.java
+++
b/pinot-plugins/pinot-batch-ingestion/pinot-batch-ingestion-common/src/main/java/org/apache/pinot/plugin/ingestion/batch/common/SegmentGenerationTaskRunner.java
@@ -19,7 +19,6 @@
package org.apache.pinot.plugin.ingestion.batch.common;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.Serializable;
import java.net.URISyntaxException;
import java.util.HashMap;
@@ -93,7 +92,7 @@ public class SegmentGenerationTaskRunner implements
Serializable {
if (configs == null) {
configs = new HashMap<>();
}
- JsonNode jsonNode = new ObjectMapper().valueToTree(configs);
+ JsonNode jsonNode = JsonUtils.objectToJsonNode(configs);
Class<?> clazz = PluginManager.get().loadClass(readerConfigClassName);
recordReaderConfig = (RecordReaderConfig)
JsonUtils.jsonNodeToObject(jsonNode, clazz);
}
diff --git
a/pinot-plugins/pinot-batch-ingestion/v0_deprecated/pinot-ingestion-common/src/main/java/org/apache/pinot/ingestion/common/DefaultControllerRestApi.java
b/pinot-plugins/pinot-batch-ingestion/v0_deprecated/pinot-ingestion-common/src/main/java/org/apache/pinot/ingestion/common/DefaultControllerRestApi.java
index f1006d3c28..ef75fc2038 100644
---
a/pinot-plugins/pinot-batch-ingestion/v0_deprecated/pinot-ingestion-common/src/main/java/org/apache/pinot/ingestion/common/DefaultControllerRestApi.java
+++
b/pinot-plugins/pinot-batch-ingestion/v0_deprecated/pinot-ingestion-common/src/main/java/org/apache/pinot/ingestion/common/DefaultControllerRestApi.java
@@ -19,7 +19,6 @@
package org.apache.pinot.ingestion.common;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Preconditions;
import java.io.IOException;
import java.io.InputStream;
@@ -184,14 +183,13 @@ public class DefaultControllerRestApi implements
ControllerRestApi {
@Override
public List<String> getAllSegments(String tableType) {
LOGGER.info("Getting all segments of table {}", _rawTableName);
- ObjectMapper objectMapper = new ObjectMapper();
for (PushLocation pushLocation : _pushLocations) {
try {
SimpleHttpResponse response =
_fileUploadDownloadClient.getHttpClient().sendGetRequest(FileUploadDownloadClient
.getRetrieveAllSegmentWithTableTypeHttpUri(pushLocation.getHost(),
pushLocation.getPort(), _rawTableName,
tableType));
JsonNode segmentList =
getSegmentsFromJsonSegmentAPI(response.getResponse(), tableType);
- return objectMapper.convertValue(segmentList, ArrayList.class);
+ return JsonUtils.jsonNodeToObject(segmentList, ArrayList.class);
} catch (Exception e) {
LOGGER.warn("Caught exception while getting all {} segments for table:
{} from push location: {}", tableType,
_rawTableName, pushLocation, e);
diff --git
a/pinot-plugins/pinot-environment/pinot-azure/src/main/java/org/apache/pinot/plugin/provider/AzureEnvironmentProvider.java
b/pinot-plugins/pinot-environment/pinot-azure/src/main/java/org/apache/pinot/plugin/provider/AzureEnvironmentProvider.java
index 234c5d37c1..5bf772e4db 100644
---
a/pinot-plugins/pinot-environment/pinot-azure/src/main/java/org/apache/pinot/plugin/provider/AzureEnvironmentProvider.java
+++
b/pinot-plugins/pinot-environment/pinot-azure/src/main/java/org/apache/pinot/plugin/provider/AzureEnvironmentProvider.java
@@ -19,7 +19,6 @@
package org.apache.pinot.plugin.provider;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import java.io.IOException;
@@ -40,6 +39,7 @@ import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.pinot.spi.env.PinotConfiguration;
import org.apache.pinot.spi.environmentprovider.PinotEnvironmentProvider;
+import org.apache.pinot.spi.utils.JsonUtils;
/**
@@ -107,9 +107,8 @@ public class AzureEnvironmentProvider implements
PinotEnvironmentProvider {
// For a sample response payload,
// check
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux
- final ObjectMapper objectMapper = new ObjectMapper();
try {
- final JsonNode jsonNode = objectMapper.readTree(responsePayload);
+ final JsonNode jsonNode = JsonUtils.stringToJsonNode(responsePayload);
final JsonNode computeNode = jsonNode.path(COMPUTE);
if (computeNode.isMissingNode()) {
diff --git
a/pinot-plugins/pinot-input-format/pinot-avro-base/src/test/java/org/apache/pinot/plugin/inputformat/avro/AvroRecordExtractorTest.java
b/pinot-plugins/pinot-input-format/pinot-avro-base/src/test/java/org/apache/pinot/plugin/inputformat/avro/AvroRecordExtractorTest.java
index 32469f01b3..7867aff1d1 100644
---
a/pinot-plugins/pinot-input-format/pinot-avro-base/src/test/java/org/apache/pinot/plugin/inputformat/avro/AvroRecordExtractorTest.java
+++
b/pinot-plugins/pinot-input-format/pinot-avro-base/src/test/java/org/apache/pinot/plugin/inputformat/avro/AvroRecordExtractorTest.java
@@ -18,8 +18,6 @@
*/
package org.apache.pinot.plugin.inputformat.avro;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import java.io.File;
import java.io.IOException;
@@ -47,6 +45,7 @@ import org.apache.pinot.spi.data.FieldSpec;
import org.apache.pinot.spi.data.readers.AbstractRecordExtractorTest;
import org.apache.pinot.spi.data.readers.GenericRow;
import org.apache.pinot.spi.data.readers.RecordReader;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -57,7 +56,6 @@ import static org.apache.avro.Schema.*;
* Tests the {@link AvroRecordExtractor} using a schema containing groovy
transform functions
*/
public class AvroRecordExtractorTest extends AbstractRecordExtractorTest {
- private static final ObjectMapper DEFAULT_MAPPER = new ObjectMapper();
private final File _dataFile = new File(_tempDir, "events.avro");
/**
@@ -123,8 +121,7 @@ public class AvroRecordExtractorTest extends
AbstractRecordExtractorTest {
Assert.assertEquals("Long",
genericRow.getValue(testColumnName).getClass().getSimpleName());
String jsonString = genericRecord.toString();
- Map<String, Object> jsonMap = DEFAULT_MAPPER.readValue(jsonString, new
TypeReference<Map<String, Object>>() {
- });
+ Map<String, Object> jsonMap = JsonUtils.stringToObject(jsonString,
JsonUtils.MAP_TYPE_REFERENCE);
// The data type got changed to Integer, which will then have to trigger
the convert method in
// DataTypeTransformer class.
Assert.assertEquals("Integer",
jsonMap.get(testColumnName).getClass().getSimpleName());
diff --git
a/pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/JSONMessageDecoder.java
b/pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/JSONMessageDecoder.java
index 822ac202ca..d3f52309b7 100644
---
a/pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/JSONMessageDecoder.java
+++
b/pinot-plugins/pinot-input-format/pinot-json/src/main/java/org/apache/pinot/plugin/inputformat/json/JSONMessageDecoder.java
@@ -18,9 +18,7 @@
*/
package org.apache.pinot.plugin.inputformat.json;
-import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
@@ -38,7 +36,6 @@ import org.slf4j.LoggerFactory;
*/
public class JSONMessageDecoder implements StreamMessageDecoder<byte[]> {
private static final Logger LOGGER =
LoggerFactory.getLogger(JSONMessageDecoder.class);
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final String JSON_RECORD_EXTRACTOR_CLASS =
"org.apache.pinot.plugin.inputformat.json.JSONRecordExtractor";
@@ -62,8 +59,7 @@ public class JSONMessageDecoder implements
StreamMessageDecoder<byte[]> {
public GenericRow decode(byte[] payload, GenericRow destination) {
try {
JsonNode message = JsonUtils.bytesToJsonNode(payload);
- Map<String, Object> from = OBJECT_MAPPER.convertValue(message, new
TypeReference<Map<String, Object>>() {
- });
+ Map<String, Object> from = JsonUtils.jsonNodeToMap(message);
_jsonRecordExtractor.extract(from, destination);
return destination;
} catch (Exception e) {
diff --git
a/pinot-plugins/pinot-stream-ingestion/pinot-kafka-base/src/test/java/org/apache/pinot/plugin/stream/kafka/KafkaJSONMessageDecoderTest.java
b/pinot-plugins/pinot-stream-ingestion/pinot-kafka-base/src/test/java/org/apache/pinot/plugin/stream/kafka/KafkaJSONMessageDecoderTest.java
index 52ae75f537..dc4810d611 100644
---
a/pinot-plugins/pinot-stream-ingestion/pinot-kafka-base/src/test/java/org/apache/pinot/plugin/stream/kafka/KafkaJSONMessageDecoderTest.java
+++
b/pinot-plugins/pinot-stream-ingestion/pinot-kafka-base/src/test/java/org/apache/pinot/plugin/stream/kafka/KafkaJSONMessageDecoderTest.java
@@ -19,7 +19,6 @@
package org.apache.pinot.plugin.stream.kafka;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
@@ -28,14 +27,13 @@ import java.util.Map;
import org.apache.pinot.spi.data.FieldSpec;
import org.apache.pinot.spi.data.Schema;
import org.apache.pinot.spi.data.readers.GenericRow;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.Assert;
import org.testng.annotations.Test;
public class KafkaJSONMessageDecoderTest {
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
-
@Test
public void testJsonDecoderWithoutOutgoingTimeSpec()
throws Exception {
@@ -85,7 +83,7 @@ public class KafkaJSONMessageDecoderTest {
GenericRow r = new GenericRow();
String line = reader.readLine();
while (line != null) {
- JsonNode jsonNode = OBJECT_MAPPER.reader().readTree(line);
+ JsonNode jsonNode = JsonUtils.DEFAULT_READER.readTree(line);
decoder.decode(line.getBytes(), r);
for (String field : sourceFields.keySet()) {
Object actualValue = r.getValue(field);
diff --git
a/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
b/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
index 306e3dfa72..ad7bdcf2c6 100644
---
a/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
+++
b/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
@@ -19,7 +19,6 @@
package org.apache.pinot.server.api;
import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.ws.rs.core.Response;
@@ -27,6 +26,7 @@ import org.apache.pinot.common.utils.PinotAppConfigs;
import org.apache.pinot.server.starter.helix.DefaultHelixStarterServerConfig;
import org.apache.pinot.spi.env.PinotConfiguration;
import org.apache.pinot.spi.utils.CommonConstants;
+import org.apache.pinot.spi.utils.JsonUtils;
import org.apache.pinot.spi.utils.NetUtils;
import org.apache.pinot.spi.utils.Obfuscator;
import org.testng.Assert;
@@ -58,8 +58,7 @@ public class PinotServerAppConfigsTest extends
BaseResourceTest {
Response response =
_webTarget.path("/appconfigs").request().get(Response.class);
String configsJson = response.readEntity(String.class);
- ObjectMapper mapper = new ObjectMapper();
- PinotAppConfigs actual = mapper.readValue(configsJson,
PinotAppConfigs.class);
+ PinotAppConfigs actual = JsonUtils.stringToObject(configsJson,
PinotAppConfigs.class);
// RuntimeConfig is not checked as it has information that can change
during the test run.
// Also, some of the system configs can change, so compare the ones that
don't.
@@ -75,7 +74,7 @@ public class PinotServerAppConfigsTest extends
BaseResourceTest {
// tests Equals on obfuscated expected and actual
Obfuscator obfuscator = new Obfuscator();
String obfuscatedExpectedJson = obfuscator.toJsonString(expected);
- PinotAppConfigs obfuscatedExpected =
mapper.readValue(obfuscatedExpectedJson, PinotAppConfigs.class);
+ PinotAppConfigs obfuscatedExpected =
JsonUtils.stringToObject(obfuscatedExpectedJson, PinotAppConfigs.class);
Assert.assertEquals(actual.getJvmConfig(),
obfuscatedExpected.getJvmConfig());
Assert.assertEquals(actual.getPinotConfig(),
obfuscatedExpected.getPinotConfig());
}
diff --git
a/pinot-spi/src/main/java/org/apache/pinot/spi/data/readers/RecordReaderFactory.java
b/pinot-spi/src/main/java/org/apache/pinot/spi/data/readers/RecordReaderFactory.java
index 7492af7ce9..fd7fa1c0f2 100644
---
a/pinot-spi/src/main/java/org/apache/pinot/spi/data/readers/RecordReaderFactory.java
+++
b/pinot-spi/src/main/java/org/apache/pinot/spi/data/readers/RecordReaderFactory.java
@@ -19,7 +19,6 @@
package org.apache.pinot.spi.data.readers;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
@@ -132,7 +131,7 @@ public class RecordReaderFactory {
throws ClassNotFoundException, IOException {
String readerConfigClassName =
getRecordReaderConfigClassName(fileFormat.toString());
if (readerConfigClassName != null) {
- JsonNode jsonNode = new ObjectMapper().valueToTree(configs);
+ JsonNode jsonNode = JsonUtils.objectToJsonNode(configs);
Class<?> clazz = PluginManager.get().loadClass(readerConfigClassName);
return (RecordReaderConfig) JsonUtils.jsonNodeToObject(jsonNode, clazz);
}
diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/JsonUtils.java
b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/JsonUtils.java
index f173d5ff13..13b638915d 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/JsonUtils.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/JsonUtils.java
@@ -81,12 +81,12 @@ public class JsonUtils {
public static final ObjectReader DEFAULT_READER = DEFAULT_MAPPER.reader();
public static final ObjectWriter DEFAULT_WRITER = DEFAULT_MAPPER.writer();
public static final ObjectWriter DEFAULT_PRETTY_WRITER =
DEFAULT_MAPPER.writerWithDefaultPrettyPrinter();
- private static final TypeReference<HashMap<String, Object>>
GENERIC_JSON_TYPE =
+ public static final TypeReference<HashMap<String, Object>>
MAP_TYPE_REFERENCE =
new TypeReference<HashMap<String, Object>>() {
};
public static <T> T stringToObject(String jsonString, Class<T> valueType)
- throws IOException {
+ throws JsonProcessingException {
return DEFAULT_READER.forType(valueType).readValue(jsonString);
}
@@ -101,10 +101,10 @@ public class JsonUtils {
Class<T> valueType)
throws IOException {
T instance = DEFAULT_READER.forType(valueType).readValue(jsonString);
- Map<String, Object> inputJsonMap =
flatten(DEFAULT_MAPPER.readValue(jsonString, GENERIC_JSON_TYPE));
+ Map<String, Object> inputJsonMap =
flatten(DEFAULT_MAPPER.readValue(jsonString, MAP_TYPE_REFERENCE));
String instanceJson = DEFAULT_MAPPER.writeValueAsString(instance);
- Map<String, Object> instanceJsonMap =
flatten(DEFAULT_MAPPER.readValue(instanceJson, GENERIC_JSON_TYPE));
+ Map<String, Object> instanceJsonMap =
flatten(DEFAULT_MAPPER.readValue(instanceJson, MAP_TYPE_REFERENCE));
MapDifference<String, Object> difference = Maps.difference(inputJsonMap,
instanceJsonMap);
return Pair.of(instance, difference.entriesOnlyOnLeft());
@@ -166,11 +166,12 @@ public class JsonUtils {
/**
* Reads the first json object from the file that can contain multiple
objects
*/
+ @Nullable
public static JsonNode fileToFirstJsonNode(File jsonFile)
throws IOException {
- try (InputStream inputStream = new FileInputStream(jsonFile)) {
- JsonFactory jf = new JsonFactory();
- JsonParser jp = jf.createParser(inputStream);
+ JsonFactory jf = new JsonFactory();
+ try (InputStream inputStream = new FileInputStream(jsonFile);
+ JsonParser jp = jf.createParser(inputStream)) {
jp.setCodec(DEFAULT_MAPPER);
jp.nextToken();
if (jp.hasCurrentToken()) {
@@ -210,6 +211,11 @@ public class JsonUtils {
return DEFAULT_READER.forType(valueTypeRef).readValue(jsonNode);
}
+ public static Map<String, Object> jsonNodeToMap(JsonNode jsonNode)
+ throws IOException {
+ return DEFAULT_READER.forType(MAP_TYPE_REFERENCE).readValue(jsonNode);
+ }
+
public static String objectToString(Object object)
throws JsonProcessingException {
return DEFAULT_WRITER.writeValueAsString(object);
@@ -475,6 +481,7 @@ public class JsonUtils {
if (fieldsToUnnest == null) {
fieldsToUnnest = new ArrayList<>();
}
+ Preconditions.checkNotNull(jsonNode, "the JSON data shall be an object but
it is null");
Preconditions.checkState(jsonNode.isObject(), "the JSON data shall be an
object");
return getPinotSchemaFromJsonNode(jsonNode, fieldTypeMap, timeUnit,
fieldsToUnnest, delimiter,
collectionNotUnnestedToJson);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]