Hi There is some annotations you need to add to student so it knows that Student has an association to Marks. I think its the @Link annotation.
Take a look at http://camel.apache.org/bindy On Fri, Oct 5, 2012 at 6:27 PM, Chandra Kalirasa <ckalir...@seatoncorp.com> wrote: > Hi Claus, > Thanks, its worked. However, in the StudentProcessor, statement > if(ex.getIn().getBody().getClass().isAssignableFrom(Student.class)) never > got invoked. So the only marks list got populated and fail to populate > student list. Can you please advise? > Thank you, > Chandra > > > 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 ; > } > } > > > > > > -----Original Message----- > From: Claus Ibsen [mailto:claus.ib...@gmail.com] > Sent: Friday, October 05, 2012 9:08 AM > To: users@camel.apache.org > Subject: Re: CSV bindy - unmarshalling to multiple model object > > 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 > > > -- 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