У меня есть процесс на самом деле с 3 шагами:
- переформатировать CSV в другой формат (с использованием split и агрегатора)
- вручную добавить несколько строк в качестве верхнего и нижнего колонтитула
- zip & send to ftp
Все, что работает корректно при тестировании, но позже я увидел, что шаг 2 завершается неудачно, когда большие CSV передаются для обработки.
Подробная информация об этом шаге 2
Маршрут для шага 2 & 3
<route id="tozip">
<from uri="file:{{path}}/out?readLock=changed"/>
<setBody>
<simple>resource:file:{{path}}/conf/HeadTxtFoot.txt</simple>
</setBody>
<log message="Compressing message..." loggingLevel="INFO" />
<marshal ref="gzip" />
<log message="Sending ${file:name}.gz..." loggingLevel="INFO" />
<to uri="file:{{path}}/tosend/?fileName=${file:name}.gz" />
</route>
HeadTxtFoot.txt
<tag>
<informationDate>${headers.date}</informationDate>
<files>
${body}
</files>
<tag>
Недавно я получил файл размером 350 МБ, входящий в этот маршрут, и у меня есть эта ошибка
Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId ProcessorId Processor Elapsed (ms)
[tozip ] [tozip ] [file:///u01?readLock=changed ] [ 459]
[tozip ] [setBody2 ] [setBody[simple{resource:file:{{path}}/conf/HeadTxtFoot.txt}] ] [ 459]
Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
org.apache.camel.TypeConversionException: Error during type conversion from type: java.lang.String to the required type: java.lang.String with value [Body is file based: GenericFile[/u01/file.xml]] due java.lang.OutOfMemoryError: Java heap space
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:667)
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:158)
...
Caused by: org.apache.camel.RuntimeCamelException: java.lang.OutOfMemoryError: Java heap space
at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1831)
at org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1410)
at org.apache.camel.impl.converter.StaticMethodTypeConverter.convertTo(StaticMethodTypeConverter.java:59)
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:326)
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:141)
... 22 more
Caused by: java.lang.OutOfMemoryError: Java heap space
Тот же маршрут без setBody / Simple работает OK
Теперь мой вопрос: каков наилучший способ добавить строки в файл, избегающий ошибки?