diff options
11 files changed, 66 insertions, 25 deletions
diff --git a/cloud-tenant-base-dependencies-enforcer/pom.xml b/cloud-tenant-base-dependencies-enforcer/pom.xml index 8bb7b75be89..dca181dcf36 100644 --- a/cloud-tenant-base-dependencies-enforcer/pom.xml +++ b/cloud-tenant-base-dependencies-enforcer/pom.xml @@ -41,8 +41,8 @@ <hk2.version>2.5.0-b32</hk2.version> <hk2.osgi-resource-locator.version>1.0.1</hk2.osgi-resource-locator.version> - <jackson2.version>2.8.11</jackson2.version> - <jackson-databind.version>${jackson2.version}.6</jackson-databind.version> + <jackson2.version>2.12.1</jackson2.version> + <jackson-databind.version>${jackson2.version}</jackson-databind.version> <javassist.version>3.20.0-GA</javassist.version> <javax.annotation-api.version>1.2</javax.annotation-api.version> <javax.validation-api.version>1.1.0.Final</javax.validation-api.version> @@ -80,6 +80,7 @@ <include>com.fasterxml.jackson.datatype:jackson-datatype-jdk8:[${jackson2.version}]:jar:provided</include> <include>com.fasterxml.jackson.datatype:jackson-datatype-jsr310:[${jackson2.version}]:jar:provided</include> + <!-- Use version range for jax deps, because jersey and junit affect the versions. --> <include>com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:[2.5.4, ${jackson2.version}]:jar:provided</include> <include>com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:[2.5.4, ${jackson2.version}]:jar:provided</include> @@ -94,6 +95,8 @@ <include>com.sun.xml.bind:jaxb-core:[${jaxb.version}]:jar:provided</include> <include>com.sun.xml.bind:jaxb-impl:[${jaxb.version}]:jar:provided</include> <include>commons-logging:commons-logging:[1.1.3]:jar:provided</include> + <include>jakarta.activation:jakarta.activation-api:[1.2.1]:jar:provided</include> + <include>jakarta.xml.bind:jakarta.xml.bind-api:[2.3.2]:jar:provided</include> <include>javax.annotation:javax.annotation-api:[${javax.annotation-api.version}]:jar:provided</include> <include>javax.inject:javax.inject:[${javax.inject.version}]:jar:provided</include> <include>javax.servlet:javax.servlet-api:[${javax.servlet-api.version}]:jar:provided</include> diff --git a/container-dependencies-enforcer/pom.xml b/container-dependencies-enforcer/pom.xml index 224fd47b256..c2d0fd8510d 100644 --- a/container-dependencies-enforcer/pom.xml +++ b/container-dependencies-enforcer/pom.xml @@ -90,6 +90,8 @@ <include>com.sun.xml.bind:jaxb-core:[${jaxb.version}]:jar:provided</include> <include>com.sun.xml.bind:jaxb-impl:[${jaxb.version}]:jar:provided</include> <include>commons-logging:commons-logging:[1.1.3]:jar:provided</include> + <include>jakarta.activation:jakarta.activation-api:[1.2.1]:jar:provided</include> + <include>jakarta.xml.bind:jakarta.xml.bind-api:[2.3.2]:jar:provided</include> <include>javax.annotation:javax.annotation-api:[${javax.annotation-api.version}]:jar:provided</include> <include>javax.inject:javax.inject:[${javax.inject.version}]:jar:provided</include> <include>javax.servlet:javax.servlet-api:[${javax.servlet-api.version}]:jar:provided</include> diff --git a/container-dependency-versions/pom.xml b/container-dependency-versions/pom.xml index 08d6e0103bf..dd95f8bfd34 100644 --- a/container-dependency-versions/pom.xml +++ b/container-dependency-versions/pom.xml @@ -458,8 +458,8 @@ <!-- and then verify by doing: ' ls -l vespa/vespa_jersey2/target/dependency' --> <hk2.version>2.5.0-b32</hk2.version> <hk2.osgi-resource-locator.version>1.0.1</hk2.osgi-resource-locator.version> - <jackson2.version>2.8.11</jackson2.version> - <jackson-databind.version>${jackson2.version}.6</jackson-databind.version> + <jackson2.version>2.12.1</jackson2.version> + <jackson-databind.version>${jackson2.version}</jackson-databind.version> <javassist.version>3.20.0-GA</javassist.version> <javax.annotation-api.version>1.2</javax.annotation-api.version> <javax.validation-api.version>1.1.0.Final</javax.validation-api.version> diff --git a/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java b/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java index 48003f6586f..d0df131ae31 100644 --- a/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java @@ -1221,7 +1221,7 @@ public class JsonRendererTestCase { + "}"; assertEquals( "Unexpected character ('a' (code 97)): was expecting comma to separate Object entries\n" + - " at [Source: { \"root\": { \"invalidvalue\": 1adsf, }}; line: 1, column: 41]", + " at [Source: (String)\"{ \"root\": { \"invalidvalue\": 1adsf, }}\"; line: 1, column: 41]", validateJSON(json)); } diff --git a/document/src/main/java/com/yahoo/document/json/JsonFeedReader.java b/document/src/main/java/com/yahoo/document/json/JsonFeedReader.java index 3b275d571e0..1f2731d5fbe 100644 --- a/document/src/main/java/com/yahoo/document/json/JsonFeedReader.java +++ b/document/src/main/java/com/yahoo/document/json/JsonFeedReader.java @@ -1,9 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.document.json; -import java.io.InputStream; - import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonFactoryBuilder; import com.yahoo.document.DocumentOperation; import com.yahoo.document.DocumentPut; import com.yahoo.document.DocumentRemove; @@ -15,6 +14,8 @@ import com.yahoo.vespaxmlparser.FeedOperation; import com.yahoo.vespaxmlparser.FeedReader; import com.yahoo.vespaxmlparser.RemoveFeedOperation; +import java.io.InputStream; + /** * Facade between JsonReader and the FeedReader API. @@ -29,7 +30,7 @@ public class JsonFeedReader implements FeedReader { private final JsonReader reader; private InputStream stream; - private static final JsonFactory jsonFactory = new JsonFactory().disable(JsonFactory.Feature.CANONICALIZE_FIELD_NAMES); + private static final JsonFactory jsonFactory = new JsonFactoryBuilder().disable(JsonFactory.Feature.CANONICALIZE_FIELD_NAMES).build(); public JsonFeedReader(InputStream stream, DocumentTypeManager docMan) { reader = new JsonReader(docMan, stream, jsonFactory); diff --git a/vespa-hadoop/src/main/java/com/yahoo/vespa/hadoop/mapreduce/VespaSimpleJsonInputFormat.java b/vespa-hadoop/src/main/java/com/yahoo/vespa/hadoop/mapreduce/VespaSimpleJsonInputFormat.java index 72e38b53f98..62dd9069b59 100644 --- a/vespa-hadoop/src/main/java/com/yahoo/vespa/hadoop/mapreduce/VespaSimpleJsonInputFormat.java +++ b/vespa-hadoop/src/main/java/com/yahoo/vespa/hadoop/mapreduce/VespaSimpleJsonInputFormat.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.hadoop.mapreduce; import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonFactoryBuilder; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.ObjectMapper; @@ -54,8 +55,7 @@ public class VespaSimpleJsonInputFormat extends FileInputFormat<Text, NullWritab } remaining = fileSplit.getLength(); - - JsonFactory factory = new JsonFactory().disable(JsonFactory.Feature.CANONICALIZE_FIELD_NAMES); + JsonFactory factory = new JsonFactoryBuilder().disable(JsonFactory.Feature.CANONICALIZE_FIELD_NAMES).build(); parser = factory.createParser(new BufferedInputStream(stream)); parser.setCodec(new ObjectMapper()); parser.nextToken(); diff --git a/vespa-http-client/pom.xml b/vespa-http-client/pom.xml index e091af1f4f1..496b8043abb 100644 --- a/vespa-http-client/pom.xml +++ b/vespa-http-client/pom.xml @@ -43,6 +43,16 @@ <artifactId>jackson-dataformat-xml</artifactId> </dependency> <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jdk8</artifactId> + <scope>compile</scope> + </dependency> + <dependency> <groupId>io.airlift</groupId> <artifactId>airline</artifactId> <version>0.6</version> diff --git a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/JsonReader.java b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/JsonReader.java index 7c19846b273..f4ac3326158 100644 --- a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/JsonReader.java +++ b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/JsonReader.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.http.client.core; import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonFactoryBuilder; import com.fasterxml.jackson.core.JsonParser; import com.yahoo.vespa.http.client.FeedClient; @@ -38,7 +39,7 @@ public class JsonReader { */ public static void read(InputStream inputStream, FeedClient feedClient, AtomicInteger numSent) { try (InputStreamJsonElementBuffer jsonElementBuffer = new InputStreamJsonElementBuffer(inputStream)) { - JsonFactory jfactory = new JsonFactory().disable(JsonFactory.Feature.CANONICALIZE_FIELD_NAMES); + JsonFactory jfactory = new JsonFactoryBuilder().disable(JsonFactory.Feature.CANONICALIZE_FIELD_NAMES).build(); JsonParser jParser = jfactory.createParser(jsonElementBuffer); while (true) { int documentStart = (int) jParser.getCurrentLocation().getCharOffset(); diff --git a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/communication/ClusterConnection.java b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/communication/ClusterConnection.java index 8e55e59b3f4..16afd001c46 100644 --- a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/communication/ClusterConnection.java +++ b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/communication/ClusterConnection.java @@ -1,9 +1,10 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.http.client.core.communication; -import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.yahoo.vespa.http.client.config.Cluster; import com.yahoo.vespa.http.client.config.ConnectionParams; import com.yahoo.vespa.http.client.config.Endpoint; @@ -27,8 +28,7 @@ import java.util.concurrent.TimeUnit; */ public class ClusterConnection implements AutoCloseable { - private static final JsonFactory jsonFactory = new JsonFactory(); - private static final ObjectMapper objectMapper = new ObjectMapper(); + private static ObjectMapper jsonMapper = createMapper(); private final List<IOThread> ioThreads = new ArrayList<>(); private final int clusterId; @@ -102,6 +102,13 @@ public class ClusterConnection implements AutoCloseable { } } + private static ObjectMapper createMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new Jdk8Module()); + mapper.registerModule(new JavaTimeModule()); + return mapper; + } + public int getClusterId() { return clusterId; } @@ -149,7 +156,7 @@ public class ClusterConnection implements AutoCloseable { public String getStatsAsJSon() throws IOException { StringWriter stringWriter = new StringWriter(); - JsonGenerator jsonGenerator = jsonFactory.createGenerator(stringWriter); + JsonGenerator jsonGenerator = jsonMapper.createGenerator(stringWriter); jsonGenerator.writeStartObject(); jsonGenerator.writeArrayFieldStart("session"); for (IOThread ioThread : ioThreads) { @@ -160,7 +167,7 @@ public class ClusterConnection implements AutoCloseable { jsonGenerator.writeEndObject(); jsonGenerator.writeFieldName("stats"); IOThread.ConnectionStats connectionStats = ioThread.getConnectionStats(); - objectMapper.writeValue(jsonGenerator, connectionStats); + jsonMapper.writeValue(jsonGenerator, connectionStats); jsonGenerator.writeEndObject(); } jsonGenerator.writeEndArray(); diff --git a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/operationProcessor/OperationStats.java b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/operationProcessor/OperationStats.java index 22bc34f7dbe..c571b5d418b 100644 --- a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/operationProcessor/OperationStats.java +++ b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/operationProcessor/OperationStats.java @@ -1,9 +1,10 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.http.client.core.operationProcessor; -import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.yahoo.vespa.http.client.config.SessionParams; import com.yahoo.vespa.http.client.core.communication.ClusterConnection; @@ -13,7 +14,8 @@ import java.util.List; public class OperationStats { - private static JsonFactory jsonFactory = new JsonFactory(); + private static ObjectMapper jsonMapper = createMapper(); + private final String sessionParamsAsXmlString; private List<ClusterConnection> clusters; private IncompleteResultsThrottler throttler; @@ -27,12 +29,18 @@ public class OperationStats { this.throttler = throttler; } + private static ObjectMapper createMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new Jdk8Module()); + mapper.registerModule(new JavaTimeModule()); + return mapper; + } + private String generateSessionParamsAsXmlString(final SessionParams sessionParams) { - ObjectMapper objectMapper = new ObjectMapper(); StringWriter stringWriter = new StringWriter(); try { - JsonGenerator jsonGenerator = jsonFactory.createGenerator(stringWriter); - objectMapper.writeValue(jsonGenerator, sessionParams); // TODO SessionParams should not be blindly serialized. This may serialize objects that are not really serializable. + JsonGenerator jsonGenerator = jsonMapper.createGenerator(stringWriter); + jsonMapper.writeValue(jsonGenerator, sessionParams); // TODO SessionParams should not be blindly serialized. This may serialize objects that are not really serializable. return stringWriter.toString(); } catch (IOException e) { return e.getMessage(); @@ -42,7 +50,7 @@ public class OperationStats { public String getStatsAsJson() { try { StringWriter stringWriter = new StringWriter(); - JsonGenerator jsonGenerator = jsonFactory.createGenerator(stringWriter); + JsonGenerator jsonGenerator = jsonMapper.createGenerator(stringWriter); jsonGenerator.writeStartObject(); jsonGenerator.writeArrayFieldStart("clusters"); for (ClusterConnection cluster : clusters) { diff --git a/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/JsonTestHelper.java b/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/JsonTestHelper.java index 0081497fb20..b2c8e7c2f4f 100644 --- a/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/JsonTestHelper.java +++ b/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/JsonTestHelper.java @@ -4,16 +4,25 @@ package com.yahoo.vespa.http.client; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.google.common.base.Joiner; import org.hamcrest.MatcherAssert; -import static uk.co.datumedge.hamcrest.json.SameJSONAs.sameJSONAs; - import java.io.UncheckedIOException; +import static uk.co.datumedge.hamcrest.json.SameJSONAs.sameJSONAs; + public class JsonTestHelper { - private static final ObjectMapper mapper = new ObjectMapper(); + private static final ObjectMapper mapper = createMapper(); + + private static ObjectMapper createMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new Jdk8Module()); + mapper.registerModule(new JavaTimeModule()); + return mapper; + } /** * Convenience method to input JSON without escaping double quotes and newlines |