HI
I'm converting a route from Camel 2.25.0 Spring Boot to latest Quarkus.
The route parses a CSV file, splits it and use either headers if exist or
creates headers if not, sends it to a bean for further processing ending up as
amessage in a JMS.
This was working fine but now when I run it in Quarkus I receive the following
Exception:
Caused by: java.lang.IllegalArgumentException: Could not find a suitable setter
for property: header as there isn't a setter method with same type:
java.lang.String nor type conversion possible: No type converter available to
convert from type: java.lang.String to the required type: java.lang.String[]
with value [status, trade_date, sec_settle_date, fund_name, client_account,
trade_reference, uti, broker_id, security_code, isin, fee, quantity, currency,
market_price, loan_value, trade_time, trade_venue]
Route:
from(seda("textImporter"))
.description("DATA-IMPORTER-TEXT",
"Imports data from text files such as .txt, .csv, .tab",
"en")
.toD("dataformat:csv:unmarshal?delimiter=${header.FileSplitter}&useOrderedMaps=${header.UseHeader}")
.split()
.body()
.streaming()
.parallelProcessing(false)
.process(exchange -> {
final Message in = exchange.getIn();
final Map<String, Object> body = new LinkedHashMap<>();
if (!in.getHeader("UseHeader", Boolean.class)) {
final List list = in.getBody(List.class);
IntStream.range(0, list.size())
.forEach(i -> body.put(i + "", list.get(i)));
} else {
body.putAll(in.getBody(Map.class));
}
final Set<String> headers = body.keySet();
in.setHeader("ColumnNames", new ArrayList<>(headers));
final String idPath = in.getHeader("IdPath", String.class);
in.setHeader("InternalReference", body.get(idPath));
final List<Map<String, Object>> newList = new ArrayList<>(Set.of(body));
in.setBody(newList, List.class);
})
.toD("dataformat:csv:marshal?header=${header.ColumnNames}")
.convertBodyTo(String.class)
.log(LoggingLevel.DEBUG, "${body}")
.bean(XSDMapping.class, "create")
.marshal(jaxbDataFormat)
.convertBodyTo(String.class)
.to("{{jms.queue.outgoing}}")
.to(log("FILE-IMPORTER-TEXT").level("DEBUG")
.groupInterval(5000L)
.groupActiveOnly(true))
.choice()
.when(simple("${header.CamelSplitComplete} == true"))
.log("Number of records split: ${header.CamelSplitSize}")
.log("Importing complete: ${header.CamelFileName}")
.endChoice()
.end();
Using Quarkus 2.2.3.Final on Java 11, Camel 3.11.1
/M