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 f3745bb451 fixes #6771 DataFormat endpoints ignore camel.dataformat.* 
configuration properties
f3745bb451 is described below

commit f3745bb4511f964211e8340ed0e72115d464acf0
Author: Jiri Ondrusek <ondrusek.j...@gmail.com>
AuthorDate: Tue Apr 8 14:20:21 2025 +0200

    fixes #6771 DataFormat endpoints ignore camel.dataformat.* configuration 
properties
---
 .../pages/reference/extensions/dataformat.adoc     | 24 +++++++
 .../dataformat/deployment/DataformatProcessor.java | 17 +++++
 .../dataformat/CamelDataformatConfig.java}         | 28 +++++---
 .../component/dataformat/DataformatRecorder.java   | 77 ++++++++++++++++++++++
 integration-tests/beanio/pom.xml                   | 17 +++++
 .../component/beanio/it/BeanioResource.java        | 47 +++++++------
 .../quarkus/component/beanio/it/BeanioRoutes.java  |  4 ++
 .../quarkus/component/beanio/it/model/Person.java  | 30 ++++++---
 .../src/main/resources/application.properties      |  6 +-
 .../beanio/src/main/resources/employee-mapping.xml | 12 ++++
 .../quarkus/component/beanio/it/BeanioTest.java    | 52 +++++++++++----
 .../beanio/src/test/resources/employees-csv.txt    |  2 +-
 .../src/test/resources/employees-delimited.txt     |  2 +-
 .../src/test/resources/employees-fixedlength.txt   |  2 +-
 .../src/test/resources/employees-with-error.txt    |  2 +-
 .../beanio/src/test/resources/employees-xml.txt    |  2 +-
 16 files changed, 271 insertions(+), 53 deletions(-)

diff --git a/docs/modules/ROOT/pages/reference/extensions/dataformat.adoc 
b/docs/modules/ROOT/pages/reference/extensions/dataformat.adoc
index 613682cfe6..8adcb34c9d 100644
--- a/docs/modules/ROOT/pages/reference/extensions/dataformat.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/dataformat.adoc
@@ -45,3 +45,27 @@ Or add the coordinates to your existing project:
 ifeval::[{doc-show-user-guide-link} == true]
 Check the xref:user-guide/index.adoc[User guide] for more information about 
writing Camel Quarkus applications.
 endif::[]
