Apache camel 无法在apache camel中使用outPutClass对JDBC进行深度映射

Apache camel 无法在apache camel中使用outPutClass对JDBC进行深度映射,apache-camel,camel-sql,Apache Camel,Camel Sql,我有一个要求,我必须从两个不同的源读取数据,一个来自文件,另一个来自数据库,在聚合器中执行一些操作,然后将输出写入文件 我能够读取该文件,但从数据库读取该文件后,我必须将该文件转换为bean。而我不能做到这一点 下面是我的代码: 路线: from("file:{{InputFileDir1}}?noop=true") .routeId("readInputFiles") .unmarshal() .b

我有一个要求,我必须从两个不同的源读取数据,一个来自文件,另一个来自数据库,在聚合器中执行一些操作,然后将输出写入文件

我能够读取该文件,但从数据库读取该文件后,我必须将该文件转换为bean。而我不能做到这一点

下面是我的代码:

路线:

from("file:{{InputFileDir1}}?noop=true")
                .routeId("readInputFiles")
                .unmarshal()
                .bindy(BindyType.Csv,Job9.class)
                .enrich("direct:resource", batchLogRecords)
                .marshal()
                .bindy(BindyType.Csv, ClubbedJob.class)
                .to("file:{{OutPutDir}}?fileName={{FinalJoinedFile}}")
                .log(LoggingLevel.INFO,"Left Join Complete")
                .end();
        from("direct:resource")
                .setBody(simple("SELECT D.DC LOC,D.DEPT,D.CLASS as CLAS,D.ITEM,D.ITEM_CSPK, 'P' as Dummy FROM db2prod.ITEM_DC D,db2prod.FRTB_ITEM_W E WHERE D.DEPT=E.DEPT AND D.CLASS=E.CLASS AND D.ITEM=E.ITEM AND D.DC_I=E.LOC AND E.ALOC_PRCS='9987' with ur;"))
                .to("jdbc:dataSourceDB2?outputClass=com.tgt.fff.beans.LookUpJob9")
                .process(convertToObject)
                .end();
上面的路由读取文件,并通过转换为对象来丰富查询返回的结果集

.to("jdbc:dataSourceDB2?outputClass=com.tgt.fff.beans.LookUpJob9")
LookUpJob9.java

@Component

public class LookUpJob9 {


    CompositeKey compositeKey;

    String itemCspk;

    String dummy;

    --------getters & setters-----------

}
CompositeKey是一个包含4个包含复合键的字段的类

现在的问题是outputClass属性无法进行深度映射。 它能够映射itemCspk和dummy,但不能映射CompositeKey类中的字段

我得到以下例外情况:

java.lang.IllegalArgumentException: Cannot map all properties to bean of type class com.tgt.fff.beans.LookUpJob9. There are 4 unmapped properties. {locI=553, deptI=2, clasI=0, itemI=3}
    at org.apache.camel.component.jdbc.JdbcProducer.newBeanInstance(JdbcProducer.java:397) ~[camel-jdbc-2.18.2.jar:2.18.2]
    at org.apache.camel.component.jdbc.JdbcProducer.extractRows(JdbcProducer.java:350) ~[camel-jdbc-2.18.2.jar:2.18.2]
    at org.apache.camel.component.jdbc.JdbcProducer.setResultSet(JdbcProducer.java:332) ~[camel-jdbc-2.18.2.jar:2.18.2]
    at org.apache.camel.component.jdbc.JdbcProducer.doCreateAndExecuteSqlStatement(JdbcProducer.java:225) ~[camel-jdbc-2.18.2.jar:2.18.2]
    at org.apache.camel.component.jdbc.JdbcProducer.createAndExecuteSqlStatement(JdbcProducer.java:125) ~[camel-jdbc-2.18.2.jar:2.18.2]
    at org.apache.camel.component.jdbc.JdbcProducer.processingSqlBySettingAutoCommit(JdbcProducer.java:86) ~[camel-jdbc-2.18.2.jar:2.18.2]
    at org.apache.camel.component.jdbc.JdbcProducer.process(JdbcProducer.java:67) ~[camel-jdbc-2.18.2.jar:2.18.2]
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) ~[camel-core-2.18.2.jar:2.18.2]
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145) ~[camel-core-2.18.2.jar:2.18.2]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) [camel-core-2.18.2.jar:2.18.2]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542) [camel-core-2.18.2.jar:2.18.2]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197) [camel-core-2.18.2.jar:2.18.2]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:120) [camel-core-2.18.2.jar:2.18.2]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83) [camel-core-2.18.2.jar:2.18.2]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197) [camel-core-2.18.2.jar:2.18.2]
    at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62) [camel-core-2.18.2.jar:2.18.2]
    at org.apache.camel.processor.Enricher.process(Enricher.java:187) [camel-core-2.18.2.jar:2.18.2]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) [camel-core-2.18.2.jar:2.18.2]

当我将上述类与bindy一起使用时,我使用@Link与CompositeKey类来链接这两个类。有没有类似的方法可以用JDBC实现它。

嵌套/深度映射目前不受支持。需要对camel jdbc组件进行一些修改才能支持这一点

欢迎您在问题跟踪器中记录JIRA票证

谢谢克劳斯,我也会这么做的。