[ 
https://issues.apache.org/jira/browse/CAMEL-4655?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Olivier SCHMITT updated CAMEL-4655:
-----------------------------------

    Description: 
i'm currently writing a tuto on Camel (2.8.2).

Showing HTTP4 component usage by downloading US Gov public data, i found a 
problem :


                from("quartz://dataTimer?cron=0+*+*+*+*+?").to("direct:datas");

                from("direct:datas")
                
.to("http4://earthquake.usgs.gov/earthquakes/catalogs/eqs7day-M1.txt")
                .unmarshal(new 
BindyCsvDataFormat("net.thejeearchitectcookbook.camel.earthquake"))
                .process(new Processor() {

                        public void process(Exchange exchange) throws Exception 
{

                                Message message = exchange.getIn();

                                // ...
                        }
                });

The data format is like and my separator char is ",":

nc,71678421,0,"Wednesday, November  9, 2011 14:53:13 
UTC",37.5727,-118.8170,1.3,6.60,14,"Central California"

I want to get all datas as java.lang.String but the date value raises exception 
:

java.lang.IllegalArgumentException: No position 11 defined for the field: 14, 
line: 2 must be specified]

My separator is "," but some values are nested inside " ". Unfortunately there 
are "," inside the " ".

Bindy get lost !
 
How can i get String values nested inside " " and containing "," ?

I can note that Camel CSV component deals with it without any problems.


Here is my pojo :


package net.thejeearchitectcookbook.camel.earthquake;

import java.io.Serializable;


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


@CsvRecord( separator = ",")
public class EarthquakeInfos implements Serializable {
   
        @DataField(pos = 1)
    private String src;
       
        @DataField(pos = 2)
    private String eqid;
       
        @DataField(pos = 3)
    private String version;
       
    @DataField(pos = 4)
    private String datetime;
   
        @DataField(pos = 5)
    private String lat;
       
        @DataField(pos = 6)
    private String lon;
   
    @DataField(pos = 7)
    private String magnitude;
   
        @DataField(pos = 8)
    private String depth;
       
        @DataField(pos = 9)
    private String nst;
       
    @DataField(pos = 10)
    private String place;
   



    public String getSrc() {
                return src;
        }

        public void setSrc(String src) {
                this.src = src;
        }

        public String getEqid() {
                return eqid;
        }

        public void setEqid(String eqid) {
                this.eqid = eqid;
        }

        public String getVersion() {
                return version;
        }

        public void setVersion(String version) {
                this.version = version;
        }

        public String getLat() {
                return lat;
        }

        public void setLat(String lat) {
                this.lat = lat;
        }

        public String getLon() {
                return lon;
        }

        public void setLon(String lon) {
                this.lon = lon;
        }

        public String getDepth() {
                return depth;
        }

        public void setDepth(String depth) {
                this.depth = depth;
        }

        public String getNst() {
                return nst;
        }

        public void setNst(String nst) {
                this.nst = nst;
        }

        public String getDatetime() {
        return datetime;
    }

    public void setDatetime(String datetime) {
        this.datetime = datetime;
    }

    public String getMagnitude() {
        return magnitude;
    }

    public void setMagnitude(String magnitude) {
        this.magnitude = magnitude;
    }

    public String getPlace() {
        return place;
    }

    public void setPlace(String place) {
        this.place = place;
    }
} 

I can find that CSV Camel component performs well with the same datasource :

from("direct:datas")
.to("http4://earthquake.usgs.gov/earthquakes/catalogs/eqs7day-M1.txt")
.unmarshal().csv().process(new Processor() {

        public void process(Exchange exchange) throws Exception {

                Message message = exchange.getIn();
                List<List<String>> datas = (List<List<String>>) 
message.getBody();
                // Skip header
                datas = datas.subList(1, datas.size() - 1);
                // Process my data
                for (List<String> row : datas) {
                        // Process Row
                        String datetime = row.get(3);
                        String region = row.get(9);
                        String magnitude = row.get(6);
                                        
                }
        }
});


  was:
i'm currently writing a tuto on Camel (2.8.2).

Showing HTTP4 component usage by downloading US Gov public data, i found a 
problem :


                from("quartz://dataTimer?cron=0+*+*+*+*+?").to("direct:datas");

                from("direct:datas")
                
