Hello fellows.

I am creating a simple route to load data from a CSV using bindy and send it
to a JPA endpoint but it is not working. I'm trying to use the same bean for
Bindy and JPA entity. I tried a lot of different solutions but nothing
worked so far. Bellow I post my route, bean and log message:

Route:


<?xml version="1.0" encoding="UTF-8"?>




<beans xmlns="http://www.springframework.org/schema/beans";
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xmlns:camel="http://camel.apache.org/schema/spring";
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd";>

  <bean  id="bindyDataFormat"
class="org.apache.camel.dataformat.bindy.csv.BindyCsvDataFormat">
    <constructor-arg value="com.test.integration.camel.spring.poc.file"/>
  </bean>
  
  <bean id="jpa" class="org.apache.camel.component.jpa.JpaComponent">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
  </bean>
  
  <bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="camelPU"/>
    <property name="jpaVendorAdapter" ref="jpaAdapter"/>
  </bean>
  
  <bean id="jpaAdapter"
class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
    <property name="databasePlatform"
value="org.apache.openjpa.jdbc.sql.MySQLDictionary" />
    <property name="database" value="MYSQL"/>
  </bean>
  
  <bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager">
      <bean class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
      </bean>
    </property>
  </bean>
  
  <camel:camelContext xmlns="http://camel.apache.org/schema/spring";>
    <camel:package>com.test.integration.camel.spring.poc</camel:package>
    <camel:route>
      <camel:from
uri="file:/home/jedimaster/Java-Env/Sandbox/From?delete=true"/>
          <camel:log message="Started unmarshalling file ${file:name}..."/>
      <camel:split streaming="true" parallelProcessing="true">
        <camel:tokenize token="\n"/>
        <camel:unmarshal ref="bindyDataFormat"/>
        <camel:to
uri="jpa:com.test.integration.camel.spring.poc.file.CSVEventRecordBean"/>
      </camel:split>
      <camel:log message="Finished unmarshalling file ${file:name}..."/>
    </camel:route>
  </camel:camelContext>

</beans>


Bean:


package com.test.integration.camel.spring.poc.file;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

import org.apache.camel.dataformat.bindy.annotation.CsvRecord;
import org.apache.camel.dataformat.bindy.annotation.DataField;

@Entity
@Table(name="file-event")
@CsvRecord(separator=",", quote="\"")
public class CSVEventRecordBean implements Serializable{

        private static final long serialVersionUID = -8806841912643394977L;

        @Column(name="event-date")
        @DataField(pos=1)
        private String eventDate;
        
        @Column(name="user-id")
        @DataField(pos=2)
        private String userId;
        
        @Column(name="system-id")
        @DataField(pos=3)
        private String systemId;

        public String getEventDate() {
                return eventDate;
        }

        public void setEventDate(String eventDate) {
                this.eventDate = eventDate;
        }

        public String getUserId() {
                return userId;
        }

        public void setUserId(String userId) {
                this.userId = userId;
        }

        public String getSystemId() {
                return systemId;
        }

        public void setSystemId(String systemId) {
                this.systemId = systemId;
        }
        
}

And this is my error message:

