This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-4.10.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-4.10.x by this push:
     new a4235e0234c CAMEL-21732: camel-core: Poll EIP fix dynamic endpoint 
uris does not work.
a4235e0234c is described below

commit a4235e0234c6218233d02ab24d61755a17a3fa4a
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Fri Feb 7 15:36:49 2025 +0100

    CAMEL-21732: camel-core: Poll EIP fix dynamic endpoint uris does not work.
---
 .../java/org/apache/camel/reifier/PollReifier.java | 46 ++++++++--------
 .../org/apache/camel/reifier/ToDynamicReifier.java | 10 ++--
 .../enricher/PollDynamicFileNameTest.java          | 51 ++++++++++++++++++
 .../builder/endpoint/PollDynamicFileNameTest.java  | 61 ++++++++++++++++++++++
 4 files changed, 143 insertions(+), 25 deletions(-)

diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/PollReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/PollReifier.java
index 39e7b8531fe..4517b6df0eb 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/PollReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/PollReifier.java
@@ -16,16 +16,16 @@
  */
 package org.apache.camel.reifier;
 
-import org.apache.camel.Endpoint;
 import org.apache.camel.Expression;
-import org.apache.camel.LineNumberAware;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.model.PollDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.PollProcessor;
-import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.spi.Language;
+import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.LanguageSupport;
+import org.apache.camel.util.StringHelper;
 
 public class PollReifier extends ProcessorReifier<PollDefinition> {
 
@@ -35,34 +35,36 @@ public class PollReifier extends 
ProcessorReifier<PollDefinition> {
 
     @Override
     public Processor createProcessor() throws Exception {
-        Endpoint endpoint = resolveEndpoint();
-        String uri = endpoint.getEndpointUri();
-        boolean simple = LanguageSupport.hasSimpleFunction(uri);
-        Expression exp;
-        if (simple) {
-            exp = camelContext.resolveLanguage("simple").createExpression(uri);
+        String uri;
+        if (definition.getEndpointConsumerBuilder() != null) {
+            uri = definition.getEndpointConsumerBuilder().getRawUri();
         } else {
-            exp = 
camelContext.resolveLanguage("constant").createExpression(uri);
+            uri = StringHelper.notEmpty(definition.getUri(), "uri", this);
         }
+        Expression exp = createExpression(uri);
         long timeout = parseDuration(definition.getTimeout(), 20000);
         PollProcessor answer = new PollProcessor(exp, uri, timeout);
         
answer.setVariableReceive(parseString(definition.getVariableReceive()));
         return answer;
     }
 
-    public Endpoint resolveEndpoint() {
-        Endpoint answer;
-        if (definition.getEndpoint() == null) {
-            if (definition.getEndpointConsumerBuilder() == null) {
-                answer = CamelContextHelper.resolveEndpoint(camelContext, 
definition.getEndpointUri(), null);
-            } else {
-                answer = 
definition.getEndpointConsumerBuilder().resolve(camelContext);
-            }
-        } else {
-            answer = definition.getEndpoint();
+    protected Expression createExpression(String uri) {
+        // make sure to parse property placeholders
+        uri = 
EndpointHelper.resolveEndpointUriPropertyPlaceholders(camelContext, uri);
+
+        // we use simple/constant language by default, but you can configure a 
different language
+        String language = null;
+        if (uri.startsWith("language:")) {
+            String value = StringHelper.after(uri, "language:");
+            language = StringHelper.before(value, ":");
+            uri = StringHelper.after(value, ":");
         }
-        LineNumberAware.trySetLineNumberAware(answer, definition);
-        return answer;
+        if (language == null) {
+            // only use simple language if needed
+            language = LanguageSupport.hasSimpleFunction(uri) ? "simple" : 
"constant";
+        }
+        Language lan = camelContext.resolveLanguage(language);
+        return lan.createExpression(uri);
     }
 
 }
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java
index 240d5e18e20..aef8cc16fdb 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java
@@ -27,6 +27,7 @@ import org.apache.camel.model.ToDynamicDefinition;
 import org.apache.camel.processor.SendDynamicProcessor;
 import org.apache.camel.spi.Language;
 import org.apache.camel.support.EndpointHelper;
+import org.apache.camel.support.LanguageSupport;
 import org.apache.camel.util.StringHelper;
 
 public class ToDynamicReifier<T extends ToDynamicDefinition> extends 
ProcessorReifier<T> {
@@ -78,14 +79,17 @@ public class ToDynamicReifier<T extends 
ToDynamicDefinition> extends ProcessorRe
         // make sure to parse property placeholders
         uri = 
EndpointHelper.resolveEndpointUriPropertyPlaceholders(camelContext, uri);
 
-        // we use simple language by default, but you can configure a 
different language
-        String language = "simple";
+        // we use simple/constant language by default, but you can configure a 
different language
+        String language = null;
         if (uri.startsWith("language:")) {
             String value = StringHelper.after(uri, "language:");
             language = StringHelper.before(value, ":");
             uri = StringHelper.after(value, ":");
         }
-
+        if (language == null) {
+            // only use simple language if needed
+            language = LanguageSupport.hasSimpleFunction(uri) ? "simple" : 
"constant";
+        }
         Language lan = camelContext.resolveLanguage(language);
         return lan.createExpression(uri);
     }
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/processor/enricher/PollDynamicFileNameTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/processor/enricher/PollDynamicFileNameTest.java
new file mode 100644
index 00000000000..7eaf817514b
--- /dev/null
+++ 
b/core/camel-core/src/test/java/org/apache/camel/processor/enricher/PollDynamicFileNameTest.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor.enricher;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class PollDynamicFileNameTest extends ContextTestSupport {
+
+    @Test
+    public void testPollEnrichFile() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(2);
+        getMockEndpoint("mock:result").message(0).body().isEqualTo("Hello 
World");
+        getMockEndpoint("mock:result").message(1).body().isNull();
+
+        template.sendBodyAndHeader(fileUri(), "Hello World", 
Exchange.FILE_NAME, "myfile.txt");
+
+        template.sendBodyAndHeader("direct:start", "Foo", "target", 
"myfile.txt");
+        template.sendBodyAndHeader("direct:start", "Bar", "target", 
"unknown.txt");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:start")
+                        .poll(fileUri() + 
"?noop=true&fileName=${header.target}", 500)
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git 
a/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/PollDynamicFileNameTest.java
 
b/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/PollDynamicFileNameTest.java
new file mode 100644
index 00000000000..73dfc7b837e
--- /dev/null
+++ 
b/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/PollDynamicFileNameTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.builder.endpoint;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Test;
+
+import static org.apache.camel.test.junit5.TestSupport.deleteDirectory;
+
+public class PollDynamicFileNameTest extends BaseEndpointDslTest {
+
+    private static final String TEST_DATA_DIR = 
BaseEndpointDslTest.generateUniquePath(PollDynamicFileNameTest.class);
+
+    @Override
+    public void doPreSetup() {
+        deleteDirectory(TEST_DATA_DIR);
+    }
+
+    @Test
+    public void testPollEnrichFile() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(2);
+        getMockEndpoint("mock:result").message(0).body().isEqualTo("Hello 
World");
+        getMockEndpoint("mock:result").message(1).body().isNull();
+
+        template.sendBodyAndHeader("file://" + TEST_DATA_DIR, "Hello World", 
Exchange.FILE_NAME, "myfile.txt");
+
+        template.sendBodyAndHeader("direct:start", "Foo", "target", 
"myfile.txt");
+        template.sendBodyAndHeader("direct:start", "Bar", "target", 
"unknown.txt");
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new EndpointRouteBuilder() {
+            @Override
+            public void configure() {
+                from(direct("start"))
+                        
.poll(file(TEST_DATA_DIR).noop(true).fileName("${header.target}"), 1000)
+                        .to(mock("result"));
+            }
+        };
+    }
+
+}

Reply via email to