camel-bindy — Как мне определить, нет ли записей тела во время отмены сортировки и маршалинга

#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