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

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 953200d7a4 Add BeanIO native support
953200d7a4 is described below

commit 953200d7a47fb058a589ad2bd3e4047e2f12c5f5
Author: James Netherton <[email protected]>
AuthorDate: Tue Oct 22 11:32:57 2024 +0100

    Add BeanIO native support
    
    Fixes #6632
---
 .../beanio/deployment/BeanioProcessor.java         |  46 -------
 extensions-jvm/pom.xml                             |   1 -
 .../beanio/deployment/pom.xml                      |   4 +
 .../beanio/deployment/BeanioProcessor.java         | 137 +++++++++++++++++++++
 .../deployment/BeanioPropertiesBuildItem.java      |  22 ++--
 {extensions-jvm => extensions}/beanio/pom.xml      |   2 +-
 .../beanio/runtime/pom.xml                         |   5 +
 extensions/beanio/runtime/src/main/doc/usage.adoc  |  31 +++++
 .../main/resources/META-INF/quarkus-extension.yaml |   3 +-
 extensions/pom.xml                                 |   1 +
 integration-tests-jvm/pom.xml                      |   1 -
 .../beanio/pom.xml                                 |  27 ++++
 .../component/beanio/it/BeanioResource.java        |   0
 .../quarkus/component/beanio/it/BeanioRoutes.java  |   0
 .../component/beanio/it/model/A1Record.java        |   3 +
 .../component/beanio/it/model/AbstractRecord.java  |   3 +
 .../component/beanio/it/model/B1Record.java        |   3 +
 .../beanio/it/model/CustomErrorHandler.java        |   0
 .../component/beanio/it/model/Employee.java        |   3 +
 .../beanio/it/model/EmployeeAnnotated.java         |   0
 .../quarkus/component/beanio/it/model/Error.java   |   3 +
 .../quarkus/component/beanio/it/model/Header.java  |   2 +
 .../component/beanio/it/model/Separator.java       |   3 +
 .../quarkus/component/beanio/it/model/Trailer.java |   3 +
 .../src/main/resources/application.properties      |  17 +++
 .../beanio/src/main/resources/complex-mapping.xml  |   3 +
 .../beanio/src/main/resources/employee-mapping.xml |  10 ++
 .../src/main/resources/single-object-mapping.xml   |   3 +
 .../quarkus/component/beanio/it/BeanioIT.java      |  19 +--
 .../quarkus/component/beanio/it/BeanioTest.java    |   0
 .../beanio/src/test/resources/complex-data.txt     |   0
 .../beanio/src/test/resources/employees-csv.txt    |   0
 .../src/test/resources/employees-delimited.txt     |   0
 .../src/test/resources/employees-fixedlength.txt   |   0
 .../src/test/resources/employees-with-error.txt    |   0
 .../beanio/src/test/resources/employees-xml.txt    |   0
 integration-tests/pom.xml                          |   1 +
 tooling/scripts/test-categories.yaml               |   1 +
 38 files changed, 279 insertions(+), 78 deletions(-)

diff --git 
a/extensions-jvm/beanio/deployment/src/main/java/org/apache/camel/quarkus/component/beanio/deployment/BeanioProcessor.java
 
