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 92b23246dbbf CAMEL-26542: camel-elasticsearch - do not reuse a built 
SearchRequest.Builder in the converter (#29224)
92b23246dbbf is described below

commit 92b23246dbbf23e7ad820c1148c8683d30c55964
Author: Jiří Ondrušek <[email protected]>
AuthorDate: Thu Nov 5 13:04:35 2026 +0100

    CAMEL-26542: camel-elasticsearch - do not reuse a built 
SearchRequest.Builder in the converter (#29224)
    
    Co-Authored-By: Claude Opus 5.5 <[email protected]>
---
 .../es/converter/ElasticsearchActionRequestConverter.java    |  9 ++++++---
 .../converter/ElasticsearchActionRequestConverterTest.java   | 12 ++++++++++++
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git 
a/components/camel-elasticsearch/src/main/java/org/apache/camel/component/es/converter/ElasticsearchActionRequestConverter.java
 
b/components/camel-elasticsearch/src/main/java/org/apache/camel/component/es/converter/ElasticsearchActionRequestConverter.java
index 779712d2bfcf..20fc73a227a4 100644
--- 
a/components/camel-elasticsearch/src/main/java/org/apache/camel/component/es/converter/ElasticsearchActionRequestConverter.java
+++ 
b/components/camel-elasticsearch/src/main/java/org/apache/camel/component/es/converter/ElasticsearchActionRequestConverter.java
@@ -268,10 +268,13 @@ public final class ElasticsearchActionRequestConverter {
         String indexName = 
exchange.getIn().getHeader(ElasticsearchConstants.PARAM_INDEX_NAME, 
String.class);
 
         if (queryObject instanceof SearchRequest.Builder searchReqBuilder) {
-            if (searchReqBuilder.build().index().isEmpty()) {
-                searchReqBuilder.index(indexName);
+            // a builder can be built only once, so return a fresh one
+            SearchRequest built = searchReqBuilder.build();
+            SearchRequest.Builder builder = built.rebuild();
+            if (built.index().isEmpty()) {
+                builder.index(indexName);
             }
-            return searchReqBuilder;
+            return builder;
         }
         if (queryObject instanceof SearchRequest searchRequest) {
             // a built request is sent as it is, as a builder body is
diff --git 
a/components/camel-elasticsearch/src/test/java/org/apache/camel/component/es/converter/ElasticsearchActionRequestConverterTest.java
 
b/components/camel-elasticsearch/src/test/java/org/apache/camel/component/es/converter/ElasticsearchActionRequestConverterTest.java
index dd1385d5ee01..3019bdd6096b 100644
--- 
a/components/camel-elasticsearch/src/test/java/org/apache/camel/component/es/converter/ElasticsearchActionRequestConverterTest.java
+++ 
b/components/camel-elasticsearch/src/test/java/org/apache/camel/component/es/converter/ElasticsearchActionRequestConverterTest.java
@@ -94,6 +94,18 @@ public class ElasticsearchActionRequestConverterTest {
         assertEquals("original", result.build().id());
     }
 
+    @Test
+    void aSearchBuilderBodyCanBeBuiltAfterConversion() throws Exception {
+        Exchange exchange = new DefaultExchange(context);
+        exchange.getIn().setHeader(ElasticsearchConstants.PARAM_INDEX_NAME, 
"idx");
+        SearchRequest.Builder body = new SearchRequest.Builder().size(3);
+
+        SearchRequest request = 
ElasticsearchActionRequestConverter.toSearchRequestBuilder(body, 
exchange).build();
+
+        assertEquals(List.of("idx"), request.index());
+        assertEquals(3, request.size());
+    }
+
     @Test
     void aJsonSearchBodyKeepsItsSizeSortAggregationsAndSource() throws 
Exception {
         Exchange exchange = new DefaultExchange(context);

Reply via email to