Невозможно выполнить глубокое сопоставление для JDBC с использованием outPutClass в apache camel

У меня есть требование, когда я должен читать из двух разных источников, один из файла, а другой из БД, выполнять некоторые операции в агрегаторе, а затем записывать вывод в файл.

Я могу прочитать файл, но после чтения файла из базы данных мне нужно преобразовать файл в 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.


person Sandy    schedule 24.03.2017    source источник


Ответы (1)


Вложенное/глубокое сопоставление в настоящее время не поддерживается. Для поддержки этого потребуется доработка компонента camel-jdbc.

Вы можете зарегистрировать тикет JIRA в системе отслеживания проблем http://camel.apache.org/support.html

person Claus Ibsen    schedule 25.03.2017
comment
Спасибо, Клаус, я сделаю то же самое. - person Sandy; 25.03.2017