目前我可以使用camel Bindy从POJO生成一个平面文件,但无法将页眉和页脚添加到完整文件中。
但是,当我尝试将页眉/页脚添加到文件时,它会添加到每条记录,但我需要将单个页眉/页脚添加到完整文件而不是文件中的每条记录。
下面是代码片段:
from("jpa:com.PACKAGENAME.RebatePayout?consumer.namedQuery=REBATE_PAYOUT&consumer.delay=500000&consumeLockEntity=true&consumeDelete=false")
.routeId("rebateroute")
.process(new Processor() {
RebateOutputgenerator rop = new RebateOutputgenerator();
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setBody(rop.processEntities((RebatePayout) exchange.getIn().getBody()));
log.info("the exchange value is ", exchange);
}
})
.process(new FahHeaderAndFooterHelper())
.log("Fixed length format marshal....")
.marshal(fixedLegth)
.log("Fixed length format data....${body}")
.to("file://C:/Users/vvakalap/Desktop/example/New folder?fileExist=Append&fileName=output.txt")
.log("Data Saved in file...");
进程类是
public class FahHeaderAndFooterHelper implements Processor{
@Override
public void process(Exchange exchange) throws Exception {
Map<String, Object> headerObjMap = new HashMap<String,Object>();
headerObjMap.put(FahRecordHeader.class.getName(), new FahRecordHeader());
if(exchange.getOut().getBody() == "null")
exchange.getOut().setHeader(CAMEL_BINDY_FIXED_LENGTH_HEADER, headerObjMap);
Map<String, Object> footerObjMap = new HashMap<String,Object>();
footerObjMap.put(FahRecordFooter.class.getName(), new FahRecordFooter());
exchange.getOut().setHeader(CAMEL_BINDY_FIXED_LENGTH_FOOTER, footerObjMap);
exchange.getOut().setBody(exchange.getIn().getBody());
}
POJO类
@Data
@Section(number=2)
@FixedLengthRecord(header = FahRecordHeader.class, footer = FahRecordFooter.class)
public class RebateFinalRecord implements Serializable {
private static final long serialVersionUID = 7375828620208233805L;
@DataField(pos = 1, length = 3)
private String transactionRecordIdentifier;
@DataField(pos = 4, length = 10)
private String transactionNumber;
@DataField(pos = 14, length = 5)
private String transactionLineNumber;
@DataField(pos = 19, length = 20)
private String transactionDistributionType;
@DataField(pos = 39, length = 30)
private String eventTypeName;
@DataField(pos = 69, length = 8)
private String transactionDate;
@DataField(pos = 77, length = 8)
private String transactionEffectiveDate;
@DataField(pos = 85, length = 5)
private String transactingEntityValue;
@DataField(pos = 90, length = 1)
private String reciprocationFlag;
}
绑定类
@Data
public class FahRecordHeader {
@DataField(pos = 1, length = 3)
private String fileRecordIdentifier = "000";
@DataField(pos = 4, length = 15)
private String controlIdentifierOrSequenceNumber = "LSCD00000000006";
@DataField(pos = 19, length = 20)
private String source = "LSCD";
}
@Data
public class FahRecordFooter {
@DataField(pos = 1, length = 70)
private String footer = "footervalusforfahrecord for cashrebates";
/*
* @DataField(pos = 2, length = 9, align = "R", paddingChar = '0')
* private int numberOfRecordsInTheFile;
*/
}