[ 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