Skip to content

Commit 523e800

Browse files
Register SimpleNoFileLanguage for reflection
Fixes #8544
1 parent 7a82a61 commit 523e800

5 files changed

Lines changed: 42 additions & 10 deletions

File tree

extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelNativeImageProcessor.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.apache.camel.impl.engine.DefaultDevConsoleResolver;
5151
import org.apache.camel.impl.engine.DefaultLanguageResolver;
5252
import org.apache.camel.impl.engine.DefaultTransformerResolver;
53+
import org.apache.camel.language.simple.SimpleNoFileLanguage;
5354
import org.apache.camel.quarkus.core.CamelConfig;
5455
import org.apache.camel.quarkus.core.CamelConfig.ReflectionConfig;
5556
import org.apache.camel.quarkus.core.CamelConfigFlags;
@@ -300,6 +301,12 @@ void reflectiveRoutes(
300301
});
301302
}
302303

304+
@BuildStep
305+
ReflectiveClassBuildItem registerSimpleNoFileLanguageForReflection() {
306+
// Required as SimpleNoFileLanguage loading & discovery is not done via the FactoryFinder
307+
return ReflectiveClassBuildItem.builder(SimpleNoFileLanguage.class).build();
308+
}
309+
303310
/**
304311
* Scans RouteBuilder bytecode to auto-detect exception classes used in onException() and doCatch() calls, and
305312
* registers them for reflection. This is needed because Camel stores exception class names as strings in the route

integration-tests/file/src/main/java/org/apache/camel/quarkus/component/file/it/FileResource.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
import org.apache.camel.ProducerTemplate;
3939
import org.apache.camel.component.mock.MockEndpoint;
4040

41+
import static org.apache.camel.quarkus.component.file.it.FileRoutes.POLL_ENRICH_SIMPLE_FILE_NAME;
42+
import static org.apache.camel.quarkus.component.file.it.FileRoutes.POLL_ENRICH_SIMPLE_PATH;
43+
4144
@Path("/file")
4245
@ApplicationScoped
4346
public class FileResource {
@@ -149,8 +152,15 @@ public Response createFile(@PathParam("folder") String folder, byte[] content, @
149152
@Path("/route/{route}")
150153
@POST
151154
@Consumes(MediaType.TEXT_PLAIN)
152-
public String pollEnrich(String body, @PathParam("route") String route) throws Exception {
153-
return producerTemplate.requestBody("direct:" + route, body, String.class);
155+
public String pollEnrich(String body, @PathParam("route") String route) {
156+
Map<String, Object> headers = new HashMap<>();
157+
158+
if (route.equals("pollEnrichSimpleExpression")) {
159+
headers.put("path", POLL_ENRICH_SIMPLE_PATH);
160+
headers.put("fileName", POLL_ENRICH_SIMPLE_FILE_NAME);
161+
}
162+
163+
return producerTemplate.requestBodyAndHeaders("direct:" + route, body, headers, String.class);
154164
}
155165

156166
}

integration-tests/file/src/main/java/org/apache/camel/quarkus/component/file/it/FileRoutes.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ public class FileRoutes extends RouteBuilder {
3333

3434
public static final String READ_LOCK_IN = "read-lock-in";
3535
public static final String READ_LOCK_OUT = "read-lock-out";
36+
public static final String POLL_ENRICH_FILE_NAME = "poll-enrich-file";
37+
public static final String POLL_ENRICH_SIMPLE_FILE_NAME = POLL_ENRICH_FILE_NAME + "-simple";
38+
public static final String POLL_ENRICH_FILE_CONTENT = POLL_ENRICH_FILE_NAME + "-CONTENT";
39+
public static final String POLL_ENRICH_SIMPLE_FILE_CONTENT = POLL_ENRICH_SIMPLE_FILE_NAME + "-CONTENT";
40+
public static final String POLL_ENRICH_PATH = "target/test-files/poll-enrich";
41+
public static final String POLL_ENRICH_SIMPLE_PATH = POLL_ENRICH_PATH + "-simple";
3642

3743
private static final Set<String> IDEMPOTENT_FILES_CONSUMED = ConcurrentHashMap.newKeySet();
3844

@@ -82,8 +88,10 @@ public void configure() {
8288
.convertBodyTo(String.class).to("mock:" + SORT_BY);
8389

8490
from("direct:pollEnrich")
85-
.pollEnrich("file://target/test-files/poll-enrich?fileName=poll-enrich-file");
91+
.pollEnrich("file:" + POLL_ENRICH_PATH + "?fileName=" + POLL_ENRICH_FILE_NAME);
8692

93+
from("direct:pollEnrichSimpleExpression")
94+
.pollEnrich().simple("file:${header.path}?fileName=${header.fileName}");
8795
}
8896

8997
public class MyFileFilter<T> implements GenericFileFilter<T> {

integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileTest.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,13 @@
3030
import io.restassured.http.ContentType;
3131
import org.hamcrest.Matchers;
3232
import org.junit.jupiter.api.Test;
33+
import org.junit.jupiter.params.ParameterizedTest;
34+
import org.junit.jupiter.params.provider.ValueSource;
3335

3436
import static org.apache.camel.quarkus.component.file.it.FileResource.SEPARATOR;
3537
import static org.apache.camel.quarkus.component.file.it.FileResource.SORT_BY;
38+
import static org.apache.camel.quarkus.component.file.it.FileRoutes.POLL_ENRICH_FILE_CONTENT;
39+
import static org.apache.camel.quarkus.component.file.it.FileRoutes.POLL_ENRICH_SIMPLE_FILE_CONTENT;
3640
import static org.apache.camel.quarkus.component.file.it.FileTestResource.BATCH_FILE_NAME_1_CONTENT;
3741
import static org.apache.camel.quarkus.component.file.it.FileTestResource.BATCH_FILE_NAME_2_CONTENT;
3842
import static org.apache.camel.quarkus.component.file.it.FileTestResource.CHARSET_READ_FILE_CONTENT;
@@ -45,7 +49,6 @@
4549
import static org.apache.camel.quarkus.component.file.it.FileTestResource.FILTER_NON_SKIPPED_FILE_CONTENT;
4650
import static org.apache.camel.quarkus.component.file.it.FileTestResource.IDEMPOTENT_FILE_CONTENT;
4751
import static org.apache.camel.quarkus.component.file.it.FileTestResource.IDEMPOTENT_FILE_NAME;
48-
import static org.apache.camel.quarkus.component.file.it.FileTestResource.POLL_ENRICH_FILE_CONTENT;
4952
import static org.apache.camel.quarkus.component.file.it.FileTestResource.QUARTZ_SCHEDULED_FILE_CONTENT;
5053
import static org.apache.camel.quarkus.component.file.it.FileTestResource.READ_LOCK_FILE_NAME;
5154
import static org.apache.camel.quarkus.component.file.it.FileTestResource.READ_LOCK_FOLDER_IN;
@@ -108,14 +111,16 @@ void filterShouldReadOnlyMatchingFile() {
108111
equalTo(FILTER_NON_SKIPPED_FILE_CONTENT));
109112
}
110113

111-
@Test
112-
public void pollEnrichShouldSetExchangeBodyWithFileContent() {
114+
@ParameterizedTest
115+
@ValueSource(strings = { "pollEnrich", "pollEnrichSimpleExpression" })
116+
public void pollEnrichShouldSetExchangeBodyWithFileContent(String route) {
117+
String expectedBody = route.equals("pollEnrich") ? POLL_ENRICH_FILE_CONTENT : POLL_ENRICH_SIMPLE_FILE_CONTENT;
113118
RestAssured.given()
114119
.contentType(ContentType.TEXT)
115-
.post("/file/route/pollEnrich")
120+
.post("/file/route/" + route)
116121
.then()
117122
.statusCode(200)
118-
.body(Matchers.is(POLL_ENRICH_FILE_CONTENT));
123+
.body(Matchers.is(expectedBody));
119124
}
120125

121126
@Test

integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileTestResource.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
3030
import org.apache.commons.io.FileUtils;
3131

32+
import static org.apache.camel.quarkus.component.file.it.FileRoutes.POLL_ENRICH_FILE_NAME;
33+
import static org.apache.camel.quarkus.component.file.it.FileRoutes.POLL_ENRICH_SIMPLE_FILE_NAME;
34+
3235
/**
3336
* Ensures that all test files are created with expected content before camel routes starts to consume them.
3437
*/
@@ -40,8 +43,6 @@ public class FileTestResource implements QuarkusTestResourceLifecycleManager {
4043
static final String FILTER_NON_SKIPPED_FILE_CONTENT = FILTER_NON_SKIPPED_FILE_NAME + "-CONTENT";
4144
static final String IDEMPOTENT_FILE_NAME = "moved-back-read-once";
4245
static final String IDEMPOTENT_FILE_CONTENT = IDEMPOTENT_FILE_NAME + "-CONTENT";
43-
static final String POLL_ENRICH_FILE_NAME = "poll-enrich-file";
44-
static final String POLL_ENRICH_FILE_CONTENT = POLL_ENRICH_FILE_NAME + "-CONTENT";
4546
static final String QUARTZ_SCHEDULED_FILE_NAME = "quartz-schedule-file";
4647
static final String QUARTZ_SCHEDULED_FILE_CONTENT = QUARTZ_SCHEDULED_FILE_NAME + "-CONTENT";
4748
static final String CHARSET_READ_FILE_NAME = "charset-read-file";
@@ -81,6 +82,7 @@ public Map<String, String> start() {
8182
createTestFile("idempotent", IDEMPOTENT_FILE_NAME);
8283

8384
createTestFile("poll-enrich", POLL_ENRICH_FILE_NAME);
85+
createTestFile("poll-enrich-simple", POLL_ENRICH_SIMPLE_FILE_NAME);
8486

8587
createTestFile("quartz-scheduled", QUARTZ_SCHEDULED_FILE_NAME);
8688

0 commit comments

Comments
 (0)