Camel Bindy固定长度格式:如何使用继承类?

时间:2015-12-29 17:55:48

标签: java apache apache-camel fixed-length-record bindy

我有两个类CommonRequest和AccountRequest

@FixedLengthRecord(paddingChar=' ',ignoreTrailingChars=true)
public class CommonRequest {

@Id
private String corelationID;

@DataField(pos=1,length=8)
private String cmNumber;

@DataField(pos=2,length=16)
private String accountNumber;

}

和AccountRequest.java

@FixedLengthRecord(paddingChar=' ',ignoreTrailingChars=true)
public class AccountRequest extends CommonRequest {

@Id
private String corelationID;

@DataField(pos=3,length=14)
private String accountType;

@DataField(pos=4,length=15)
private String accountLocation;

}

当我尝试解组 cmNumberaccountNumberaccountTypeaccountLocation

之类的记录时

它正确地解除了常见请求,但是当我尝试解组AccountRequest时,它从开始采取位置,而不是从公共请求中留下的位置继续它。

这与AccountRequest中的整个字段不匹配。

2 个答案:

答案 0 :(得分:0)

更改位置以匹配长度,但您仍然没有基类集中的字段,它们将为null,但将设置子类字段。请查看此网站,了解如何完成此操作。http://people.apache.org/~dkulp/camel/bindy.html

答案 1 :(得分:0)

将此视为文本记录 01 32 Sundar Moorthy

@FixedLengthRecord(length = 20,ignoreTrailingChars=true)
public class Employee {
@DataField(pos = 1, length = 2)
private int serialNo;
@DataField(pos = 4, length = 2)
private int age;
@DataField(pos = 7, length = 6)
private String firstName;
....getters and setters
}

@FixedLengthRecord(length=20)
public class Employee2 extends Employee{
@DataField(pos=14, length=7)
private String lastName;
....
getters and setters..
}

现在,如果您使用Camel使用Employee类解组文本文件,结果将是序列号和age和firstname将设置为model。    132Sundar 如果使用camel使用Employee2类解组文本文件,结果将是lastname将设置为model。    Moorthy

这是使用camel 2.16.0,如果有任何其他问题,请告诉我,但不会设置基类中的字段。