The primary goals of this example are to introduce you to the following:
SVN - Download - Other Tutorials
To Build: "mvn clean install"
To Run: "mvn exec:java"
Transforming using profiling
This is a simple example that illustrates how Smooks can be used to apply "profile" based transformations on a message.
Using profiles, you can share common transformation configurations across all messages that share the same profiles.
[work in progress]
So here's the source xml that is to be transformed:
<a>
<b>
<c>
<b></b>
</c>
</b>
</a>
And this is the expected result of the transform for target profile 'message-exchange-1':
<from-a>
<to-b>
<c>
<b></b>
</c>
</to-b>
</from-a>
And this is the expected result of the transform for target profile 'message-exchange-2':
<from-a>
<b>
<c>
<to-c></to-c>
</c>
</b>
</from-a>
And this is the expected result of the transform for target profile 'message-exchange-3':
<from-a>
<b>
<to-d>
<b></b>
</to-d>
</b>
</from-a>
And this is the expected result of the transform for target profile 'message-exchange-4':
<a>
<to-b>
<c>
<b></b>
</c>
</to-b>
</a>
And this is the expected result of the transform for target profile 'message-exchange-5':
<a>
<to-b>
<message-exchange-5>
<d-to-b></d-to-b>
</message-exchange-5>
</to-b>
</a>
The Smooks Configuration
In order to apply this transformer to a message fragment, a Smooks Configurationneeds to be created. This configuration will target the transformer at a particular message fragment. For more information on configuring XSLT resources, see XslContentDeliveryUnitCreator.
Here's the configuration ("smooks-config.xml"):
<?xml version="1.0"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.0.xsd">
<profiles>
<profile base-profile="message-exchange-1" sub-profiles="from-a,to-b" />
<profile base-profile="message-exchange-2" sub-profiles="from-a,to-c" />
<profile base-profile="message-exchange-3" sub-profiles="from-a,to-d" />
<profile base-profile="message-exchange-4" sub-profiles="from-c,to-b" />
<profile base-profile="message-exchange-5" sub-profiles="from-d,to-b" />
</profiles>
<resource-config selector="a" target-profile="from-a">
<resource>example.BasicJavaTransformer</resource>
<param name="newName">from-a</param>
</resource-config>
<resource-config selector="a b" target-profile="to-b">
<resource>example.BasicJavaTransformer</resource>
<param name="newName">to-b</param>
</resource-config>
<resource-config selector="c b" target-profile="to-c">
<resource>example.BasicJavaTransformer</resource>
<param name="newName">to-c</param>
</resource-config>
<resource-config selector="c" target-profile="to-d">
<resource>example.BasicJavaTransformer</resource>
<param name="newName">to-d</param>
</resource-config>
<resource-config selector="b c" target-profile="message-exchange-5">
<resource>example.BasicJavaTransformer</resource>
<param name="newName">message-exchange-5</param>
</resource-config>
<resource-config selector="c b" target-profile="to-b AND from-d">
<resource>example.BasicJavaTransformer</resource>
<param name="newName">d-to-b</param>
</resource-config>
</smooks-resource-list>
Executing The Transformation
// Instantiate Smooks with the config...
Smooks smooks = new Smooks("smooks-config.xml");
// Filter the input message to the outputWriter, using the execution context...
smooks.filter(new StreamSource(messageIn), new StreamResult(outputWriter));
Of course, you'd typically cache the Smooks instance.
See the example/Main.java in the example source.