Требуется не загружать файл 1 ГБ в память, а загружать файл в виде потока XML.
private String sftpComponent(String sftpFileName) {
return "sftp://xxx/xxx"
+ "?username=xxx"
+ "&password=xxx"
+ "&streamDownload=true"
+ "&useList=true"
+ "&stepwise=false"
+ "&disconnect=true"
+ "&passiveMode=true"
+ "&reconnectDelay=10000"
+ "&bridgeErrorHandler=true"
+ "&delay=30000"
+ "&include="+ sftpFileName
+ "&preMove=$simple{file:onlyname}.$simple{date:now:yyyy-MM-dd'T'hh-mm-ss}.underproc"
+ "&move=$simple{file:onlyname.noext}.$simple{date:now:yyyy-MM-dd'T'hh-mm-ss}.done"
+ "&moveFailed=$simple{file:onlyname.noext}.$simple{date:now:yyyy-MM-dd'T'hh-mm-ss}.error"
+ "&readLock=idempotent-changed"
+ "&idempotentRepository=#infinispanCache"
+ "&readLockRemoveOnCommit=true";
}
from(sftpComponent(sftpFileName))
.split(body().tokenizeXML("case", "cases"))
.streaming()
.inOnly("jms/caseQueue")
<cases>
<case>
</case>
<case>
</case>
</cases>
Файл успешно выбран и помечен как успешный, а поток -не разбивать содержимое и перемещать его в caseQueue.
Когда я использую "download = true", это работает как шарм.
Может кто-нибудь предложить, какие дополнительные настройки требуются в этом случае или альтернативный подход, чтобы исправить выше?