0

使用 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();

}

Kostnadssted 看起来像这样:

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;
}

我像这样发送到队列:

公共类 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
4

1 回答 1

1

事实证明,如果使用 @CsvRecord 注释定义的记录具有显式定义的构造函数,则它们将不起作用。删除构造函数解决了这个问题。

于 2014-10-27T09:50:33.470 回答