InstantiationException при демаршалировании csv с помощью BindyCsvDataFormat и @CsvRecord с использованием Camel
Используя Camel, я отправляю строку с CSV в очередь, где ее нужно распаковать в список карт, используя BindyCsvDataFormat. Мой вопрос просто, почему я получаю InstantiationException здесь? Что-то не так с CSV-форматированием или тем, как я могу установить, к какому классу привязываться?
Маршрутизация выглядит так:
@Override
public void setupRoutes() throws Exception {
BindyCsvDataFormat bindy = new BindyCsvDataFormat(Kostnadssted.class);
bindy.setClassType(Kostnadssted.class);
from("activemq:prk.kostnadssted.importer-kostnadssteder-fra-agresso")
.unmarshal(bindy)
.bean(kostnadsstedService)
.end();
}
И Костнадсстед выглядит так:
import org.apache.camel.dataformat.bindy.annotation.CsvRecord;
import org.apache.camel.dataformat.bindy.annotation.DataField;
@CsvRecord(separator = ";", crlf = "UNIX", autospanLine = true)
public class Kostnadssted implements Comparable<Kostnadssted> {
@DataField( pos = 1)
private String AOR_KOSTSTED_ID;
@DataField( pos = 2)
private String AOR_KOSTSTED_NAVN;
@DataField( pos = 3)
private String AOR_FIRMA_ID;
@DataField( pos = 4)
private String AOR_FIRMA_NAVN;
@DataField( pos = 5)
private String AOR_FIRMA_ORGNR;
@DataField( pos = 6)
private String AOR_STATUS;
@DataField( pos = 7)
private String AOR_FRA_PERIODE;
@DataField( pos = 8)
private String AOR_TIL_PERIODE;
public Kostnadssted(String AOR_KOSTSTED_ID, String AOR_KOSTSTED_NAVN, String AOR_FIRMA_ID, String AOR_FIRMA_NAVN, String AOR_FIRMA_ORGNR, String AOR_STATUS, String AOR_FRA_PERIODE, String AOR_TIL_PERIODE) {
this.AOR_KOSTSTED_ID = AOR_KOSTSTED_ID;
this.AOR_KOSTSTED_NAVN = AOR_KOSTSTED_NAVN;
this.AOR_FIRMA_ID = AOR_FIRMA_ID;
this.AOR_FIRMA_NAVN = AOR_FIRMA_NAVN;
this.AOR_FIRMA_ORGNR = AOR_FIRMA_ORGNR;
this.AOR_STATUS = AOR_STATUS;
this.AOR_FRA_PERIODE = AOR_FRA_PERIODE;
this.AOR_TIL_PERIODE = AOR_TIL_PERIODE;
}
Я отправляю в очередь так:
Ublic класс KostnadsstedRoutingTest {
@Autowired
private KostnadsstedRouting kostnadsstedRoute;
private final String FAKE_BODY = "NO;937354521012;DEMO ASA;100;Administrasjon;N;0;209911"+System.getProperty("line.separator")+
"NO;983554321012;DEMO ASA;100;Administrasjon;N;0;206912";
@Produce(uri = "activemq:prk.kostnadssted.importer-kostnadssteder-fra-agresso")
ProducerTemplate producer;
@Test
public void firstTest() throws InterruptedException{
producer.sendBody(FAKE_BODY);
}
}
И я получаю:
org.apache.camel.RuntimeCamelException: java.lang.InstantiationException: no.ok.prk.kostnadssted.domene.modell.Kostnadssted
1 ответ
Оказывается, что записи, определенные с аннотацией @CsvRecord, не будут работать, если у них есть явно определенные конструкторы. Удаление конструктора решило проблему.