#apache-camel #spring-camel
#apache-camel #spring-camel
Вопрос:
Я реализую некоторое приложение с помощью camel.
Мой сценарий похож на удар.
1) Соберите файлы во входном каталоге.
2) Разархивируйте файл с определенным форматом данных (fixedLengthFormat).
3) Если файл является ненормальным во время демарширования, генерируется некоторое исключение.
4) Если возникает исключение, camel перемещает исходный файл в каталог исключений.
Я нашел исключение, подобное приведенному ниже.
org.apache.camel.component.file.GenericFileOperationFailedException: Cannot store file: C:homeWRKPRCWLNEIPTVKRKRLPPM10FATALSLPNPM_FGIDRO01_ID0006_T20190312050500.DAT
at org.apache.camel.component.file.FileOperations.storeFile(FileOperations.java:354) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.file.GenericFileProducer.writeFile(GenericFileProducer.java:305) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.file.GenericFileProducer.processExchange(GenericFileProducer.java:169) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.file.GenericFileProducer.process(GenericFileProducer.java:80) ~[camel-core-2.23.1.jar:2.23.1]
....
Это ошибка, вызванная неправильным синтаксическим анализом тела.
Итак, я добавил тег со строковым типом перед тегом.
Я сделал это, и ошибки не было.
Но перемещенный файл имеет формат данных в немаршированный, а не в исходные данные.
Как я должен обрабатывать некоторый код, чтобы получить исходные данные?
-
Формат данных для немарширования (KRFixedFormat.java )
@FixedLengthRecord(length=3005, header=KRHeader.class, footer=KRTailer.class) public class KRFixedFormat implements Serializable { private static final long serialVersionUID = 1L; @DataField(pos=1, length=1,trim=true) private String sType; @DataField(pos=2, length=7, trim=true, align="L") private String sRecordSeq; @DataField(pos=9, length=1, trim=true, defaultValue="2") private char sServiceType; ...
-
Верблюжий контекст
<doTry id="_CheckException"> <camel:convertBodyTo charset="ISO-8859-1" id="_ConvertEncoding" type="java.lang.String"/> <camel:unmarshal id="_FileParsing"> <camel:bindy classType="com.ktds.openmzn.dao.KRFixedFormat" locale="korea" type="Fixed"/> </camel:unmarshal> <doCatch id="_ParsingException"> <exception>org.apache.camel.component.bean.MethodNotFoundException</exception> <exception>org.apache.camel.NoTypeConversionAvailableException</exception> <convertBodyTo charset="ISO-8859-1" id="_ConvertEncoding" type="java.lang.String"/> <toD id="_MoveErrorFile" uri="file:${header.CamelFileParent}/FATAL"/> </doCatch> </doTry> ...
-
Исходный файл
H20190312050500GIDRO01LPNPM R0000001269056802668 D201903 .... T000000120190312050500000000003091
-
Выходной файл
KRFixedFormat [sType=R, sRecordSeq=0000001, sServiceType=2, sChrgId=69056802668, ....
Комментарии:
1. У меня был пользовательский формат данных с заголовком, телом и нижним колонтитулом. Эти форматы определяются каждым классом. Этот случай возникает в случае только одной основной записи с верхним и нижним колонтитулами.