2017-08-03 81 views
0

我想转换固定长度的文件,但它失败了多个文件,并为单行工作。Apache Camel多行文件解析失败

 public class SampleCamelRouter extends RouteBuilder { 
      Processor processor = new FixedMapProcessor(); 
      DataFormat bindy = new BindyFixedLengthDataFormat(Order.class); 

      @Override 
      public void configure() throws Exception { 

       from("file:C:/Users/in").unmarshal(bindy) 
         .split(body()).process(new Processor() { 
          public void process(Exchange exchange) throws Exception { 
     //Below is not working 
     List<Map<String, Object>> unmarshaledModels = (List<Map<String, Object>>) exchange.getIn().getBody(); 

     //Below is working 
      Order2 unmarshaledModels = (Order2) exchange.getIn().getBody(); 
          } 
         }).end(); 
      }  
     } 

订购:

@FixedLengthRecord(length = 4, paddingChar = ' ') 
public class Order1 { 

    @DataField(pos = 1, length = 2) 
    private int orderNr; 

    @DataField(pos = 3, length = 2) 
    private String clientNr; 
} 

C:/Users/in/test.txt

10AB 
20CD 

例外:

java.lang.ClassCastException: com.camel.fixed1.Order cannot be cast to java.util.List 

回答

0

文件的多行也得到了正确处理,但它不是以列表的形式出现。相反,处理器正在为输入文件的每一行执行。

新处理器(){} - 正在执行,所以下面的行将针对每条记录执行。

Order2 unmarshaledModels = (Order2) exchange.getIn().getBody();