The CXF transformation feature provides a nice way to
declaratively specify certain simple transformations – e.g. replace element
names, add elements, change namespaces, etc. My previous blog post described this mechanism in detail.
This feature makes it easy to describe the transformation in a map in Spring XML. The ease-of- use in declaring a transformation with XML makes it a very appealing solution. Such an easy, declarative mechanism for performing transformations is not available in Camel.
This feature makes it easy to describe the transformation in a map in Spring XML. The ease-of- use in declaring a transformation with XML makes it a very appealing solution. Such an easy, declarative mechanism for performing transformations is not available in Camel.
The out-of-the-box use of CXF transformation feature in a
Camel route is restrictive because the transformation is tied to the CXF
endpoint, so the transformations defined cannot be applied to messages at any
arbitrary location within a route’s pipeline.
The purpose of this investigation was to determine whether the
API that implements the CXF transformation feature could be de-coupled from CXF
and re-used from within a custom Camel processor to perform transformations on
messages at arbitrary locations within a route.
A
prototype was written that proves it is indeed possible to use the CXF
transformation feature to define transformation mappings (via XML) using the
same syntax as the CXF feature. The transformation mapping is assigned to a
generic processing bean. The processing bean can then be inserted at any location
within your camel route.Implementation
To implement this pattern, you will define the transformation in your Spring XML (‘camel-context.xml’) using the transformation mapping syntax. The mapping language is the same as defined here:
An example of how this would look in Spring is shown below:
This bean declared above is an instance of the
class “gov.foo.services.enterprise.deqy.transformer.TransformFeature”. This
java class has several properties (expressed as maps) that will hold the logic
required for the transformation.
The following code snippet lists the implementation of the
underlying java class represented by the bean declared above.
The “process()” method (line 20) will get called as the
message passes through the bean. The code will pull out the body of the message
as an XMLStreamReader (line 22-23). Notice line 27 calls the “org.apache.cxf.staxutils.transform.InTransformReader”
constructor with the appropriate maps. This
is where the code re-uses the CXF transformation implementation. The
XMLStreamReader that is returned has been transformed by the CXF API. This is
then set as the body of the message that gets passed along in the route.
The
following Camel route ‘camel-context.xml’ expressed in Spring XML, puts it all
together and shows how the transformation can be placed into an arbitrary
location in any route. This route will pick up a file from ‘inbox’ directory,
pass along the content of the file, which is sent to the processing bean that
performs the transformation defined in the same Spring file (shown by the
mapping code shown previously.) The content
of the transformed message will then go to another file component that will
write the content to a file in the outbox ‘directory’.
The above Camel route ‘camel-context.xml’
expressed in Spring XML, puts it all together and shows how the transformation
can be placed into an arbitrary location in any route. This route (lines 54-58)
contains the processing bean (line 56) that performs the transformation.
AWESOME THE PROMOTION OF GIRL BEAUTIFUL SALES KLIK HERE ADU AYAM BANGKOK
ReplyDeleteGOOD PRICE AND CHEAP
http://www.gorengayam.co
PLEASE PRICE DIRECTLY
https://www.diigo.com/item/note/6i7ag/woen?k=d420ae96728ae0c6fb0c921bd42f3c27