Как я могу обработать неразделенные данные в исходные данные? - PullRequest
1 голос
/ 19 апреля 2019

Я реализую какое-то приложение с верблюдом.

Мой сценарий похож на удар.

1) Соберите файлы во входном каталоге.

2) Разархивируйте файл с определенным форматом данных (fixedLengthFormat).

3) Если файл ненормальный во время демаршалирования, генерируется исключение.

4) Если возникает исключение, верблюд перемещает исходный файл в каталог исключений.

Я нашел исключение, как показано ниже.

 org.apache.camel.component.file.GenericFileOperationFailedException: Cannot store file: C:\home\WRK\PRC\WLNE\IPTVKR\KRLPPM10\FATAL\SLPNPM_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]
    ....

Это ошибка, вызванная неправильным анализом тела. Итак, я добавил тег с типом String перед тегом. Я сделал это, и не было ошибки. Но перемещенный файл имеет формат данных, который должен быть не маршализованным, а не исходным.

Как мне обработать некоторый код, чтобы получить исходные данные?

  • Формат данных для демаршала (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, ....
    
...