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);