#apache-camel #spring-camel
#apache-camel #spring-camel
Вопрос:
У меня есть некоторые записи в файлах. Есть верхний, основной и нижний колонтитулы. В некотором случае файл содержит записи всех трех типов. но в другом случае файл имеет только верхний и нижний колонтитулы.
Я хочу проанализировать эти файлы, используя тот же формат данных.
Определены данные. (тело)
@FixedLengthRecord(header=KRHeader.class, footer=KRTrailer.class)
public class KRFixedFormat implements Serializable {
private static final long serialVersionUID = 1L;
@DataField(pos=1, length=1, trim=true)
private String sType;
....
Определены данные. (заголовок)
@FixedLengthRecord(length=39, paddingChar=' ')
public class KRHeader implements Serializable {
private static final long serialVersionUID = 1L;
@DataField(pos=1, length=1, trim=true, defaultValue="H")
private String sType;
....
Определены данные. (Нижний колонтитул)
@FixedLengthRecord(length=44, paddingChar=' ')
public class KRTrailer implements Serializable {
private static final long serialVersionUID = 1L;
@DataField(pos=1, length=1, trim=true, defaultValue="T")
private char sType;
....
Если файл, содержащий только верхний и нижний колонтитулы, находится в процессе загрузки, приложение сгенерировало исключение типа blow.
java.lang.IllegalArgumentException: No records have been defined in the file
at org.apache.camel.dataformat.bindy.fixed.BindyFixedLengthDataFormat.unmarshal(BindyFixedLengthDataFormat.java:250) ~[camel-bindy-2.23.1.jar:2.23.1]
at org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:69) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) ~[camel-core-2.23.1.jar:2.23.1]
Как мы реализуем, чтобы соответствовать нашим бизнес-требованиям?
Комментарии:
1. Я не думаю, что раньше слышал о таком требовании, чтобы данные были пустыми. Я бы подумал, что вам нужно было бы проверить это самостоятельно в качестве обходного пути на данный момент. Итак, что бы вы получили в качестве выходных данных, поскольку тело пустое
2. Результатом этого требования о том, что тело пустое, являются необработанные данные с верхним и нижним колонтитулами. Но исключение генерируется при текущей реализации. Я хочу найти решение для обработки этих исключений в этом случае, а не обычное исключение IllegalArgumentException.
3. В предложении FixedLengthRecord есть параметры для верхнего / нижнего колонтитулов. (например, isHeader, isFooter, skipFooter и т.д.) Например, это параметр для тела?
4. Я нашел аннотацию о формате csv. github.com/apache/camel/pull/1521/commits/… Есть ли подобная опция в FixedLengthFormat?
5. Да, это хорошая идея. Я зарегистрировал запрос: issues.apache.org/jira/browse/CAMEL-13392 . Вы можете реализовать это и внести свой вклад в проект Apache Camel