Hi You need to configure this <camel:bindy type="Csv" />
To refer to either a package, or a class that has the Bindy annotations. On Thu, Oct 4, 2012 at 8:52 PM, Chandra Kalirasa <ckalir...@seatoncorp.com> wrote: > Hi > > I am trying to unmarshal a CSV record into multiple model objects. > > Example, I want pos 4, pos 5, pos 6 into one model object (Marks.java) and > rest of the position want to be on another model object (Student.java). I am > getting following errors. I've cut and paste necessary classes below. I > really appreciate your help. > > Thank you, > > Chandra > > > > > > Exception in thread "main" org.apache.camel.RuntimeCamelException: > org.apache.camel.FailedToCreateRouteException: Failed to create route > students-fetch-route at: >>> Split[tokenize{body() using token: \n} -> > [Unmarshal[org.apache.camel.model.dataformat.BindyDataFormat@39518cc], > Log[Student Details are ${body}], Bean[ref:studentProcesser method: > processMarks]]] <<< in route: Route[[From[file:inbox?noop=true&delay=10]] -> > [Split[tokeni... because of Either packages or classType must be specified > > at > org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1280) > > at > org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:120) > > at > org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:280) > > at > org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97) > > at > org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:303) > > at > org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:911) > > at > org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:428) > > at > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) > > at > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) > > at org.apache.camel.example.Main.main(Main.java:15) > > > > > > > > Student.java: > > @CsvRecord(separator = "\\|") > > public class Student { > > > > @DataField(pos = 1, required = true) > > private String Id; > > > > @DataField(pos = 2, required = true) > > private String name; > > > > @DataField(pos = 3, required = true, trim= true) > > private String semester; > > > > @DataField(pos = 7) > > private long mathematicsMarks; > > > > @DataField(pos = 8) > > private long dataStructureMarks; > > > > public long getDataStructureMarks() { > > return dataStructureMarks; > > } > > > > public void setDataStructureMarks(long dataStructureMarks) { > > this.dataStructureMarks = dataStructureMarks; > > } > > > > public String getId() { > > return Id; > > } > > > > public void setId(String id) { > > Id = id; > > } > > > > public String getName() { > > return name; > > } > > > > public void setName(String name) { > > this.name = name; > > } > > > > public String getSemester() { > > return semester; > > } > > > > public void setSemester(String semester) { > > this.semester = semester; > > } > > > > public long getJavaMarks() { > > return javaMarks; > > } > > > > public void setJavaMarks(long javaMarks) { > > this.javaMarks = javaMarks; > > } > > > > > > public long getMathematicsMarks() { > > return mathematicsMarks; > > } > > > > public void setMathematicsMarks(long mathematicsMarks) { > > this.mathematicsMarks = mathematicsMarks; > > } > > > > @Override > > public String toString() { > > return "Student [Id=" + Id + ", name=" + name + ", semester="+ > semester + "]"; > > } > > > > > > Marks.java > > @CsvRecord(separator = "\\|") > > public class Marks > > { > > @DataField(pos = 4, required = true) > > private long javaMarks; > > > > @DataField(pos = 5) > > private long cMarks; > > > > @DataField(pos = 6) > > private long dbmsMarks; > > > > public long getJavaMarks() { > > return javaMarks; > > } > > > > public void setJavaMarks(long javaMarks) { > > this.javaMarks = javaMarks; > > } > > > > public long getcMarks() { > > return cMarks; > > } > > > > public void setcMarks(long cMarks) { > > this.cMarks = cMarks; > > } > > > > public long getDbmsMarks() { > > return dbmsMarks; > > } > > > > public void setDbmsMarks(long dbmsMarks) { > > this.dbmsMarks = dbmsMarks; > > } > > > > @Override > > public String toString() { > > return "Marks [javaMarks=" + javaMarks + ", cMarks=" + cMarks > > + ", dbmsMarks=" + dbmsMarks + "]"; > > } > > > > > > } > > > > StudentProcessor.java > > > > public class StudentProcessor { > > > > @SuppressWarnings("unchecked") > > public static void processMarks(Exchange ex){ > > List<Map<String, Object>> unmarshaledModels = (List<Map<String, > Object>>) ex.getIn().getBody(); > > List <Student> students = new ArrayList<Student>(); > > List <Marks> marks = new ArrayList<Marks>(); > > if(ex.getIn().getBody() != null){ > > > if(ex.getIn().getBody().getClass().isAssignableFrom(Student.class)){ > > students.add((Student) ex.getIn().getBody()); > > }else{ > > marks = (List<Marks>) ex.getIn().getBody(); > > } > > } > > return ; > > } > > > > > > Camel-bindy.xml > > > > <?xml version="1.0" encoding="UTF-8"?> > > <beans xmlns="http://www.springframework.org/schema/beans" > > xmlns:camel="http://camel.apache.org/schema/spring" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="http://www.springframework.org/schema/beans > > http://www.springframework.org/schema/beans/spring-beans-3.0.xsd > > http://camel.apache.org/schema/spring > http://camel.apache.org/schema/spring/camel-spring-2.10.1.xsd"> > > > > <bean name="studentProcesser" id="studentProcesser" > class="org.apache.camel.example.StudentProcessor" /> > > > > <camelContext trace="false" > xmlns="http://camel.apache.org/schema/spring"> > > <camel:route id="students-fetch-route" autoStartup="true"> > > <camel:from uri="file:inbox?noop=true&delay=10" /> > > <camel:split streaming="true"> > > <camel:tokenize token="\n" group="2" /> > > <camel:unmarshal ref="bindyDataformat" > > > <camel:bindy type="Csv" /> > > </camel:unmarshal> > > <camel:log message="Student Details are ${body}" > loggingLevel="WARN" /> > > <camel:bean ref="studentProcesser" > method="processMarks" /> > > </camel:split> > > </camel:route> > > </camelContext> > > > > </beans> > > > > > > > > Exception in thread "main" org.apache.camel.RuntimeCamelException: > org.apache.camel.FailedToCreateRouteException: Failed to create route > students-fetch-route at: >>> Split[tokenize{body() using token: \n} -> > [Unmarshal[org.apache.camel.model.dataformat.BindyDataFormat@39518cc], > Log[Student Details are ${body}], Bean[ref:studentProcesser method: > processMarks]]] <<< in route: Route[[From[file:inbox?noop=true&delay=10]] -> > [Split[tokeni... because of Either packages or classType must be specified > > at > org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1280) > > at > org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:120) > > at > org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:280) > > at > org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97) > > at > org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:303) > > at > org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:911) > > at > org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:428) > > at > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) > > at > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) > > at org.apache.camel.example.Main.main(Main.java:15) > > > -- Claus Ibsen ----------------- Red Hat, Inc. FuseSource is now part of Red Hat Email: cib...@redhat.com Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen