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 <[email protected]>
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>