.to("http4://earthquake.usgs.gov/earthquakes/catalogs/eqs7day-M1.txt")
                .unmarshal(new 
BindyCsvDataFormat("net.thejeearchitectcookbook.camel.earthquake"))
                .process(new Processor() {

                        public void process(Exchange exchange) throws Exception 
{

                                Message message = exchange.getIn();

                                // ...
                        }
                });

The data format is like :

nc,71678421,0,"Wednesday, November  9, 2011 14:53:13 
UTC",37.5727,-118.8170,1.3,6.60,14,"Central California"

I want to get all datas as java.lang.String but the date value raises exception 
:

java.lang.IllegalArgumentException: No position 11 defined for the field: 14, 
line: 2 must be specified]

My separator is "," but some values are nested inside " ". Unfortunately there 
are , inside the " ".

Bindy get lost !
 
How can i get String values nested inside " " and containing "," ?

I can note that Camel CSV component deals with it without any problems.


Here is my pojo :


package net.thejeearchitectcookbook.camel.earthquake;

import java.io.Serializable;


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


@CsvRecord( separator = ",")
public class EarthquakeInfos implements Serializable {
   
        @DataField(pos = 1)
    private String src;
       
        @DataField(pos = 2)
    private String eqid;
       
        @DataField(pos = 3)
    private String version;
       
    @DataField(pos = 4)
    private String datetime;
   
        @DataField(pos = 5)
    private String lat;
       
        @DataField(pos = 6)
    private String lon;
   
    @DataField(pos = 7)
    private String magnitude;
   
        @DataField(pos = 8)
    private String depth;
       
        @DataField(pos = 9)
    private String nst;
       
    @DataField(pos = 10)
    private String place;
   



    public String getSrc() {
                return src;
        }

        public void setSrc(String src) {
                this.src = src;
        }

        public String getEqid() {
                return eqid;
        }

        public void setEqid(String eqid) {
                this.eqid = eqid;
        }

        public String getVersion() {
                return version;
        }

        public void setVersion(String version) {
                this.version = version;
        }

        public String getLat() {
                return lat;
        }

        public void setLat(String lat) {
                this.lat = lat;
        }

        public String getLon() {
                return lon;
        }

        public void setLon(String lon) {
                this.lon = lon;
        }

        public String getDepth() {
                return depth;
        }

        public void setDepth(String depth) {
                this.depth = depth;
        }

        public String getNst() {
                return nst;
        }

        public void setNst(String nst) {
                this.nst = nst;
        }

        public String getDatetime() {
        return datetime;
    }

    public void setDatetime(String datetime) {
        this.datetime = datetime;
    }

    public String getMagnitude() {
        return magnitude;
    }

    public void setMagnitude(String magnitude) {
        this.magnitude = magnitude;
    }

    public String getPlace() {
        return place;
    }

    public void setPlace(String place) {
        this.place = place;
    }
} 

I can find that CSV Camel component performs well with the same datasource :

