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 <34543311+cro...@users.noreply.github.com> 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() {