This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 1931e48923f Camel 22083 couchbase (#18129)
1931e48923f is described below
commit 1931e48923fa0cc1a4dda18313b9c4520cfbe2ef
Author: Federico Mariani <[email protected]>
AuthorDate: Tue May 20 16:01:37 2025 +0200
Camel 22083 couchbase (#18129)
* AMEL-22083: Couchbase
* Always use couchbase json serializer implementation, does not work with
the jackson version used by Camel
---
.../component/couchbase/CouchbaseEndpoint.java | 2 +
test-infra/camel-test-infra-couchbase/pom.xml | 5 ++
.../couchbase/common/CouchbaseProperties.java | 1 +
.../couchbase/services/CouchbaseInfraService.java | 24 ++++++++
.../CouchbaseLocalContainerInfraService.java | 67 +++++++++++++++++++++-
.../services/CouchbaseRemoteInfraService.java | 42 ++++++++++++++
.../services/CouchbaseServiceFactory.java | 40 +++++++++++++
7 files changed, 178 insertions(+), 3 deletions(-)
diff --git
a/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseEndpoint.java
b/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseEndpoint.java
index 7c87f0dd82e..686a01f22fd 100644
---
a/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseEndpoint.java
+++
b/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseEndpoint.java
@@ -30,6 +30,7 @@ import java.util.stream.Collectors;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.ClusterOptions;
+import com.couchbase.client.java.codec.DefaultJsonSerializer;
import com.couchbase.client.java.env.ClusterEnvironment;
import org.apache.camel.CamelException;
import org.apache.camel.Category;
@@ -548,6 +549,7 @@ public class CouchbaseEndpoint extends
ScheduledPollEndpoint implements Endpoint
}
ClusterEnvironment.Builder cfb = ClusterEnvironment.builder();
+ cfb.jsonSerializer(DefaultJsonSerializer.create());
if (queryTimeout != DEFAULT_QUERY_TIMEOUT) {
cfb.timeoutConfig()
.connectTimeout(Duration.ofMillis(connectTimeout))
diff --git a/test-infra/camel-test-infra-couchbase/pom.xml
b/test-infra/camel-test-infra-couchbase/pom.xml
index 1669dbeb8a1..762a8b7610b 100644
--- a/test-infra/camel-test-infra-couchbase/pom.xml
+++ b/test-infra/camel-test-infra-couchbase/pom.xml
@@ -40,6 +40,11 @@
<version>${project.version}</version>
<type>test-jar</type>
</dependency>
+ <dependency>
+ <groupId>com.couchbase.client</groupId>
+ <artifactId>java-client</artifactId>
+ <version>${couchbase-client-version}</version>
+ </dependency>
<dependency>
<groupId>org.testcontainers</groupId>
diff --git
a/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/common/CouchbaseProperties.java
b/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/common/CouchbaseProperties.java
index f89f01a8be0..9e1b8aacd6b 100644
---
a/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/common/CouchbaseProperties.java
+++
b/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/common/CouchbaseProperties.java
@@ -23,6 +23,7 @@ public final class CouchbaseProperties {
public static final String COUCHBASE_HOSTNAME = "couchbase.hostname";
public static final String COUCHBASE_PORT = "couchbase.port";
public static final String COUCHBASE_CONTAINER = "couchbase.container";
+ public static final String COUCHBASE_PROTOCOL = "couchbase.protocol";
private CouchbaseProperties() {
diff --git
a/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseInfraService.java
b/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseInfraService.java
index 6ccfdf43fc3..bb734e333de 100644
---
a/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseInfraService.java
+++
b/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseInfraService.java
@@ -23,11 +23,35 @@ public interface CouchbaseInfraService extends
InfrastructureService {
String getConnectionString();
+ // Use username
+ @Deprecated
String getUsername();
+ // Use password
+ @Deprecated
String getPassword();
+ // Use hostname
+ @Deprecated
String getHostname();
+ // Use port
+ @Deprecated
int getPort();
+
+ String protocol();
+
+ String hostname();
+
+ int port();
+
+ String username();
+
+ String password();
+
+ String bucket();
+
+ String viewName();
+
+ String designDocumentName();
}
diff --git
a/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseLocalContainerInfraService.java
b/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseLocalContainerInfraService.java
index 63c091eaca5..f49b258cbe8 100644
---
a/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseLocalContainerInfraService.java
+++
b/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseLocalContainerInfraService.java
@@ -17,6 +17,14 @@
package org.apache.camel.test.infra.couchbase.services;
+import java.util.Collections;
+
+import com.couchbase.client.java.Cluster;
+import com.couchbase.client.java.manager.bucket.BucketSettings;
+import com.couchbase.client.java.manager.bucket.BucketType;
+import com.couchbase.client.java.manager.view.DesignDocument;
+import com.couchbase.client.java.manager.view.View;
+import com.couchbase.client.java.view.DesignDocumentNamespace;
import org.apache.camel.spi.annotations.InfraService;
import org.apache.camel.test.infra.common.LocalPropertyResolver;
import org.apache.camel.test.infra.common.services.ContainerService;
@@ -86,24 +94,77 @@ public class CouchbaseLocalContainerInfraService implements
CouchbaseInfraServic
@Override
public String getUsername() {
- return container.getUsername();
+ return username();
}
@Override
public String getPassword() {
- return container.getPassword();
+ return password();
}
@Override
public String getHostname() {
- return container.getHost();
+ return hostname();
}
@Override
public int getPort() {
+ return port();
+ }
+
+ @Override
+ public String protocol() {
+ return "http";
+ }
+
+ @Override
+ public String hostname() {
+ return container.getHost();
+ }
+
+ @Override
+ public int port() {
return container.getBootstrapHttpDirectPort();
}
+ @Override
+ public String username() {
+ return container.getUsername();
+ }
+
+ @Override
+ public String password() {
+ return container.getPassword();
+ }
+
+ @Override
+ public String bucket() {
+ String bucketName = "myBucket";
+
+ Cluster cluster = Cluster.connect(getConnectionString(), username(),
password());
+ cluster.buckets().createBucket(
+
BucketSettings.create(bucketName).bucketType(BucketType.COUCHBASE));
+
+ DesignDocument designDoc = new DesignDocument(
+ designDocumentName(),
+ Collections.singletonMap(
+ viewName(),
+ new View("function (doc, meta) { emit(meta.id,
doc);}")));
+
cluster.bucket(bucketName).viewIndexes().upsertDesignDocument(designDoc,
DesignDocumentNamespace.PRODUCTION);
+
+ return bucketName;
+ }
+
+ @Override
+ public String viewName() {
+ return "myView";
+ }
+
+ @Override
+ public String designDocumentName() {
+ return "myDesignDocument";
+ }
+
@Override
public void registerProperties() {
System.setProperty(CouchbaseProperties.COUCHBASE_HOSTNAME,
getHostname());
diff --git
a/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseRemoteInfraService.java
b/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseRemoteInfraService.java
index 333600b6d46..0e46e0d467f 100644
---
a/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseRemoteInfraService.java
+++
b/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseRemoteInfraService.java
@@ -48,6 +48,48 @@ public class CouchbaseRemoteInfraService implements
CouchbaseInfraService {
return Integer.parseInt(portValue);
}
+ @Override
+ public String protocol() {
+ return System.getProperty(CouchbaseProperties.COUCHBASE_PROTOCOL,
"http");
+ }
+
+ @Override
+ public String hostname() {
+ return System.getProperty(CouchbaseProperties.COUCHBASE_HOSTNAME);
+ }
+
+ @Override
+ public int port() {
+ String portValue =
System.getProperty(CouchbaseProperties.COUCHBASE_PORT, "8091");
+
+ return Integer.parseInt(portValue);
+ }
+
+ @Override
+ public String username() {
+ return System.getProperty(CouchbaseProperties.COUCHBASE_USERNAME,
"Administrator");
+ }
+
+ @Override
+ public String password() {
+ return System.getProperty(CouchbaseProperties.COUCHBASE_PASSWORD);
+ }
+
+ @Override
+ public String bucket() {
+ throw new IllegalArgumentException("CouchbaseRemoteInfraService does
not support bucket creation");
+ }
+
+ @Override
+ public String viewName() {
+ throw new IllegalArgumentException("CouchbaseRemoteInfraService does
not support view creation");
+ }
+
+ @Override
+ public String designDocumentName() {
+ throw new IllegalArgumentException("CouchbaseRemoteInfraService does
not support design document creation");
+ }
+
@Override
public void registerProperties() {
// NO-OP
diff --git
a/test-infra/camel-test-infra-couchbase/src/test/java/org/apache/camel/test/infra/couchbase/services/CouchbaseServiceFactory.java
b/test-infra/camel-test-infra-couchbase/src/test/java/org/apache/camel/test/infra/couchbase/services/CouchbaseServiceFactory.java
index e0300595e5c..fe7be0f3050 100644
---
a/test-infra/camel-test-infra-couchbase/src/test/java/org/apache/camel/test/infra/couchbase/services/CouchbaseServiceFactory.java
+++
b/test-infra/camel-test-infra-couchbase/src/test/java/org/apache/camel/test/infra/couchbase/services/CouchbaseServiceFactory.java
@@ -50,6 +50,46 @@ public final class CouchbaseServiceFactory {
public int getPort() {
return getService().getPort();
}
+
+ @Override
+ public String protocol() {
+ return getService().protocol();
+ }
+
+ @Override
+ public String hostname() {
+ return getService().hostname();
+ }
+
+ @Override
+ public int port() {
+ return getService().port();
+ }
+
+ @Override
+ public String username() {
+ return getService().username();
+ }
+
+ @Override
+ public String password() {
+ return getService().password();
+ }
+
+ @Override
+ public String bucket() {
+ return getService().bucket();
+ }
+
+ @Override
+ public String viewName() {
+ return getService().viewName();
+ }
+
+ @Override
+ public String designDocumentName() {
+ return getService().designDocumentName();
+ }
}
private CouchbaseServiceFactory() {