+
+[id="extensions-dataformat-additional-camel-quarkus-configuration"]
+== Additional Camel Quarkus configuration
+
+[width="100%",cols="80,5,15",options="header"]
+|===
+| Configuration property | Type | Default
+
+
+a| 
[[camel-dataformat-dataformats]]`link:#camel-dataformat-dataformats[camel.dataformat."dataformats"]`
+
+Configuration of properties for any dataformat.
+(In the format camel.dataformat."dataformat_name"."property"=value
+
+i.e.
+camel.dataformat.beanio.stream-name = test-stream
+camel.dataformat.beanio.mapping = test-mapping.xml
+| `Map<String,Map<String,String>>`
+| 
+|===
+
+[.configuration-legend]
+{doc-link-icon-lock}[title=Fixed at build time] Configuration property fixed 
at build time. All other configuration properties are overridable at runtime.
+
diff --git 
a/extensions/dataformat/deployment/src/main/java/org/apache/camel/quarkus/component/dataformat/deployment/DataformatProcessor.java
 
b/extensions/dataformat/deployment/src/main/java/org/apache/camel/quarkus/component/dataformat/deployment/DataformatProcessor.java
index f6a1b2d18b..2813f7df5b 100644
--- 
a/extensions/dataformat/deployment/src/main/java/org/apache/camel/quarkus/component/dataformat/deployment/DataformatProcessor.java
+++ 
b/extensions/dataformat/deployment/src/main/java/org/apache/camel/quarkus/component/dataformat/deployment/DataformatProcessor.java
@@ -17,7 +17,14 @@
 package org.apache.camel.quarkus.component.dataformat.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.runtime.RuntimeValue;
+import org.apache.camel.CamelContext;
+import org.apache.camel.quarkus.component.dataformat.CamelDataformatConfig;
+import org.apache.camel.quarkus.component.dataformat.DataformatRecorder;
+import org.apache.camel.quarkus.core.deployment.spi.CamelContextBuildItem;
 
 class DataformatProcessor {
 
@@ -28,4 +35,14 @@ class DataformatProcessor {
         return new FeatureBuildItem(FEATURE);
     }
 
+    @Record(ExecutionTime.RUNTIME_INIT)
+    @BuildStep
+    void dataformatCustomizer(
+            CamelContextBuildItem context,
+            CamelDataformatConfig config,
+            DataformatRecorder recorder) {
+
+        RuntimeValue<CamelContext> camelContext = context.getCamelContext();
+        recorder.createDataformatCustomizer(camelContext, config);
+    }
 }
diff --git 
a/extensions/dataformat/deployment/src/main/java/org/apache/camel/quarkus/component/dataformat/deployment/DataformatProcessor.java
 
b/extensions/dataformat/runtime/src/main/java/org/apache/camel/quarkus/component/dataformat/CamelDataformatConfig.java
similarity index 52%
copy from 
extensions/dataformat/deployment/src/main/java/org/apache/camel/quarkus/component/dataformat/deployment/DataformatProcessor.java
copy to 
extensions/dataformat/runtime/src/main/java/org/apache/camel/quarkus/component/dataformat/CamelDataformatConfig.java
index f6a1b2d18b..16d243dbf3 100644
--- 
a/extensions/dataformat/deployment/src/main/java/org/apache/camel/quarkus/component/dataformat/deployment/DataformatProcessor.java
+++ 
b/extensions/dataformat/runtime/src/main/java/org/apache/camel/quarkus/component/dataformat/CamelDataformatConfig.java
@@ -14,18 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.dataformat.deployment;
+package org.apache.camel.quarkus.component.dataformat;
 
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
+import java.util.Map;
 
-class DataformatProcessor {
+import io.quarkus.runtime.annotations.ConfigPhase;
+import io.quarkus.runtime.annotations.ConfigRoot;
+import io.smallrye.config.ConfigMapping;
+import io.smallrye.config.WithParentName;
 
-    private static final String FEATURE = "camel-dataformat";
+@ConfigRoot(phase = ConfigPhase.RUN_TIME)
+@ConfigMapping(prefix = "camel.dataformat")
+public interface CamelDataformatConfig {
 
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
-    }
+    /**
+     * Configuration of properties for any dataformat.
+     * (In the format camel.dataformat."dataformat_name"."property"=value
+     *
+     * i.e.
+     * camel.dataformat.beanio.stream-name = test-stream
+     * camel.dataformat.beanio.mapping = test-mapping.xml
+     */
+    @WithParentName
+    Map<String, Map<String, String>> dataformats();
 
 }
diff --git 
a/extensions/dataformat/runtime/src/main/java/org/apache/camel/quarkus/component/dataformat/DataformatRecorder.java
 
b/extensions/dataformat/runtime/src/main/java/org/apache/camel/quarkus/component/dataformat/DataformatRecorder.java
new file mode 100644
index 0000000000..ef8d0204fd
--- /dev/null
+++ 
b/extensions/dataformat/runtime/src/main/java/org/apache/camel/quarkus/component/dataformat/DataformatRecorder.java
@@ -0,0 +1,77 @@
+/*
+ * 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.dataformat;
+
+import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import io.quarkus.runtime.RuntimeValue;
+import io.quarkus.runtime.annotations.Recorder;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Ordered;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.support.LifecycleStrategySupport;
+import org.apache.camel.support.PropertyBindingSupport;
+import org.eclipse.microprofile.config.ConfigProvider;
+
+@Recorder
+public class DataformatRecorder {
+    public void createDataformatCustomizer(final RuntimeValue<CamelContext> 
camelContext, final CamelDataformatConfig config) {
+        camelContext.getValue().addLifecycleStrategy(new 
BeanioLifecycleStrategy(config, camelContext));
+    }
+
+    private static class BeanioLifecycleStrategy extends 
LifecycleStrategySupport implements Ordered {
+
+        //kebab-case pattern
+        private final static Pattern KEBAB_CASE_PATTERN = 
Pattern.compile("-([a-z])");
+
+        private final CamelDataformatConfig config;
+        private final RuntimeValue<CamelContext> camelContext;
+
+        public BeanioLifecycleStrategy(CamelDataformatConfig config, 
RuntimeValue<CamelContext> camelContext) {
+            this.config = config;
+            this.camelContext = camelContext;
+        }
+
+        @Override
+        public int getOrder() {
+            return Ordered.HIGHEST;
+        }
+
+        @Override
+        public void onDataFormatCreated(String name, DataFormat dataFormat) {
+
+            if 
(ConfigProvider.getConfig().getOptionalValue("camel.component.dataformat.customizer.enabled",
 Boolean.class)
+                    .orElse(true)
+                    && 
ConfigProvider.getConfig().getOptionalValue("camel.component.customizer.enabled",
 Boolean.class)
+                            .orElse(true)) {
+
+                //set properties from application.properties
+                Map<String, String> properties = 
config.dataformats().get(name);
+
+                if (properties != null) {
+                    //convert properties to camel Case
+                    Map<String, Object> camelCaseMap = 
properties.entrySet().stream().collect(Collectors.toMap(
+                            entry -> 
KEBAB_CASE_PATTERN.matcher(entry.getKey()).replaceAll(mr -> 
mr.group(1).toUpperCase()),
+                            Map.Entry::getValue));
+                    
PropertyBindingSupport.build().withIgnoreCase(true).bind(camelContext.getValue(),
 dataFormat, camelCaseMap);
+                }
+            }
+        }
+    }
+}
diff --git a/integration-tests/beanio/pom.xml b/integration-tests/beanio/pom.xml
index 7f0de32484..7f036d2a7a 100644
--- a/integration-tests/beanio/pom.xml
+++ b/integration-tests/beanio/pom.xml
@@ -35,6 +35,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-beanio</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-dataformat</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-direct</artifactId>
@@ -89,6 +93,19 @@
                         </exclusion>
                     </exclusions>
                 </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    
<artifactId>camel-quarkus-dataformat-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
                 <dependency>
                     <groupId>org.apache.camel.quarkus</groupId>
                     <artifactId>camel-quarkus-direct-deployment</artifactId>
diff --git 
a/integration-tests/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
index 1d1d25f48a..015bc1a2e2 100644
--- 
a/integration-tests/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
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import jakarta.inject.Inject;
 import jakarta.json.Json;
@@ -50,13 +51,16 @@ import 
org.apache.camel.quarkus.component.beanio.it.model.Trailer;
 
 @Path("/beanio")
 public class BeanioResource {
-    public static final SimpleDateFormat FORMATTER = new 
SimpleDateFormat("yyyy-MM-dd");
+    public static String DATA_FORMAT = "yyyy-MM-dd";
+    private final SimpleDateFormat formatter = new 
SimpleDateFormat(DATA_FORMAT);
 
     @Inject
     CamelContext context;
 
     @Inject
     ProducerTemplate producerTemplate;
+    @Inject
+    org.jboss.logging.Logger logger;
 
     @Path("/marshal")
     @POST
@@ -81,17 +85,7 @@ public class BeanioResource {
     @SuppressWarnings("unchecked")
     public Response unmarshal(String data, @QueryParam("type") String type) {
         List<Employee> employees = 
producerTemplate.requestBodyAndHeader("direct:unmarshal", data, "type", type, 
List.class);
-        JsonArrayBuilder array = Json.createArrayBuilder();
-        for (Employee employee : employees) {
-            JsonObjectBuilder builder = Json.createObjectBuilder();
-            builder.add("firstName", employee.getFirstName());
-            builder.add("lastName", employee.getLastName());
-            builder.add("title", employee.getTitle());
-            builder.add("hireDate", FORMATTER.format(employee.getHireDate()));
-            builder.add("salary", employee.getSalary());
-            array.add(builder.build());
-        }
-        return Response.ok(array.build()).build();
+        return getResponse(employees);
     }
 
     @Path("/unmarshal/annotated")
@@ -108,7 +102,7 @@ public class BeanioResource {
             builder.add("firstName", employee.getFirstName());
             builder.add("lastName", employee.getLastName());
             builder.add("title", employee.getTitle());
-            builder.add("hireDate", FORMATTER.format(employee.getHireDate()));
+            builder.add("hireDate", formatter.format(employee.getHireDate()));
             builder.add("salary", employee.getSalary());
             array.add(builder.build());
         }
@@ -146,7 +140,7 @@ public class BeanioResource {
                 builder.add("firstName", employee.getFirstName());
                 builder.add("lastName", employee.getLastName());
                 builder.add("title", employee.getTitle());
-                builder.add("hireDate", 
FORMATTER.format(employee.getHireDate()));
+                builder.add("hireDate", 
formatter.format(employee.getHireDate()));
                 builder.add("salary", employee.getSalary());
             } else if (object instanceof Error) {
                 Error error = (Error) object;
@@ -182,7 +176,7 @@ public class BeanioResource {
                 Header header = (Header) object;
                 builder.add("identifier", header.getIdentifier());
                 builder.add("recordType", header.getRecordType());
-                builder.add("date", FORMATTER.format(header.getHeaderDate()));
+                builder.add("date", formatter.format(header.getHeaderDate()));
             } else if (object instanceof Separator) {
                 Separator separator = (Separator) object;
                 builder.add("value", separator.getValue());
@@ -213,7 +207,7 @@ public class BeanioResource {
     private List<Object> createComplexObject() throws Exception {
         String source = "camel-beanio";
         List<Object> complexObject = new ArrayList<>();
-        Date date = FORMATTER.parse("2008-08-03");
+        Date date = formatter.parse("2008-08-03");
         Header hFirst = new Header("A1", date, "PRICE");
         Header hSecond = new Header("B1", date, "SECURITY");
         Separator headerEnd = new Separator("HEADER END");
@@ -258,14 +252,29 @@ public class BeanioResource {
         mockEndpoint.assertIsSatisfied(5000);
         List<Exchange> exchanges = mockEndpoint.getExchanges();
 
+        List<Employee> employees = exchanges.stream().map(e -> 
e.getMessage().getBody(Employee.class))
+                .collect(Collectors.toList());
+        return getResponse(employees);
+    }
+
+    @Path("/unmarshal/global")
+    @POST
+    @Consumes(MediaType.TEXT_PLAIN)
+    @Produces(MediaType.APPLICATION_JSON)
+    @SuppressWarnings("unchecked")
+    public Response marshalEmployees(String csv) {
+        List<Employee> employees = 
producerTemplate.requestBody("direct:unmarshalGlobal", csv, List.class);
+        return getResponse(employees);
+    }
+
+    private Response getResponse(List<Employee> employees) {
         JsonArrayBuilder array = Json.createArrayBuilder();
-        for (Exchange exchange : exchanges) {
-            Employee employee = exchange.getMessage().getBody(Employee.class);
+        for (Employee employee : employees) {
             JsonObjectBuilder builder = Json.createObjectBuilder();
             builder.add("firstName", employee.getFirstName());
             builder.add("lastName", employee.getLastName());
             builder.add("title", employee.getTitle());
-            builder.add("hireDate", FORMATTER.format(employee.getHireDate()));
+            builder.add("hireDate", formatter.format(employee.getHireDate()));
             builder.add("salary", employee.getSalary());
             array.add(builder.build());
         }
diff --git 
a/integration-tests/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
index 766d8a024e..e5c69cda12 100644
--- 
a/integration-tests/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
@@ -91,5 +91,9 @@ public class BeanioRoutes extends RouteBuilder {
         from("direct:unmarshalWithSplitter")
                 .split(splitter).streaming()
                 .to("mock:splitEmployees");
+
+        from("direct:unmarshalGlobal")
+                .to("dataformat:beanio:unmarshal");
+
     }
 }
diff --git 
a/extensions/dataformat/deployment/src/main/java/org/apache/camel/quarkus/component/dataformat/deployment/DataformatProcessor.java
 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Person.java
similarity index 62%
copy from 
extensions/dataformat/deployment/src/main/java/org/apache/camel/quarkus/component/dataformat/deployment/DataformatProcessor.java
copy to 
integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Person.java
index f6a1b2d18b..8bedf83ac9 100644
--- 
a/extensions/dataformat/deployment/src/main/java/org/apache/camel/quarkus/component/dataformat/deployment/DataformatProcessor.java
+++ 
b/integration-tests/beanio/src/main/java/org/apache/camel/quarkus/component/beanio/it/model/Person.java
@@ -14,18 +14,32 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.dataformat.deployment;
+package org.apache.camel.quarkus.component.beanio.it.model;
 
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
+public class Person {
 
-class DataformatProcessor {
+    private String name;
 
-    private static final String FEATURE = "camel-dataformat";
+    private int age;
 
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
+    public String getName() {
+        return name;
     }
 
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int getAge() {
+        return age;
+    }
+
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    @Override
+    public String toString() {
+        return "Person{name='" + name + "', age=" + age + "}";
+    }
 }
diff --git a/integration-tests/beanio/src/main/resources/application.properties 
b/integration-tests/beanio/src/main/resources/application.properties
index 5610e20f5a..148e0d7a40 100644
--- a/integration-tests/beanio/src/main/resources/application.properties
+++ b/integration-tests/beanio/src/main/resources/application.properties
@@ -14,4 +14,8 @@
 ## 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
+quarkus.native.resources.includes=*mapping.xml
+
+camel.dataformat.beanio.stream-name = employee-stream
+camel.dataformat.beanio.mapping = employee-mapping.xml
+camel.dataformat.beanio.ignore-unexpected-records = false
\ No newline at end of file
diff --git a/integration-tests/beanio/src/main/resources/employee-mapping.xml 
b/integration-tests/beanio/src/main/resources/employee-mapping.xml
index b605d57476..081e3ac824 100644
--- a/integration-tests/beanio/src/main/resources/employee-mapping.xml
+++ b/integration-tests/beanio/src/main/resources/employee-mapping.xml
@@ -70,4 +70,16 @@
         </parser>
         <record name="employeeAnnotated" 
class="org.apache.camel.quarkus.component.beanio.it.model.EmployeeAnnotated"/>
     </stream>
+    <stream name="employee-stream" 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"/>
+            <field name="title"/>
+            <field name="salary"/>
+            <field name="hireDate" format="MMddyyyy"/>
+        </record>
+    </stream>
 </beanio>
\ No newline at end of file
diff --git 
a/integration-tests/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
index e70c53bb2d..b82c10c461 100644
--- 
a/integration-tests/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
@@ -17,6 +17,8 @@
 package org.apache.camel.quarkus.component.beanio.it;
 
 import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -32,12 +34,13 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 
-import static 
org.apache.camel.quarkus.component.beanio.it.BeanioResource.FORMATTER;
 import static org.hamcrest.Matchers.is;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @QuarkusTest
 class BeanioTest {
+    private final SimpleDateFormat formatter = new 
SimpleDateFormat(BeanioResource.DATA_FORMAT);
+
     @ParameterizedTest
     @ValueSource(strings = { "CSV", "DELIMITED", "FIXEDLENGTH", "XML", })
     void marshal(String type) throws Exception {
@@ -47,7 +50,7 @@ class BeanioTest {
         one.setLastName("Smith");
         one.setTitle("Developer");
         one.setSalary(75000);
-        one.setHireDate(FORMATTER.parse("2009-10-01"));
+        one.setHireDate(formatter.parse("2009-11-01"));
         employees.add(one);
 
         Employee two = new Employee();
@@ -55,7 +58,7 @@ class BeanioTest {
         two.setLastName("Doe");
         two.setTitle("Architect");
         two.setSalary(80000);
-        two.setHireDate(FORMATTER.parse("2008-01-15"));
+        two.setHireDate(formatter.parse("2008-01-15"));
         employees.add(two);
 
         Employee three = new Employee();
@@ -63,7 +66,7 @@ class BeanioTest {
         three.setLastName("Anderson");
         three.setTitle("Manager");
         three.setSalary(85000);
-        three.setHireDate(FORMATTER.parse("2007-03-18"));
+        three.setHireDate(formatter.parse("2007-03-18"));
         employees.add(three);
 
         String expected = IOUtils.toString(
@@ -103,7 +106,7 @@ class BeanioTest {
                         "[0].lastName", is("Smith"),
                         "[0].title", is("Developer"),
                         "[0].salary", is(75000),
-                        "[0].hireDate", is("2009-10-01"),
+                        "[0].hireDate", is("2009-11-01"),
                         "[1].firstName", is("Jane"),
                         "[1].lastName", is("Doe"),
                         "[1].title", is("Architect"),
@@ -124,7 +127,7 @@ class BeanioTest {
         one.setLastName("Smith");
         one.setTitle("Developer");
         one.setSalary(75000);
-        one.setHireDate(FORMATTER.parse("2009-10-01"));
+        one.setHireDate(formatter.parse("2009-11-01"));
         employees.add(one);
 
         EmployeeAnnotated two = new EmployeeAnnotated();
@@ -132,7 +135,7 @@ class BeanioTest {
         two.setLastName("Doe");
         two.setTitle("Architect");
         two.setSalary(80000);
-        two.setHireDate(FORMATTER.parse("2008-01-15"));
+        two.setHireDate(formatter.parse("2008-01-15"));
         employees.add(two);
 
         EmployeeAnnotated three = new EmployeeAnnotated();
@@ -140,7 +143,7 @@ class BeanioTest {
         three.setLastName("Anderson");
         three.setTitle("Manager");
         three.setSalary(85000);
-        three.setHireDate(FORMATTER.parse("2007-03-18"));
+        three.setHireDate(formatter.parse("2007-03-18"));
         employees.add(three);
 
         String expected = 
IOUtils.toString(BeanioTest.class.getResourceAsStream("/employees-csv.txt"),
@@ -172,7 +175,7 @@ class BeanioTest {
                         "[0].lastName", is("Smith"),
                         "[0].title", is("Developer"),
                         "[0].salary", is(75000),
-                        "[0].hireDate", is("2009-10-01"),
+                        "[0].hireDate", is("2009-11-01"),
                         "[1].firstName", is("Jane"),
                         "[1].lastName", is("Doe"),
                         "[1].title", is("Architect"),
@@ -235,7 +238,7 @@ class BeanioTest {
                         "[0].lastName", is("Smith"),
                         "[0].title", is("Developer"),
                         "[0].salary", is(75000),
-                        "[0].hireDate", is("2009-10-01"),
+                        "[0].hireDate", is("2009-11-01"),
                         "[1].firstName", is("Jane"),
                         "[1].lastName", is("Doe"),
                         "[1].title", is("Architect"),
@@ -312,7 +315,34 @@ class BeanioTest {
                         "[0].lastName", is("Smith"),
                         "[0].title", is("Developer"),
                         "[0].salary", is(75000),
-                        "[0].hireDate", is("2009-10-01"),
+                        "[0].hireDate", is("2009-11-01"),
+                        "[1].firstName", is("Jane"),
+                        "[1].lastName", is("Doe"),
+                        "[1].title", is("Architect"),
+                        "[1].salary", is(80000),
+                        "[1].hireDate", is("2008-01-15"),
+                        "[2].firstName", is("Jon"),
+                        "[2].lastName", is("Anderson"),
+                        "[2].title", is("Manager"),
+                        "[2].salary", is(85000),
+                        "[2].hireDate", is("2007-03-18"));
+    }
+
+    @Test
+    void marshalEmployees() {
+        ZonedDateTime expectedTime = 
ZonedDateTime.parse("2009-09-30T22:00:00Z[UTC]");
+        RestAssured.given()
+                .contentType(ContentType.TEXT)
+                
.body(BeanioTest.class.getResourceAsStream("/employees-csv.txt"))
+                .post("/beanio/unmarshal/global")
+                .then()
+                .statusCode(200)
+                .body(
+                        "[0].firstName", is("Joe"),
+                        "[0].lastName", is("Smith"),
+                        "[0].title", is("Developer"),
+                        "[0].salary", is(75000),
+                        "[0].hireDate", is("2009-11-01"),
                         "[1].firstName", is("Jane"),
                         "[1].lastName", is("Doe"),
                         "[1].title", is("Architect"),
diff --git a/integration-tests/beanio/src/test/resources/employees-csv.txt 
b/integration-tests/beanio/src/test/resources/employees-csv.txt
index 6c05f5ec17..c0d21cfcbf 100644
--- a/integration-tests/beanio/src/test/resources/employees-csv.txt
+++ b/integration-tests/beanio/src/test/resources/employees-csv.txt
@@ -1,3 +1,3 @@
-Joe,Smith,Developer,75000,10012009
+Joe,Smith,Developer,75000,11012009
 Jane,Doe,Architect,80000,01152008
 Jon,Anderson,Manager,85000,03182007
\ No newline at end of file
diff --git 
a/integration-tests/beanio/src/test/resources/employees-delimited.txt 
b/integration-tests/beanio/src/test/resources/employees-delimited.txt
index 6ef9eed965..8a4cf9eafa 100644
--- a/integration-tests/beanio/src/test/resources/employees-delimited.txt
+++ b/integration-tests/beanio/src/test/resources/employees-delimited.txt
@@ -1,3 +1,3 @@
-Joe|Smith|Developer|75000|10012009
+Joe|Smith|Developer|75000|11012009
 Jane|Doe|Architect|80000|01152008
 Jon|Anderson|Manager|85000|03182007
diff --git 
a/integration-tests/beanio/src/test/resources/employees-fixedlength.txt 
b/integration-tests/beanio/src/test/resources/employees-fixedlength.txt
index 8ea0749e80..b71be235e6 100644
--- a/integration-tests/beanio/src/test/resources/employees-fixedlength.txt
+++ b/integration-tests/beanio/src/test/resources/employees-fixedlength.txt
@@ -1,3 +1,3 @@
-Joe       Smith          Developer      75000     10012009
+Joe       Smith          Developer      75000     11012009
 Jane      Doe            Architect      80000     01152008
 Jon       Anderson       Manager        85000     03182007
\ No newline at end of file
diff --git 
a/integration-tests/beanio/src/test/resources/employees-with-error.txt 
b/integration-tests/beanio/src/test/resources/employees-with-error.txt
index d345b993ca..81c92cc718 100644
--- a/integration-tests/beanio/src/test/resources/employees-with-error.txt
+++ b/integration-tests/beanio/src/test/resources/employees-with-error.txt
@@ -1,3 +1,3 @@
-Joe,Smith,Developer,75000,10012009
+Joe,Smith,Developer,75000,11012009
 Jane,Doe,Architect,80000,01152008
 Jon,Anderson,Manager,XXXX,03182007
\ No newline at end of file
diff --git a/integration-tests/beanio/src/test/resources/employees-xml.txt 
b/integration-tests/beanio/src/test/resources/employees-xml.txt
index a04e44478e..7c01864172 100644
--- a/integration-tests/beanio/src/test/resources/employees-xml.txt
+++ b/integration-tests/beanio/src/test/resources/employees-xml.txt
@@ -23,7 +23,7 @@
         <lastName>Smith</lastName>
         <title>Developer</title>
         <salary>75000</salary>
-        <hireDate>10012009</hireDate>
+        <hireDate>11012009</hireDate>
     </employee>
     <employee>
         <firstName>Jane</firstName>

Reply via email to