Hi all,
I have been working on Improving ESB Smooks Mediator to support Main Smooks
Features as stated in [1]. Most of the features were able to be executed on
current Smooks mediator without any modifications. So for those features I
wrote some sample services and tested them. Here are the list of those
features.
1. Transformation - XML, CSV, EDI to XML
2. Java Binding - Bind input message into Java object models and use them
in templating, database routing, etc.
3. Message Enrichment - routing input message from supported datasource to
a database
4. Templating - Freemarker Templating and XSL Templating can be applied to
input messages to do the followings
- Fragment based transformation
- Generate Split message Fragments
5. Scripting - Groovy scripting can be applied to messages to process and
do the necessary changes to the message elements
6. Combine - Perform ETL operatons by,
- Extracting data from multiple sources (CSV, EDI, XML)
- Transforming to required format (Readers[XML, CSV, EDI Readers],
Templating, Scripting)
- Routing to the endpoints (Database, Files, ESB)
Further for performing following three features I had to do improvements to
the Smooks mediator.
7. Huge Message Processing
Processing large messages requires streaming from the MessageContext to the
mediator which is not a feature of the current Smooks mediator. Therefore I
did the necessary improvements to support streaming inside the mediator.
Input Type :- Text
Axiom API supports streaming of text nodes that are children of a given
element.
Input Type :- XML
Since Axiom API does not support streaming XML events to an
InputStream, I implemented a way to stream xml events from the OMElement.
I have tested the improved Smooks Mediator for large input messages of XML
& Text. ESB reads the input file through VFS transport. Then Smook mediator
split the message, apply freemarker template, and route to file locations.
So the large message is split out, and each split part is written into
separate files. Also the message can be routed to databases where each
split message is a single record.
8. Java Resulting
Smooks has the ability to return the content of the bean context (where
every java bean created is registered under beanId) after the filtering
process. This result is an org.milyn.delivery.java.JavaResult object whose
beans can be retrieved by beanIds. I did the necessary changes to the
Smooks mediator to bind the Smooks Java Result as a property, to the
MessageContext. Now the Smooks mediator has new output type 'Java'. With
this improvement mediators followed by Smooks Mediator can retrieve the
Java object from the MessageContext. I tested this scenario through a
custom mediator which get the property set by Smooks Mediator and retrieve
the bean by beanId.
<smooks config-key="smooks-key">
<input type="xml"/>
<output type="java" property="order"/>
</smooks>
So followed mediators can retireve the bean values as,
JavaResult result = (JavaResult)synCtx.getProperty("order");
Order order = (Order)result.getBean("order");
9. Entity Persistent Framework support - JPA
Smooks support using several Entity Persistence Providers such as JPA,
Hibernate. Executing JPA with Smooks require initializing an entity manager
for defined persistence unit (in Persistence.xml) and stating a transaction
before executing smooks filtering. When improving Smooks mediator to
perform those an issue encountered in finding the persistence provider
(Hibernate-Entity manager in this case) and persistence.xml even though
necessary jars were placed inside ESB repository/components/lib. As a
workaround I found the solution as to place the Persistence Provider jar
and the jar containing Entity classes with the Persistence.xml to be placed
inside outer lib folder (They need to be inside repository/components/lib
as well).
Now smooks mediator can be configured with persistence-unit attribute which
represent the persistence unit name defined inside Persistence.xml.
<smooks config-key="smooks-key" persistence_unit="db">
<input type="xml" />
<output type="xml"/>
</smooks>
So I have completed the implementation of improvements to Smooks Mediator
for supporting the main features provided by Smooks. Any suggestions or
comments are really appreciated.
[1]
http://www.smooks.org/mediawiki/index.php?title=V1.5:Smooks_v1.5_User_Guide
<http://www.smooks.org/mediawiki/index.php?title=V1.5:Smooks_v1.5_User_Guide>
Thanks,
Lakmali
--
Lakmali Baminiwatta*
*
Software Engineer
WSO2, Inc.: http://wso2.com
lean.enterprise.middleware
*
*
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev