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 (Resolved) (JIRA)" <ji...@apache.org> on 2011/11/12 15:12:52 UTC
[jira] [Resolved] (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 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