You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Jean Francois LE BESCONT <jf...@gmail.com> on 2013/05/14 16:02:34 UTC

bind programmatically

Hey !

I would like to programmatically marshal and bind my body to do :

from("file://C:/Temp/camel/rep1/?noop=true")
   .split().tokenize("\n")
   .unmarshal()
   .bindy(BindyType.Csv, Ticket.class)
   .process(new Processor() {
      public void process(Exchange exchange) throws Exception {
         Ticket ticket = (Ticket) exchange.getIn().getBody() ;

         // Convert from ticket to CSV which is @CsvRecord
         <String or byte[]> ticketInCSVOrignal =???  ( ticket )
         ticket.originalVersion =  ticketInCSVOrignal

 // modify ticket start here
      }
   })
   [...]


Something that will do the equivalent of  :

.marshal()
.bindy(BindyType.Csv, Ticket.class)



I have look typeConverter and dataformat, but I am a little bit lost

Any idea ?

Thanks !

Jeff

Re: bind programmatically

Posted by Jean Francois LE BESCONT <jf...@gmail.com>.
Thanks ( like always :) Claus !

It is right that it is a little bit unusual, I have to modify a CSV and add
one new field which is the original field.

the code is :

from("file://C:/Temp/camel/rep1/?noop=true")
   .split().tokenize("\n")
   .streaming()
   .unmarshal()
   .bindy(BindyType.Csv, Ticket.class)
   .process(new Processor() {
      public void process(Exchange exchange) throws Exception {
         Ticket ticket = (Ticket) exchange.getIn().getBody() ;
         BindyCsvDataFormat bindyCsvDataFormat = new
BindyCsvDataFormat(Ticket.class);
         MyOutputStream myOutputStream =new MyOutputStream();
         bindyCsvDataFormat.marshal(exchange, ticket, myOutputStream);
         String s = new String(myOutputStream.toByteArray());
         System.out.println(s);
      }
  })
  .end()
.end()
;

with a custom outstream which keep in memory the conversion.

Thanks

JF


2013/5/14 Claus Ibsen <cl...@gmail.com>

> From your processor you can just create the bindy data format and
> invoke the marshal method.
>
> eg add camel-bindy to your class path, and find the BindyDataFormat
> class and create a new instance, configure it, and invoke the marshal
> method manually.
>
> Its a bit unusual to do it like that, but you can do it.
>
> On Tue, May 14, 2013 at 4:02 PM, Jean Francois LE BESCONT
> <jf...@gmail.com> wrote:
> > Hey !
> >
> > I would like to programmatically marshal and bind my body to do :
> >
> > from("file://C:/Temp/camel/rep1/?noop=true")
> >    .split().tokenize("\n")
> >    .unmarshal()
> >    .bindy(BindyType.Csv, Ticket.class)
> >    .process(new Processor() {
> >       public void process(Exchange exchange) throws Exception {
> >          Ticket ticket = (Ticket) exchange.getIn().getBody() ;
> >
> >          // Convert from ticket to CSV which is @CsvRecord
> >          <String or byte[]> ticketInCSVOrignal =???  ( ticket )
> >          ticket.originalVersion =  ticketInCSVOrignal
> >
> >  // modify ticket start here
> >       }
> >    })
> >    [...]
> >
> >
> > Something that will do the equivalent of  :
> >
> > .marshal()
> > .bindy(BindyType.Csv, Ticket.class)
> >
> >
> >
> > I have look typeConverter and dataformat, but I am a little bit lost
> >
> > Any idea ?
> >
> > Thanks !
> >
> > Jeff
>
>
>
> --
> Claus Ibsen
> -----------------
> www.camelone.org: The open source integration conference.
>
> Red Hat, Inc.
> FuseSource is now part of Red Hat
> Email: cibsen@redhat.com
> Web: http://fusesource.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
>

Re: bind programmatically

Posted by Claus Ibsen <cl...@gmail.com>.
>From your processor you can just create the bindy data format and
invoke the marshal method.

eg add camel-bindy to your class path, and find the BindyDataFormat
class and create a new instance, configure it, and invoke the marshal
method manually.

Its a bit unusual to do it like that, but you can do it.

On Tue, May 14, 2013 at 4:02 PM, Jean Francois LE BESCONT
<jf...@gmail.com> wrote:
> Hey !
>
> I would like to programmatically marshal and bind my body to do :
>
> from("file://C:/Temp/camel/rep1/?noop=true")
>    .split().tokenize("\n")
>    .unmarshal()
>    .bindy(BindyType.Csv, Ticket.class)
>    .process(new Processor() {
>       public void process(Exchange exchange) throws Exception {
>          Ticket ticket = (Ticket) exchange.getIn().getBody() ;
>
>          // Convert from ticket to CSV which is @CsvRecord
>          <String or byte[]> ticketInCSVOrignal =???  ( ticket )
>          ticket.originalVersion =  ticketInCSVOrignal
>
>  // modify ticket start here
>       }
>    })
>    [...]
>
>
> Something that will do the equivalent of  :
>
> .marshal()
> .bindy(BindyType.Csv, Ticket.class)
>
>
>
> I have look typeConverter and dataformat, but I am a little bit lost
>
> Any idea ?
>
> Thanks !
>
> Jeff



-- 
Claus Ibsen
-----------------
www.camelone.org: The open source integration conference.

Red Hat, Inc.
FuseSource is now part of Red Hat
Email: cibsen@redhat.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen