Camel 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.


person Vaibhav Bhootna    schedule 29.12.2015    source источник


Ответы (2)


Измените позицию, чтобы она соответствовала длинам, но все равно у вас не будет полей в базовом классе set, они будут нулевыми, но поля дочернего класса будут установлены. Посетите этот сайт, чтобы узнать, как это можно сделать.http://people.apache.org/~dkulp/camel/bindy.html

person Sundar    schedule 29.12.2015
comment
попытался изменить позицию, на самом деле она пропустила 2 символа, поскольку мы дали pos = 3 в дочернем классе. Он отлично работал в версии 2.13.0, но теперь в версии 2.16.0 у меня возникла проблема. - person Vaibhav Bhootna; 29.12.2015
comment
Укажите фактический номер позиции в дочернем классе, например, pos=25 вместо pos=3. - person Sundar; 01.01.2016

Считайте это текстовой записью 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, результатом будет то, что серийный номер, возраст и имя будут установлены на модель. 132Sundar, и если вы используете верблюд для демаршалирования текстового файла с помощью класса Employee2, результатом будет то, что фамилия будет установлена ​​​​на модель. Мурти

Это с верблюдом 2.16.0, пожалуйста, дайте мне знать, если возникнут какие-либо проблемы, но поля в базовом классе не будут установлены.

person Sundar    schedule 03.01.2016