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

Reply via email to