This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 48d684500f NIFI-14272 Refactored MongoDB Client Creation (#9723)
48d684500f is described below
commit 48d684500f6ad70f65bfd510db054590c5bc74a9
Author: Pierre Villard <[email protected]>
AuthorDate: Mon Feb 17 19:55:12 2025 +0100
NIFI-14272 Refactored MongoDB Client Creation (#9723)
Signed-off-by: David Handermann <[email protected]>
---
.../apache/nifi/processors/mongodb/PutMongoIT.java | 2 +
.../nifi/mongodb/MongoDBControllerService.java | 61 ++++++++++------------
2 files changed, 30 insertions(+), 33 deletions(-)
diff --git
a/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
b/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
index 717c8de418..e1e6eeeb1f 100644
---
a/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
+++
b/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
@@ -411,6 +411,8 @@ public class PutMongoIT extends MongoWriteTestBase {
MockFlowFile out =
runner.getFlowFilesForRelationship(PutMongo.REL_SUCCESS).getFirst();
out.assertContentEquals(bytes);
+ assertEquals(runner.getProvenanceEvents().get(0).getTransitUri(),
MONGO_CONTAINER.getConnectionString());
+
// verify 1 doc inserted into the collection
assertEquals(1, collection.countDocuments());
assertEquals(doc, collection.find().first());
diff --git
a/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-services/src/main/java/org/apache/nifi/mongodb/MongoDBControllerService.java
b/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-services/src/main/java/org/apache/nifi/mongodb/MongoDBControllerService.java
index 56bf3fd008..17d05c6715 100644
---
a/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-services/src/main/java/org/apache/nifi/mongodb/MongoDBControllerService.java
+++
b/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-services/src/main/java/org/apache/nifi/mongodb/MongoDBControllerService.java
@@ -19,17 +19,11 @@ package org.apache.nifi.mongodb;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
-import com.mongodb.client.MongoClient;
+import com.mongodb.MongoCredential;
import com.mongodb.WriteConcern;
+import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
-
-import java.util.Arrays;
-import java.util.List;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-import javax.net.ssl.SSLContext;
import org.apache.nifi.annotation.documentation.CapabilityDescription;
import org.apache.nifi.annotation.documentation.Tags;
import org.apache.nifi.annotation.lifecycle.OnDisabled;
@@ -43,6 +37,12 @@ import org.apache.nifi.logging.ComponentLog;
import org.apache.nifi.ssl.SSLContextProvider;
import org.bson.Document;
+import javax.net.ssl.SSLContext;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
@Tags({"mongo", "mongodb", "service"})
@CapabilityDescription(
"Provides a controller service that configures a connection to MongoDB
and provides access to that connection to " +
@@ -53,7 +53,7 @@ public class MongoDBControllerService extends
AbstractControllerService implemen
@OnEnabled
public void onEnabled(final ConfigurationContext context) {
- this.uri = getURI(context);
+ this.uri =
context.getProperty(URI).evaluateAttributeExpressions().getValue();
this.mongoClient = createClient(context, this.mongoClient);
}
@@ -90,8 +90,25 @@ public class MongoDBControllerService extends
AbstractControllerService implemen
}
try {
- final String uri = getURI(context);
- final MongoClientSettings.Builder builder = getClientSettings(uri,
sslContext);
+ final String uri =
context.getProperty(URI).evaluateAttributeExpressions().getValue();
+ final String user =
context.getProperty(DB_USER).evaluateAttributeExpressions().getValue();
+ final String passw =
context.getProperty(DB_PASSWORD).evaluateAttributeExpressions().getValue();
+
+ final MongoClientSettings.Builder builder =
MongoClientSettings.builder();
+ final ConnectionString cs = new ConnectionString(uri);
+
+ if (user != null && passw != null) {
+ final String database = cs.getDatabase() == null ? "admin" :
cs.getDatabase();
+ final MongoCredential credential =
MongoCredential.createCredential(user, database, passw.toCharArray());
+ builder.credential(credential);
+ }
+
+ if (sslContext != null) {
+ builder.applyToSslSettings(sslBuilder ->
sslBuilder.enabled(true).context(sslContext));
+ }
+
+ builder.applyConnectionString(cs);
+
final MongoClientSettings clientSettings = builder.build();
return MongoClients.create(clientSettings);
} catch (Exception e) {
@@ -100,17 +117,6 @@ public class MongoDBControllerService extends
AbstractControllerService implemen
}
}
- protected MongoClientSettings.Builder getClientSettings(final String uri,
final SSLContext sslContext) {
- final MongoClientSettings.Builder builder =
MongoClientSettings.builder();
- builder.applyConnectionString(new ConnectionString(uri));
- if (sslContext != null) {
- builder.applyToSslSettings(sslBuilder ->
- sslBuilder.enabled(true).context(sslContext)
- );
- }
- return builder;
- }
-
@OnStopped
public final void onStopped() {
closeClient(mongoClient);
@@ -122,17 +128,6 @@ public class MongoDBControllerService extends
AbstractControllerService implemen
}
}
- protected String getURI(final ConfigurationContext context) {
- final String uri =
context.getProperty(URI).evaluateAttributeExpressions().getValue();
- final String user =
context.getProperty(DB_USER).evaluateAttributeExpressions().getValue();
- final String passw =
context.getProperty(DB_PASSWORD).evaluateAttributeExpressions().getValue();
- if (!uri.contains("@") && user != null && passw != null) {
- return uri.replaceFirst("://", "://" + URLEncoder.encode(user,
StandardCharsets.UTF_8) + ":" + URLEncoder.encode(passw,
StandardCharsets.UTF_8) + "@");
- } else {
- return uri;
- }
- }
-
@Override
public WriteConcern getWriteConcern() {
WriteConcern writeConcern = null;