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 d4b286bdd929 CAMEL-26552: camel-kubernetes - custom resources 
producer: header namespace takes precedence over the endpoint option (#29242)
d4b286bdd929 is described below

commit d4b286bdd9291b67680ba9a0bc8a668932df44a2
Author: Jiří Ondrušek <[email protected]>
AuthorDate: Thu Nov 5 16:48:30 2026 +0100

    CAMEL-26552: camel-kubernetes - custom resources producer: header namespace 
takes precedence over the endpoint option (#29242)
    
    Co-Authored-By: Claude Opus 5.5 <[email protected]>
---
 .../KubernetesCustomResourcesProducer.java          |  8 +-------
 .../KubernetesCustomResourcesProducerTest.java      | 21 +++++++++++++++++++++
 .../ROOT/pages/camel-4x-upgrade-guide-4_24.adoc     |  2 ++
 3 files changed, 24 insertions(+), 7 deletions(-)

diff --git 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java
 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java
index cbdabb8b5f10..a438db49359e 100644
--- 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java
+++ 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java
@@ -57,13 +57,7 @@ public class KubernetesCustomResourcesProducer extends 
DefaultProducer {
     @Override
     public void process(Exchange exchange) throws Exception {
         String operation = KubernetesHelper.extractOperation(getEndpoint(), 
exchange);
-        String namespace;
-
-        if 
(ObjectHelper.isEmpty(getEndpoint().getKubernetesConfiguration().getNamespace()))
 {
-            namespace = 
exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, 
String.class);
-        } else {
-            namespace = 
getEndpoint().getKubernetesConfiguration().getNamespace();
-        }
+        String namespace = KubernetesHelper.extractNamespace(getEndpoint(), 
exchange);
         if (ObjectHelper.isEmpty(namespace)) {
             throw new IllegalArgumentException("Custom Resource producer 
requires a namespace argument");
         }
diff --git 
a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java
 
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java
index dd402aa2e2b7..48dcea5dafcb 100644
--- 
a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java
+++ 
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java
@@ -217,6 +217,25 @@ public class KubernetesCustomResourcesProducerTest extends 
KubernetesTestSupport
         assertNull(ex4.getMessage().getBody());
     }
 
+    @Test
+    @Order(6)
+    void headerNamespaceTakesPrecedenceOverOption() {
+        
server.expect().get().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources")
+                .andReturn(200, setupGithubSourceList()).once();
+
+        Exchange ex = 
template.request("direct:listCustomResourcesWithNamespaceOption", exchange -> {
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, 
"testnamespace");
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_NAME, 
"githubsources.sources.knative.dev");
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_GROUP, 
"sources.knative.dev");
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_SCOPE, 
"Namespaced");
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_VERSION, 
"v1alpha1");
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_PLURAL, 
"githubsources");
+        });
+
+        assertFalse(ex.isFailed());
+        assertEquals(1, ex.getMessage().getBody(List.class).size());
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
@@ -224,6 +243,8 @@ public class KubernetesCustomResourcesProducerTest extends 
KubernetesTestSupport
             public void configure() {
                 from("direct:listCustomResources").toF(
                         
"kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=listCustomResources");
+                from("direct:listCustomResourcesWithNamespaceOption").toF(
+                        
"kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=listCustomResources&namespace=optionns");
                 from("direct:listCustomResourcesByLabels").toF(
                         
"kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=listCustomResourcesByLabels");
                 from("direct:deleteCustomResource").toF(
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
index 1d16044e4b16..eb8f5d08a5f7 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
@@ -785,6 +785,8 @@ for the other changes.
 * The `kubernetes-custom-resources` producer uses the `crdName`, `crdGroup`, 
`crdScope`, `crdVersion` and
   `crdPlural` endpoint options. Before, it checked them but then built the 
custom resource definition from the
   headers only.
+* The `kubernetes-custom-resources` producer takes the namespace from the 
`CamelKubernetesNamespaceName` header,
+  or else from the `namespace` endpoint option, like the other producers. 
Before, the option won over the header.
 * `createCustomResource` and `updateCustomResource` fail the exchange with the 
`KubernetesClientException` of a
   409 Conflict (the instance already exists, or the update is based on an old 
resource version). Before, the
   conflict was logged at INFO and the body was an empty 
`GenericKubernetesResource`.

Reply via email to