b/extensions-jvm/beanio/deployment/src/main/java/org/apache/camel/quarkus/component/beanio/deployment/BeanioProcessor.java
deleted file mode 100644
index d90d52b635..0000000000
--- 
a/extensions-jvm/beanio/deployment/src/main/java/org/apache/camel/quarkus/component/beanio/deployment/BeanioProcessor.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.quarkus.component.beanio.deployment;
-
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.annotations.ExecutionTime;
-import io.quarkus.deployment.annotations.Record;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
-import io.quarkus.deployment.pkg.steps.NativeBuild;
-import org.apache.camel.quarkus.core.JvmOnlyRecorder;
-import org.jboss.logging.Logger;
-
-class BeanioProcessor {
-
-    private static final Logger LOG = Logger.getLogger(BeanioProcessor.class);
-    private static final String FEATURE = "camel-beanio";
-
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
-    }
-
-    /**
-     * Remove this once this extension starts supporting the native mode.
-     */
-    @BuildStep(onlyIf = NativeBuild.class)
-    @Record(value = ExecutionTime.RUNTIME_INIT)
-    void warnJvmInNative(JvmOnlyRecorder recorder) {
-        JvmOnlyRecorder.warnJvmInNative(LOG, FEATURE); // warn at build time
-        recorder.warnJvmInNative(FEATURE); // warn at runtime
-    }
-}
diff --git a/extensions-jvm/pom.xml b/extensions-jvm/pom.xml
index de1499bb18..77d25c39fd 100644
--- a/extensions-jvm/pom.xml
+++ b/extensions-jvm/pom.xml
@@ -43,7 +43,6 @@
         <module>azure-servicebus</module>
         <module>azure-storage-datalake</module>
         <module>barcode</module>
-        <module>beanio</module>
         <module>bonita</module>
         <module>chatscript</module>
         <module>chunk</module>
diff --git a/extensions-jvm/beanio/deployment/pom.xml 
b/extensions/beanio/deployment/pom.xml
similarity index 93%
rename from extensions-jvm/beanio/deployment/pom.xml
rename to extensions/beanio/deployment/pom.xml
index 457596ecd6..b2fea85a44 100644
--- a/extensions-jvm/beanio/deployment/pom.xml
+++ b/extensions/beanio/deployment/pom.xml
@@ -30,6 +30,10 @@
     <name>Camel Quarkus :: BeanIO :: Deployment</name>
 
     <dependencies>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-xml-jaxp-deployment</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-core-deployment</artifactId>
diff --git 
a/extensions/beanio/deployment/src/main/java/org/apache/camel/quarkus/component/beanio/deployment/BeanioProcessor.java
 
