[ https://issues.apache.org/jira/browse/CAMEL-4655?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen resolved CAMEL-4655. -------------------------------- Resolution: Fixed Fix Version/s: 2.9.0 2.8.3 Thanks for reporting. > 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 > Assignee: Claus Ibsen > Fix For: 2.8.3, 2.9.0 > > > 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