23:53:22,782 | INFO  | Env/Sandbox/From | route1                           |
90 - org.apache.camel.camel-core - 2.8.3 | Started unmarshalling file
AccessViolationGenDummy.csv...
23:53:23,105 | ERROR | hread #5 - Split | DefaultErrorHandler              |
90 - org.apache.camel.camel-core - 2.8.3 | Failed delivery for exchangeId:
ID-deathstar-57412-1329529993318-0-5. Exhausted after delivery attempt: 1
caught: org.apache.camel.InvalidPayloadRuntimeException: No body available
of type: com.test.integration.camel.spring.poc.file.CSVEventRecordBean but
has value:
[{com.test.integration.camel.spring.poc.file.CSVEventRecordBean=com.test.integration.camel.spring.poc.file.CSVEventRecordBean@11c5c5c}]
of type: java.util.ArrayList on: Message:
[{com.test.integration.camel.spring.poc.file.CSVEventRecordBean=com.test.integration.camel.spring.poc.file.CSVEventRecordBean@11c5c5c}].
Caused by: No type converter available to convert from type:
java.util.ArrayList to the required type:
com.test.integration.camel.spring.poc.file.CSVEventRecordBean with value
[{com.test.integration.camel.spring.poc.file.CSVEventRecordBean=com.test.integration.camel.spring.poc.file.CSVEventRecordBean@11c5c5c}]
on the exchange: Exchange[Message:
[{com.test.integration.camel.spring.poc.file.CSVEventRecordBean=com.test.integration.camel.spring.poc.file.CSVEventRecordBean@11c5c5c}]]
org.apache.camel.InvalidPayloadRuntimeException: No body available of type:
com.test.integration.camel.spring.poc.file.CSVEventRecordBean but has value:
[{com.test.integration.camel.spring.poc.file.CSVEventRecordBean=com.test.integration.camel.spring.poc.file.CSVEventRecordBean@11c5c5c}]
of type: java.util.ArrayList on: Message:
[{com.test.integration.camel.spring.poc.file.CSVEventRecordBean=com.test.integration.camel.spring.poc.file.CSVEventRecordBean@11c5c5c}].
Caused by: No type converter available to convert from type:
java.util.ArrayList to the required type:
com.test.integration.camel.spring.poc.file.CSVEventRecordBean with value
[{com.test.integration.camel.spring.poc.file.CSVEventRecordBean=com.test.integration.camel.spring.poc.file.CSVEventRecordBean@11c5c5c}]
on the exchange: Exchange[Message:
[{com.test.integration.camel.spring.poc.file.CSVEventRecordBean=com.test.integration.camel.spring.poc.file.CSVEventRecordBean@11c5c5c}]]
        at
org.apache.camel.component.jpa.JpaEndpoint$1.evaluate(JpaEndpoint.java:277)[219:org.apache.camel.camel-jpa:2.8.3]
        at
org.apache.camel.impl.ExpressionAdapter.evaluate(ExpressionAdapter.java:36)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.component.jpa.JpaProducer.process(JpaProducer.java:49)[219:org.apache.camel.camel-jpa:2.8.3]
        at
org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:50)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:114)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:284)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:109)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:90)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:318)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:209)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:306)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.Pipeline.process(Pipeline.java:116)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.Pipeline.process(Pipeline.java:79)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:318)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:209)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:139)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:106)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:104)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.MulticastProcessor.doProcessParallel(MulticastProcessor.java:704)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.MulticastProcessor.access$200(MulticastProcessor.java:79)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:294)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:279)[90:org.apache.camel.camel-core:2.8.3]
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_26]
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_26]
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)[:1.6.0_26]
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_26]
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_26]
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)[:1.6.0_26]
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)[:1.6.0_26]
        at java.lang.Thread.run(Thread.java:662)[:1.6.0_26]
Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
converter available to convert from type: java.util.ArrayList to the
required type: com.test.integration.camel.spring.poc.file.CSVEventRecordBean
with value
[{com.test.integration.camel.spring.poc.file.CSVEventRecordBean=com.test.integration.camel.spring.poc.file.CSVEventRecordBean@11c5c5c}]
        at
org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:144)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.core.osgi.OsgiTypeConverter.mandatoryConvertTo(OsgiTypeConverter.java:110)[94:org.apache.camel.camel-spring:2.8.3]
        at
org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:100)[90:org.apache.camel.camel-core:2.8.3]
        at
org.apache.camel.component.jpa.JpaEndpoint$1.evaluate(JpaEndpoint.java:274)[219:org.apache.camel.camel-jpa:2.8.3]
        ... 40 more

Do you guys have any tips about how I can solve this problem? This is
driving me nuts.

Cheers.

Vinícius.

--
View this message in context: 
http://servicemix.396122.n5.nabble.com/Process-CSV-using-bindy-and-sending-to-JPA-tp5494547p5494547.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to