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() {

Reply via email to