You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Claus Ibsen (Assigned) (JIRA)" <ji...@apache.org> on 2011/11/12 12:00:51 UTC

[jira] [Assigned] (CAMEL-4655) Bindy does not support quoted value with separator char in CSV datasource

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

Claus Ibsen reassigned CAMEL-4655:
----------------------------------

    Assignee: Claus Ibsen
    
> 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
>
> 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