From 1546a0f938ddabd0816bb606c9633e064b2036f8 Mon Sep 17 00:00:00 2001 From: Thomas Segismont Date: Wed, 8 Nov 2023 15:49:25 +0100 Subject: [PATCH] Mongo Client should not require Jackson Databind (#312) See #293 Signed-off-by: Thomas Segismont --- pom.xml | 5 --- .../vertx/ext/mongo/impl/MongoClientImpl.java | 44 +++++++++++-------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/pom.xml b/pom.xml index 93b66e56..284a7ac0 100644 --- a/pom.xml +++ b/pom.xml @@ -76,11 +76,6 @@ reactive-streams 1.0.3 - - com.fasterxml.jackson.core - jackson-databind - test - org.testcontainers mongodb diff --git a/src/main/java/io/vertx/ext/mongo/impl/MongoClientImpl.java b/src/main/java/io/vertx/ext/mongo/impl/MongoClientImpl.java index b03faf6e..b64a146f 100644 --- a/src/main/java/io/vertx/ext/mongo/impl/MongoClientImpl.java +++ b/src/main/java/io/vertx/ext/mongo/impl/MongoClientImpl.java @@ -31,8 +31,8 @@ import io.vertx.codegen.annotations.Nullable; import io.vertx.core.*; import io.vertx.core.impl.ContextInternal; -import io.vertx.core.impl.future.PromiseInternal; import io.vertx.core.impl.VertxInternal; +import io.vertx.core.impl.future.PromiseInternal; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import io.vertx.core.shareddata.LocalMap; @@ -41,7 +41,6 @@ import io.vertx.ext.mongo.BulkWriteOptions; import io.vertx.ext.mongo.CountOptions; import io.vertx.ext.mongo.CreateCollectionOptions; -import io.vertx.ext.mongo.FindOptions; import io.vertx.ext.mongo.IndexModel; import io.vertx.ext.mongo.IndexOptions; import io.vertx.ext.mongo.MongoClient; @@ -55,11 +54,7 @@ import org.reactivestreams.Publisher; import java.io.IOException; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -264,9 +259,12 @@ public MongoClient updateCollectionWithOptions(String collection, JsonObject que Bson bupdate = wrap(encodeKeyWhenUseObjectId(generateIdIfNeeded(query, update, options))); com.mongodb.client.model.UpdateOptions updateOptions = new com.mongodb.client.model.UpdateOptions().upsert(options.isUpsert()); - if (options.getArrayFilters() != null && !options.getArrayFilters().isEmpty()) { - final List bArrayFilters = new ArrayList<>(options.getArrayFilters().size()); - options.getArrayFilters().getList().forEach(entry -> bArrayFilters.add(wrap(JsonObject.mapFrom(entry)))); + JsonArray arrayFilters = options.getArrayFilters(); + if (arrayFilters != null && !arrayFilters.isEmpty()) { + List bArrayFilters = new ArrayList<>(arrayFilters.size()); + for (int i = 0; i < arrayFilters.size(); i++) { + bArrayFilters.add(wrap(arrayFilters.getJsonObject(i))); + } updateOptions.arrayFilters(bArrayFilters); } if (options.getHint() != null) { @@ -313,9 +311,12 @@ public MongoClient updateCollectionWithOptions(String collection, JsonObject que } com.mongodb.client.model.UpdateOptions updateOptions = new com.mongodb.client.model.UpdateOptions().upsert(options.isUpsert()); - if (options.getArrayFilters() != null && !options.getArrayFilters().isEmpty()) { - final List bArrayFilters = new ArrayList<>(options.getArrayFilters().size()); - options.getArrayFilters().getList().forEach(entry -> bArrayFilters.add(wrap(JsonObject.mapFrom(entry)))); + JsonArray arrayFilters = options.getArrayFilters(); + if (arrayFilters != null && !arrayFilters.isEmpty()) { + List bArrayFilters = new ArrayList<>(arrayFilters.size()); + for (int i = 0; i < arrayFilters.size(); i++) { + bArrayFilters.add(wrap(arrayFilters.getJsonObject(i))); + } updateOptions.arrayFilters(bArrayFilters); } if (options.getHint() != null) { @@ -495,9 +496,12 @@ public MongoClient findOneAndUpdateWithOptions(String collection, JsonObject que foauOptions.projection(wrap(findOptions.getFields())); foauOptions.upsert(updateOptions.isUpsert()); foauOptions.returnDocument(updateOptions.isReturningNewDocument() ? ReturnDocument.AFTER : ReturnDocument.BEFORE); - if (updateOptions.getArrayFilters() != null && !updateOptions.getArrayFilters().isEmpty()) { - final List bArrayFilters = new ArrayList<>(updateOptions.getArrayFilters().size()); - updateOptions.getArrayFilters().getList().forEach(entry -> bArrayFilters.add(wrap(JsonObject.mapFrom(entry)))); + JsonArray arrayFilters = updateOptions.getArrayFilters(); + if (arrayFilters != null && !arrayFilters.isEmpty()) { + List bArrayFilters = new ArrayList<>(arrayFilters.size()); + for (int i = 0; i < arrayFilters.size(); i++) { + bArrayFilters.add(wrap(arrayFilters.getJsonObject(i))); + } foauOptions.arrayFilters(bArrayFilters); } if (findOptions.getHint() != null) { @@ -1142,7 +1146,9 @@ public ReadStream> watch(final String collectio requireNonNull(pipeline, PIPELINE_CANNOT_BE_NULL); MongoCollection coll = getCollection(collection); final List bpipeline = new ArrayList<>(pipeline.size()); - pipeline.getList().forEach(entry -> bpipeline.add(wrap(JsonObject.mapFrom(entry)))); + for (int i = 0; i < pipeline.size(); i++) { + bpipeline.add(wrap(pipeline.getJsonObject(i))); + } ChangeStreamPublisher changeStreamPublisher = coll.watch(bpipeline, JsonObject.class); if (withUpdatedDoc) { // By default, only "insert" and "replace" operations return fullDocument @@ -1175,7 +1181,9 @@ private AggregatePublisher doAggregate(final String collection, fina requireNonNull(aggregateOptions, "aggregateOptions cannot be null"); final MongoCollection coll = getCollection(collection); final List bpipeline = new ArrayList<>(pipeline.size()); - pipeline.getList().forEach(entry -> bpipeline.add(wrap(JsonObject.mapFrom(entry)))); + for (int i = 0; i < pipeline.size(); i++) { + bpipeline.add(wrap(pipeline.getJsonObject(i))); + } AggregatePublisher aggregate = coll.aggregate(bpipeline, JsonObject.class); if(aggregateOptions.getCollation() != null) {