This tutorial illustrates is how to generate a stream of SAX events from an EDI stream and how that stream of SAX events feeds into Smooks to generate an XML model that can be transformed further (in this case it is not).
To Build: "mvn clean install" To Run: "mvn exec:java"
Transforming from EDI to XML
This example illustrates how to hook the EdiSax (http://milyn.codehaus.org/EdiSax) EDI parser into a Smooks based transform (filter operation). It's another example of how non-XML streams can be processed by Smooks (see the csv-to-xml example).
In this example, we simply configure in the EdiSax parser to process the EDI stream into XML. We don't perform any other transforms on the underlying data. For an example of how other transform operations can be built on top of this edi-to-xml transform, see the edi-to-java example.
So here's the source edi file that is to be transformed:
HDR*1*0*59.97*64.92*4.95*Wed Nov 15 13:45:28 EST 2006
ORD*1*1*364*The 40-Year-Old Virgin*29.98
And this is the expected result of our transformation:
We simply specify the SmooksEDIParser as the stream parser. More transformation configurations could be added to transform this message further.
Here's the configuration ("smooks-config.xml"):
<!-- Configure the EDI Parser to parse the message stream into a stream of SAX events. -->
Here's the edi mapping ("/src/main/java/example/edi-to-xml-order-mapping.xml"):
The following illustrations attempts to visually describe the mapping that takes place (see EDIParser):
Executing The Transformation
Again, it's exactly the same as with the java-basic tutorial:
// Instantiate Smooks with the config...
Smooks smooks = new Smooks("smooks-config.xml");
// Create an exec context - no profiles....
StandaloneExecutionContext executionContext = smooks.createExecutionContext();
// Filter the input message to the outputWriter, using the execution context...
DOMResult domResult = new DOMResult();
smooks.filter(new StreamSource(new ByteArrayInputStream(messageIn)), domResult, executionContext);
Of course, you'd typically cache the Smooks instance.