b/extensions/beanio/deployment/src/main/java/org/apache/camel/quarkus/component/beanio/deployment/BeanioProcessor.java
new file mode 100644
index 0000000000..5ff8aac1b0
--- /dev/null
+++ 
b/extensions/beanio/deployment/src/main/java/org/apache/camel/quarkus/component/beanio/deployment/BeanioProcessor.java
@@ -0,0 +1,137 @@
+/*
+ * 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.quarkus.component.beanio.deployment;
+
+import java.io.IOException;
+import java.util.Properties;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
+import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
+import 
io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
+import 
io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBundleBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import org.beanio.BeanReaderErrorHandler;
+import org.beanio.annotation.Record;
+import org.beanio.stream.RecordParserFactory;
+import org.jboss.jandex.AnnotationInstance;
+import org.jboss.jandex.AnnotationTarget;
+import org.jboss.jandex.AnnotationTarget.Kind;
+import org.jboss.jandex.ClassInfo;
+import org.jboss.jandex.DotName;
+import org.jboss.jandex.IndexView;
+
+class BeanioProcessor {
+    private static final String FEATURE = "camel-beanio";
+
+    @BuildStep
+    FeatureBuildItem feature() {
+        return new FeatureBuildItem(FEATURE);
+    }
+
+    @BuildStep
+    IndexDependencyBuildItem indexDependencies() {
+        return new IndexDependencyBuildItem("com.github.beanio", "beanio");
+    }
+
+    @BuildStep
+    BeanioPropertiesBuildItem beanioProperties() {
+        try {
+            Properties properties = new Properties();
+            properties.load(Thread.currentThread().getContextClassLoader()
+                    
.getResourceAsStream("org/beanio/internal/config/beanio.properties"));
+            return new BeanioPropertiesBuildItem(properties);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @BuildStep
+    void nativeImageResources(BuildProducer<NativeImageResourceBuildItem> 
nativeImageResource) {
+        nativeImageResource.produce(new 
NativeImageResourceBuildItem("org/beanio/internal/config/beanio.properties"));
+        nativeImageResource.produce(new 
NativeImageResourceBuildItem("beanio.properties"));
+    }
+
+    @BuildStep
+    void registerForReflection(
+            BeanioPropertiesBuildItem beanioProperties,
+            CombinedIndexBuildItem combinedIndex,
+            BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
+        Properties properties = beanioProperties.getProperties();
+
+        Set<String> handlersAndFactories = properties.keySet()
+                .stream()
+                .filter(key -> key.toString().contains("Factory") || 
key.toString().contains("Handler"))
+                .map(properties::get)
+                .map(Object::toString)
+                .collect(Collectors.toUnmodifiableSet());
+        
reflectiveClass.produce(ReflectiveClassBuildItem.builder(handlersAndFactories.toArray(new
 String[0])).build());
+
+        IndexView index = combinedIndex.getIndex();
+        Set<String> recordParsers = 
index.getAllKnownImplementors(RecordParserFactory.class)
+                .stream()
+                .map(ClassInfo::name)
+                .map(DotName::toString)
+                .collect(Collectors.toUnmodifiableSet());
+        
reflectiveClass.produce(ReflectiveClassBuildItem.builder(recordParsers.toArray(new
 String[0])).methods(true).build());
+
+        Set<String> parserConfiguration = index.getKnownClasses()
+                .stream()
+                .map(ClassInfo::name)
+                .map(DotName::toString)
+                .filter(name -> name.startsWith("org.beanio") && 
name.endsWith("ParserConfiguration"))
+                .collect(Collectors.toUnmodifiableSet());
+        reflectiveClass
+                
.produce(ReflectiveClassBuildItem.builder(parserConfiguration.toArray(new 
String[0])).methods(true).build());
+
+        Set<String> errorHandlers = 
index.getAllKnownImplementors(BeanReaderErrorHandler.class)
+                .stream()
+                .map(ClassInfo::name)
+                .map(DotName::toString)
+                .collect(Collectors.toUnmodifiableSet());
+        
reflectiveClass.produce(ReflectiveClassBuildItem.builder(errorHandlers.toArray(new
 String[0])).build());
+
+        Set<String> recordClasses = index.getAnnotations(Record.class)
+                .stream()
+                .map(AnnotationInstance::target)
+                .filter(target -> target.kind().equals(Kind.CLASS))
+                .map(AnnotationTarget::asClass)
+                .map(ClassInfo::name)
+                .map(DotName::toString)
+                .collect(Collectors.toUnmodifiableSet());
+        reflectiveClass
+                
.produce(ReflectiveClassBuildItem.builder(recordClasses.toArray(new 
String[0])).fields(true).methods(true)
+                        .build());
+    }
+
+    @BuildStep
+    void registerResourceBundles(BeanioPropertiesBuildItem beanioProperties,
+            BuildProducer<NativeImageResourceBundleBuildItem> 
nativeImageResourceBundle) {
+        Properties properties = beanioProperties.getProperties();
+        properties.keySet()
+                .stream()
+                .filter(key -> key.toString().endsWith(".messages"))
+                .map(properties::get)
+                .map(Object::toString)
+                .map(NativeImageResourceBundleBuildItem::new)
+                .forEach(nativeImageResourceBundle::produce);
+    }
+}
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
 
b/extensions/beanio/deployment/src/main/java/org/apache/camel/quarkus/component/beanio/deployment/BeanioPropertiesBuildItem.java
similarity index 66%
copy from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
copy to 
extensions/beanio/deployment/src/main/java/org/apache/camel/quarkus/component/beanio/deployment/BeanioPropertiesBuildItem.java
index 85afd0bf31..876532e88e 100644
--- 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
+++ 
b/extensions/beanio/deployment/src/main/java/org/apache/camel/quarkus/component/beanio/deployment/BeanioPropertiesBuildItem.java
@@ -14,22 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.beanio.it.model;
+package org.apache.camel.quarkus.component.beanio.deployment;
 
-public class Error {
-    private final String record;
-    private final String message;
+import java.util.Properties;
 
-    public Error(String record, String message) {
-        this.record = record;
-        this.message = message;
-    }
+import io.quarkus.builder.item.SimpleBuildItem;
+
+public final class BeanioPropertiesBuildItem extends SimpleBuildItem {
+    private final Properties properties;
 
-    public String getRecord() {
-        return record;
+    public BeanioPropertiesBuildItem(Properties properties) {
+        this.properties = properties;
     }
 
-    public String getMessage() {
-        return message;
+    public Properties getProperties() {
+        return properties;
     }
 }
diff --git a/extensions-jvm/beanio/pom.xml b/extensions/beanio/pom.xml
similarity index 96%
rename from extensions-jvm/beanio/pom.xml
rename to extensions/beanio/pom.xml
index 37f7b21c75..8cdc326d48 100644
--- a/extensions-jvm/beanio/pom.xml
+++ b/extensions/beanio/pom.xml
@@ -21,7 +21,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-extensions-jvm</artifactId>
+        <artifactId>camel-quarkus-extensions</artifactId>
         <version>3.16.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
diff --git a/extensions-jvm/beanio/runtime/pom.xml 
b/extensions/beanio/runtime/pom.xml
similarity index 92%
rename from extensions-jvm/beanio/runtime/pom.xml
rename to extensions/beanio/runtime/pom.xml
index ba7c205857..79851fed96 100644
--- a/extensions-jvm/beanio/runtime/pom.xml
+++ b/extensions/beanio/runtime/pom.xml
@@ -32,9 +32,14 @@
 
     <properties>
         <camel.quarkus.jvmSince>3.8.0</camel.quarkus.jvmSince>
+        <camel.quarkus.nativeSince>3.16.0</camel.quarkus.nativeSince>
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-xml-jaxp</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-core</artifactId>
diff --git a/extensions/beanio/runtime/src/main/doc/usage.adoc 
b/extensions/beanio/runtime/src/main/doc/usage.adoc
new file mode 100644
index 0000000000..ec95d1b8f7
--- /dev/null
+++ b/extensions/beanio/runtime/src/main/doc/usage.adoc
@@ -0,0 +1,31 @@
+=== BeanIO in native mode
+
+==== XML mapping files
+
+When BeanIO configuration is defined in XML files that are read from the 
classpath.
+You must ensure each file is added to the native application image.
+To do this, add the `quarkus.native.resources.includes` configuration property 
to `application.properties`. For example.
+
+[source,properties]
+----
+quarkus.native.resources.includes=mapping.xml,model/other-mapping.xml
+----
+
+More information about selecting resources for inclusion in the native 
executable can be found at 
xref:user-guide/native-mode.adoc#embedding-resource-in-native-executable[Embedding
 resources in native executable].
+
+==== BeanIO Record classes
+
+All classes that participate in BeanIO marshal / unmarshal operations must be 
registered for reflection.
+
+This can be achieved with the `@RegisterForReflection`
+annotation or with configuration property 
`quarkus.camel.native.reflection.include-patterns`. For example:
+
+[source,java]
+----
+@RegisterForReflection
+public class Employee {
+    ...
+}
+----
+
+Refer to the xref:user-guide/native-mode.adoc#reflection[Native mode] user 
guide for more information.
diff --git 
a/extensions-jvm/beanio/runtime/src/main/resources/META-INF/quarkus-extension.yaml
 b/extensions/beanio/runtime/src/main/resources/META-INF/quarkus-extension.yaml
similarity index 97%
rename from 
extensions-jvm/beanio/runtime/src/main/resources/META-INF/quarkus-extension.yaml
rename to 
extensions/beanio/runtime/src/main/resources/META-INF/quarkus-extension.yaml
index aff76a2c0a..60a4b519e2 100644
--- 
a/extensions-jvm/beanio/runtime/src/main/resources/META-INF/quarkus-extension.yaml
+++ 
b/extensions/beanio/runtime/src/main/resources/META-INF/quarkus-extension.yaml
@@ -26,9 +26,8 @@ description: "Marshal and unmarshal Java beans to and from 
flat files (such as C
 metadata:
   icon-url: 
"https://raw.githubusercontent.com/apache/camel-website/main/antora-ui-camel/src/img/logo-d.svg";
   sponsor: "Apache Software Foundation"
-  unlisted: true
   guide: 
"https://camel.apache.org/camel-quarkus/latest/reference/extensions/beanio.html";
   categories:
   - "integration"
   status:
-  - "preview"
+  - "stable"
diff --git a/extensions/pom.xml b/extensions/pom.xml
index 2cc68249b3..188bd03ace 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -69,6 +69,7 @@
         <module>base64</module>
         <module>bean</module>
         <module>bean-validator</module>
+        <module>beanio</module>
         <module>bindy</module>
         <module>box</module>
         <module>braintree</module>
diff --git a/integration-tests-jvm/pom.xml b/integration-tests-jvm/pom.xml
index abdd819563..49293da311 100644
--- a/integration-tests-jvm/pom.xml
+++ b/integration-tests-jvm/pom.xml
@@ -41,7 +41,6 @@
         <module>azure-servicebus</module>
         <module>azure-storage-datalake</module>
         <module>barcode</module>
-        <module>beanio</module>
         <module>bonita</module>
         <module>chatscript</module>
         <module>chunk</module>
diff --git a/integration-tests-jvm/beanio/pom.xml 
b/integration-tests/beanio/pom.xml
similarity index 83%
rename from integration-tests-jvm/beanio/pom.xml
rename to integration-tests/beanio/pom.xml
index ed05ee3691..ddd1113524 100644
--- a/integration-tests-jvm/beanio/pom.xml
+++ b/integration-tests/beanio/pom.xml
@@ -117,6 +117,33 @@
                 </dependency>
             </dependencies>
         </profile>
+        <profile>
+            <id>native</id>
+            <activation>
+                <property>
+                    <name>native</name>
+                </property>
+            </activation>
+            <properties>
+                <quarkus.native.enabled>true</quarkus.native.enabled>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
     </profiles>
 
 </project>
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/BeanioResource.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/BeanioResource.java
similarity index 100%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/BeanioResource.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/BeanioResource.java
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/BeanioRoutes.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/BeanioRoutes.java
similarity index 100%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/BeanioRoutes.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/BeanioRoutes.java
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/A1Record.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/A1Record.java
similarity index 95%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/A1Record.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/A1Record.java
index b1d7bb7a91..15846a15cb 100644
--- 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/A1Record.java
+++ 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/A1Record.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.quarkus.component.beanio.it.model;
 
+import io.quarkus.runtime.annotations.RegisterForReflection;
+
+@RegisterForReflection
 public class A1Record extends AbstractRecord {
     Double currentPrice;
 
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/AbstractRecord.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/AbstractRecord.java
similarity index 95%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/AbstractRecord.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/AbstractRecord.java
index 668a7245d5..09c3387415 100644
--- 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/AbstractRecord.java
+++ 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/AbstractRecord.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.quarkus.component.beanio.it.model;
 
+import io.quarkus.runtime.annotations.RegisterForReflection;
+
+@RegisterForReflection
 public abstract class AbstractRecord {
     String sedol;
     String source;
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/B1Record.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/B1Record.java
similarity index 95%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/B1Record.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/B1Record.java
index 051ea6306e..46896c28a4 100644
--- 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/B1Record.java
+++ 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/B1Record.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.quarkus.component.beanio.it.model;
 
+import io.quarkus.runtime.annotations.RegisterForReflection;
+
+@RegisterForReflection
 public class B1Record extends AbstractRecord {
     String securityName;
 
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/CustomErrorHandler.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/CustomErrorHandler.java
similarity index 100%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/CustomErrorHandler.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/CustomErrorHandler.java
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Employee.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Employee.java
similarity index 97%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Employee.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Employee.java
index f3bc71cc7c..ca31047661 100644
--- 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Employee.java
+++ 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Employee.java
@@ -18,6 +18,9 @@ package org.apache.camel.quarkus.component.beanio.it.model;
 
 import java.util.Date;
 
+import io.quarkus.runtime.annotations.RegisterForReflection;
+
+@RegisterForReflection
 public class Employee {
     private String firstName;
     private String lastName;
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/EmployeeAnnotated.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/EmployeeAnnotated.java
similarity index 100%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/EmployeeAnnotated.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/EmployeeAnnotated.java
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
similarity index 93%
copy from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
copy to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
index 85afd0bf31..459430173d 100644
--- 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
+++ 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.quarkus.component.beanio.it.model;
 
+import io.quarkus.runtime.annotations.RegisterForReflection;
+
+@RegisterForReflection
 public class Error {
     private final String record;
     private final String message;
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Header.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Header.java
similarity index 97%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Header.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Header.java
index 7e1d7c64da..77580ffb05 100644
--- 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Header.java
+++ 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Header.java
@@ -20,8 +20,10 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
+import io.quarkus.runtime.annotations.RegisterForReflection;
 import org.apache.camel.dataformat.beanio.BeanIOHeader;
 
+@RegisterForReflection
 public class Header implements BeanIOHeader {
     String identifier;
     String recordType;
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Separator.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Separator.java
similarity index 95%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Separator.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Separator.java
index 78626bbb64..02f095ec29 100644
--- 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Separator.java
+++ 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Separator.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.quarkus.component.beanio.it.model;
 
+import io.quarkus.runtime.annotations.RegisterForReflection;
+
+@RegisterForReflection
 public class Separator {
     String value;
 
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Trailer.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Trailer.java
similarity index 95%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Trailer.java
rename to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Trailer.java
index 219eb4554e..2ff5990f90 100644
--- 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Trailer.java
+++ 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Trailer.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.quarkus.component.beanio.it.model;
 
+import io.quarkus.runtime.annotations.RegisterForReflection;
+
+@RegisterForReflection
 public class Trailer {
     int numberOfRecords;
 
diff --git a/integration-tests/beanio/src/main/resources/application.properties 
b/integration-tests/beanio/src/main/resources/application.properties
new file mode 100644
index 0000000000..5610e20f5a
--- /dev/null
+++ b/integration-tests/beanio/src/main/resources/application.properties
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+quarkus.native.resources.includes=*mapping.xml
\ No newline at end of file
diff --git 
a/integration-tests-jvm/beanio/src/main/resources/complex-mapping.xml 
b/integration-tests/beanio/src/main/resources/complex-mapping.xml
similarity index 98%
rename from integration-tests-jvm/beanio/src/main/resources/complex-mapping.xml
rename to integration-tests/beanio/src/main/resources/complex-mapping.xml
index feab11cff8..be00b35d06 100644
--- a/integration-tests-jvm/beanio/src/main/resources/complex-mapping.xml
+++ b/integration-tests/beanio/src/main/resources/complex-mapping.xml
@@ -35,6 +35,9 @@
     </template>
 
     <stream name="securityData" format="fixedlength" strict="true">
+        <parser>
+            <property name="recordTerminator" value="\n"/>
+        </parser>
         <group name="headerGroup" minOccurs="1" maxOccurs="1" order="1">
             <record name="headerA1" 
class="org.apache.camel.quarkus.component.beanio.it.model.Header" order="1" 
minLength="32"
                     maxLength="32"
diff --git 
a/integration-tests-jvm/beanio/src/main/resources/employee-mapping.xml 
b/integration-tests/beanio/src/main/resources/employee-mapping.xml
similarity index 89%
rename from integration-tests-jvm/beanio/src/main/resources/employee-mapping.xml
rename to integration-tests/beanio/src/main/resources/employee-mapping.xml
index 8773698947..b605d57476 100644
--- a/integration-tests-jvm/beanio/src/main/resources/employee-mapping.xml
+++ b/integration-tests/beanio/src/main/resources/employee-mapping.xml
@@ -19,6 +19,9 @@
 -->
 <beanio xmlns="http://www.beanio.org/2012/03"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://www.beanio.org/2012/03 
http://www.beanio.org/2012/03/mapping.xsd";>
     <stream name="employeeCSV" format="csv">
+        <parser>
+            <property name="recordTerminator" value="\n"/>
+        </parser>
         <record name="employee" 
class="org.apache.camel.quarkus.component.beanio.it.model.Employee">
             <field name="firstName"/>
             <field name="lastName"/>
@@ -39,6 +42,7 @@
     <stream name="employeeDelimited" format="delimited">
         <parser>
             <property name="delimiter" value="|" />
+            <property name="recordTerminator" value="\n"/>
         </parser>
         <record name="employee" 
class="org.apache.camel.quarkus.component.beanio.it.model.Employee">
             <field name="firstName"/>
@@ -49,6 +53,9 @@
         </record>
     </stream>
     <stream name="employeeFixedLength" format="fixedlength">
+        <parser>
+            <property name="recordTerminator" value="\n"/>
+        </parser>
         <record name="employee" 
class="org.apache.camel.quarkus.component.beanio.it.model.Employee">
             <field name="firstName" length="10"/>
             <field name="lastName" length="15"/>
@@ -58,6 +65,9 @@
         </record>
     </stream>
     <stream name="employeeAnnotated" format="csv">
+        <parser>
+            <property name="recordTerminator" value="\n"/>
+        </parser>
         <record name="employeeAnnotated" 
class="org.apache.camel.quarkus.component.beanio.it.model.EmployeeAnnotated"/>
     </stream>
 </beanio>
\ No newline at end of file
diff --git 
a/integration-tests-jvm/beanio/src/main/resources/single-object-mapping.xml 
b/integration-tests/beanio/src/main/resources/single-object-mapping.xml
similarity index 94%
rename from 
integration-tests-jvm/beanio/src/main/resources/single-object-mapping.xml
rename to integration-tests/beanio/src/main/resources/single-object-mapping.xml
index f158226945..c983d76148 100644
--- a/integration-tests-jvm/beanio/src/main/resources/single-object-mapping.xml
+++ b/integration-tests/beanio/src/main/resources/single-object-mapping.xml
@@ -19,6 +19,9 @@
 -->
 <beanio xmlns="http://www.beanio.org/2012/03"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://www.beanio.org/2012/03 
http://www.beanio.org/2012/03/mapping.xsd";>
   <stream name="keyValueStream" format="fixedlength">
+    <parser>
+      <property name="recordTerminator" value="\n"/>
+    </parser>
     <record name="entry" class="map" minOccurs="1">
       <field name="key" length="4" required="true" justify="left" />
       <field name="separator" length="1" required="true" justify="left" />
diff --git 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
 
b/integration-tests/beanio/src/test/java/org/apache/camel/quarkus/component/beanio/it/BeanioIT.java
similarity index 67%
rename from 
integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
rename to 
integration-tests/beanio/src/test/java/org/apache/camel/quarkus/component/beanio/it/BeanioIT.java
index 85afd0bf31..9c92101408 100644
--- 
a/integration-tests-jvm/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Error.java
+++ 
b/integration-tests/beanio/src/test/java/org/apache/camel/quarkus/component/beanio/it/BeanioIT.java
@@ -14,22 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.beanio.it.model;
+package org.apache.camel.quarkus.component.beanio.it;
 
-public class Error {
-    private final String record;
-    private final String message;
+import io.quarkus.test.junit.QuarkusIntegrationTest;
 
-    public Error(String record, String message) {
-        this.record = record;
-        this.message = message;
-    }
+@QuarkusIntegrationTest
+class BeanioIT extends BeanioTest {
 
-    public String getRecord() {
-        return record;
-    }
-
-    public String getMessage() {
-        return message;
-    }
 }
diff --git 
a/integration-tests-jvm/beanio/src/test/java/org/apache/camel/quarkus/component/beanio/it/BeanioTest.java
 
b/integration-tests/beanio/src/test/java/org/apache/camel/quarkus/component/beanio/it/BeanioTest.java
similarity index 100%
rename from 
integration-tests-jvm/beanio/src/test/java/org/apache/camel/quarkus/component/beanio/it/BeanioTest.java
rename to 
integration-tests/beanio/src/test/java/org/apache/camel/quarkus/component/beanio/it/BeanioTest.java
diff --git a/integration-tests-jvm/beanio/src/test/resources/complex-data.txt 
b/integration-tests/beanio/src/test/resources/complex-data.txt
similarity index 100%
rename from integration-tests-jvm/beanio/src/test/resources/complex-data.txt
rename to integration-tests/beanio/src/test/resources/complex-data.txt
diff --git a/integration-tests-jvm/beanio/src/test/resources/employees-csv.txt 
b/integration-tests/beanio/src/test/resources/employees-csv.txt
similarity index 100%
rename from integration-tests-jvm/beanio/src/test/resources/employees-csv.txt
rename to integration-tests/beanio/src/test/resources/employees-csv.txt
diff --git 
a/integration-tests-jvm/beanio/src/test/resources/employees-delimited.txt 
b/integration-tests/beanio/src/test/resources/employees-delimited.txt
similarity index 100%
rename from 
integration-tests-jvm/beanio/src/test/resources/employees-delimited.txt
rename to integration-tests/beanio/src/test/resources/employees-delimited.txt
diff --git 
a/integration-tests-jvm/beanio/src/test/resources/employees-fixedlength.txt 
b/integration-tests/beanio/src/test/resources/employees-fixedlength.txt
similarity index 100%
rename from 
integration-tests-jvm/beanio/src/test/resources/employees-fixedlength.txt
rename to integration-tests/beanio/src/test/resources/employees-fixedlength.txt
diff --git 
a/integration-tests-jvm/beanio/src/test/resources/employees-with-error.txt 
b/integration-tests/beanio/src/test/resources/employees-with-error.txt
similarity index 100%
rename from 
integration-tests-jvm/beanio/src/test/resources/employees-with-error.txt
rename to integration-tests/beanio/src/test/resources/employees-with-error.txt
diff --git a/integration-tests-jvm/beanio/src/test/resources/employees-xml.txt 
b/integration-tests/beanio/src/test/resources/employees-xml.txt
similarity index 100%
rename from integration-tests-jvm/beanio/src/test/resources/employees-xml.txt
rename to integration-tests/beanio/src/test/resources/employees-xml.txt
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 658afa1279..051a30e09d 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -64,6 +64,7 @@
         <module>azure-grouped</module>
         <module>base64</module>
         <module>bean-validator</module>
+        <module>beanio</module>
         <module>bindy</module>
         <module>box</module>
         <module>braintree</module>
diff --git a/tooling/scripts/test-categories.yaml 
b/tooling/scripts/test-categories.yaml
index cee39642f0..4f9b4fd620 100644
--- a/tooling/scripts/test-categories.yaml
+++ b/tooling/scripts/test-categories.yaml
@@ -35,6 +35,7 @@ group-01:
   - mllp
 group-02:
   - aws2
+  - beanio
   - google-pubsub
   - grpc
   - jackson-avro


Reply via email to