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`.