from("direct:datas")
.to("http4://earthquake.usgs.gov/earthquakes/catalogs/eqs7day-M1.txt")
.unmarshal().csv().process(new Processor() {

        public void process(Exchange exchange) throws Exception {

                Message message = exchange.getIn();
                List<List<String>> datas = (List<List<String>>) 
message.getBody();
                // Skip header
                datas = datas.subList(1, datas.size() - 1);
                // Process my data
                for (List<String> row : datas) {
                        // Process Row
                        String datetime = row.get(3);
                        String region = row.get(9);
                        String magnitude = row.get(6);
                                        
                }
        }
});


    
> Bindy does not support quoted value with separator char in CSV datasource
> -------------------------------------------------------------------------
>
>                 Key: CAMEL-4655
>                 URL: https://issues.apache.org/jira/browse/CAMEL-4655
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-bindy
>    Affects Versions: 2.8.2
>         Environment: Mac Snow Leopard
> Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)
> Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)
> Maven 3.0.1
>            Reporter: Olivier SCHMITT
>
> i'm currently writing a tuto on Camel (2.8.2).
> Showing HTTP4 component usage by downloading US Gov public data, i found a 
> problem :
>                 
> from("quartz://dataTimer?cron=0+*+*+*+*+?").to("direct:datas");
>                 from("direct:datas")
>                 
> .to("http4://earthquake.usgs.gov/earthquakes/catalogs/eqs7day-M1.txt")
>                 .unmarshal(new 
> BindyCsvDataFormat("net.thejeearchitectcookbook.camel.earthquake"))
>                 .process(new Processor() {
>                         public void process(Exchange exchange) throws 
> Exception {
>                                 Message message = exchange.getIn();
>                                 // ...
>                         }
>                 });
> The data format is like and my separator char is ",":
> nc,71678421,0,"Wednesday, November  9, 2011 14:53:13 
> UTC",37.5727,-118.8170,1.3,6.60,14,"Central California"
> I want to get all datas as java.lang.String but the date value raises 
> exception :
> java.lang.IllegalArgumentException: No position 11 defined for the field: 14, 
> line: 2 must be specified]
> My separator is "," but some values are nested inside " ". Unfortunately 
> there are "," inside the " ".
> Bindy get lost !
>  
> How can i get String values nested inside " " and containing "," ?
> I can note that Camel CSV component deals with it without any problems.
> Here is my pojo :
> package net.thejeearchitectcookbook.camel.earthquake;
> import java.io.Serializable;
> import org.apache.camel.dataformat.bindy.annotation.CsvRecord;
> import org.apache.camel.dataformat.bindy.annotation.DataField;
> @CsvRecord( separator = ",")
> public class EarthquakeInfos implements Serializable {
>    
>         @DataField(pos = 1)
>     private String src;
>        
>         @DataField(pos = 2)
>     private String eqid;
>        
>         @DataField(pos = 3)
>     private String version;
>        
>     @DataField(pos = 4)
>     private String datetime;
>    
>         @DataField(pos = 5)
>     private String lat;
>        
>         @DataField(pos = 6)
>     private String lon;
>    
>     @DataField(pos = 7)
>     private String magnitude;
>    
>         @DataField(pos = 8)
>     private String depth;
>        
>         @DataField(pos = 9)
>     private String nst;
>        
>     @DataField(pos = 10)
>     private String place;
>    
>     public String getSrc() {
>                 return src;
>         }
>         public void setSrc(String src) {
>                 this.src = src;
>         }
>         public String getEqid() {
>                 return eqid;
>         }
>         public void setEqid(String eqid) {
>                 this.eqid = eqid;
>         }
>         public String getVersion() {
>                 return version;
>         }
>         public void setVersion(String version) {
>                 this.version = version;
>         }
>         public String getLat() {
>                 return lat;
>         }
>         public void setLat(String lat) {
>                 this.lat = lat;
>         }
>         public String getLon() {
>                 return lon;
>         }
>         public void setLon(String lon) {
>                 this.lon = lon;
>         }
>         public String getDepth() {
>                 return depth;
>         }
>         public void setDepth(String depth) {
>                 this.depth = depth;
>         }
>         public String getNst() {
>                 return nst;
>         }
>         public void setNst(String nst) {
>                 this.nst = nst;
>         }
>         public String getDatetime() {
>         return datetime;
>     }
>     public void setDatetime(String datetime) {
>         this.datetime = datetime;
>     }
>     public String getMagnitude() {
>         return magnitude;
>     }
>     public void setMagnitude(String magnitude) {
>         this.magnitude = magnitude;
>     }
>     public String getPlace() {
>         return place;
>     }
>     public void setPlace(String place) {
>         this.place = place;
>     }
> } 
> I can find that CSV Camel component performs well with the same datasource :
> from("direct:datas")
> .to("http4://earthquake.usgs.gov/earthquakes/catalogs/eqs7day-M1.txt")
> .unmarshal().csv().process(new Processor() {
>       public void process(Exchange exchange) throws Exception {
>               Message message = exchange.getIn();
>               List<List<String>> datas = (List<List<String>>) 
> message.getBody();
>               // Skip header
>               datas = datas.subList(1, datas.size() - 1);
>               // Process my data
>               for (List<String> row : datas) {
>                       // Process Row
>                       String datetime = row.get(3);
>                       String region = row.get(9);
>                       String magnitude = row.get(6);
>                                       
>               }
>       }
> });

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to