camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: Custom Transformation
Date Wed, 02 May 2012 14:50:38 GMT
On Wed, May 2, 2012 at 4:36 PM, Raul Kripalani <raul@fusesource.com> wrote:
> Just a quick comment. In my experience I have found data formats to fit in
> well with the marshal / unmarshal model where there is a low-level data
> format and a high-level object roundtrip, but not so well with high-level
> ad-hoc transformations.
>
> If you look at the DataFormat interface, you'll see what I mean, as it's
> tailored to handle InputStream and OutputStream.
>
> If your third party library doesn't handle Input/OutputStreams, maybe your
> safest bet is to create a simple bean with a transform() method, and pass
> in any runtime arguments as message headers.
>
> But then again, Claus is the God of Camel here and he knows better than me
> ;)
>

Well one caveat with the data format is that you can't configure them
using uris, as you can with endpoints.
So eg a custom component with an endpoint can more easily be
configured / customized in the routes.

You can configure your data formats using the usual <bean> style with
the <property> style.

We have talked about for Camel 3.x to allow configuring data formats
with uris as well. But so far its not doable.
So what we have to do for the out of the box data formats is to add
options in the camel-core for the DSL, if we want
to offer configuration from the DSL itself.

And btw with data formats, sometimes you kinda forget what marshal and
unarmshal does. Eg marshal a JAXB what does that really mean :)


> Regards,
>
> *Raúl Kripalani*
> Principal Consultant | FuseSource Corp.
> raul@fusesource.com | fusesource.com <http://www.fusesource.com/>
> skype: raul.fuse | twitter: @raulvk <http://twitter.com/raulvk>,
> @fusenews<http://twitter.com/fusenews>
>
> <http://twitter.com/fusenews>
>
> On 2 May 2012 15:11, Claus Ibsen <claus.ibsen@gmail.com> wrote:
>
>> On Wed, May 2, 2012 at 4:08 PM, Meeraj Kunnumpurath
>> <meeraj@servicesymphony.com> wrote:
>> > Thanks Claus.
>> >
>> > So do I defined the custom data format as a Spring bean refer to it from
>> > the unmarshal XML element. Or do I need to use setDataFormatResolver on
>> > CamelContext?
>> >
>>
>> Yes just refer to it's spring bean id name.
>>
>> You can even do that directly in the routes
>>
>> <route>
>>  ..
>>  <marshal ref="myDataFormat"/>
>>  ...
>> </route>
>>
>> See chapter 3, section 3.4.6 in the book as it shows how to write
>> custom data format and with examples in XML DSL as well.
>>
>>
>> > Thanks
>> > Meeraj
>> >
>> > PS: BTW just got the book, it rocks :)
>> >
>> > On Wed, May 2, 2012 at 1:44 PM, Claus Ibsen <claus.ibsen@gmail.com>
>> wrote:
>> >
>> >> On Wed, May 2, 2012 at 12:04 PM, Meeraj Kunnumpurath
>> >> <meeraj@servicesymphony.com> wrote:
>> >> > Hi,
>> >> >
>> >> > I have a need to apply custom transformation using a third party
>> library.
>> >> > My plan is to write a new data format. However, I am not sure whether
>> it
>> >> is
>> >> > the right component for me, as the need is to have one transform
>> method,
>> >> > which doesn't fit well with the marshal/unmarshal pair.
>> >> >
>> >>
>> >> A data format dont have to support both. For example tiny markup only
>> >> support one of them.
>> >>
>> >>
>> >> > A second question I have on this is once I have defined the component,
>> >> how
>> >> > do I integrate that into the Spring DSL. With a custom data format,
I
>> ran
>> >> > into the following problems ..
>> >> >
>> >> > 1. Since the JAXB context used by loadRouteDefinitions has hard-wired
>> the
>> >> > packages it recognizes, I am unable to introduce any new vocabulary
>> into
>> >> > the DSL
>> >> > 2. If I override loadRouteDefinitions to recognize my packages, some
>> of
>> >> the
>> >> > types like UnmarshalDefinition within Camel are constrained in terms
>> of
>> >> the
>> >> > types of children it can have. So I am unable to introduce any new
>> types
>> >> in
>> >> > there.
>> >> >
>> >>
>> >> You can't. Although I think I have seen some ppl post about some hacks
>> >> he did in the XML DSL to extend with custom namespaces.
>> >> But its not easy thought. But maybe you can google that, if you really
>> >> really want to go down that path.
>> >>
>> >> You can use a custom data format in the DSL, and just refer to that
>> >> using the generic marshal / unmarshal.
>> >>
>> >>
>> >> > Kind regards
>> >> > Meeraj
>> >>
>> >>
>> >>
>> >> --
>> >> Claus Ibsen
>> >> -----------------
>> >> CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
>> >> FuseSource
>> >> Email: cibsen@fusesource.com
>> >> Web: http://fusesource.com
>> >> Twitter: davsclaus, fusenews
>> >> Blog: http://davsclaus.blogspot.com/
>> >> Author of Camel in Action: http://www.manning.com/ibsen/
>> >>
>> >
>> >
>> >
>> > --
>> > *Meeraj Kunnumpurath*
>> > *Director and Executive Principal
>> > Service Symphony Ltd
>> > 00 44 7702 693597
>> > meeraj@servicesymphony.com*
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
>> FuseSource
>> Email: cibsen@fusesource.com
>> Web: http://fusesource.com
>> Twitter: davsclaus, fusenews
>> Blog: http://davsclaus.blogspot.com/
>> Author of Camel in Action: http://www.manning.com/ibsen/
>>



-- 
Claus Ibsen
-----------------
CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Mime
View raw message