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&amp;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

Reply via email to