Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

The primary goals of this example are to introduce you to the following:

  1. Transforming from an edi file to xml.
  2. The Smooks configuration file.
  3. Executing the Smooks Transformation.

 
SVN - Download - Other Tutorials

Other Relevant Info:

 
To Build: "mvn clean install"
To Run: "mvn exec:java"


work in progress...

Transforming from an edi file to xml

This is a very simple example that illustrates how Smooks to configure in a non-XML stream parser (CSV) into Smooks.

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
CUS*user1*Harry^Fletcher*SD
ORD*1*1*364*The 40-Year-Old Virgin*29.98
ORD*2*1*299*Pulp Fiction*29.99

And this is the expected result of our transformation:

<Order>
        <header>
                <order-id>1</order-id>
                <status-code>0</status-code>
                <net-amount>59.97</net-amount>
                <total-amount>64.92</total-amount>
                <tax>4.95</tax>
                <date>Wed Nov 15 13:45:28 EST 2006</date>
        </header>
        <customer-details>
                <username>user1</username>
                <name>
                        <firstname>Harry</firstname>
                        <lastname>Fletcher</lastname>
                </name>
                <state>SD</state>
        </customer-details>
        <order-item>
                <position>1</position>
                <quantity>1</quantity>
                <product-id>364</product-id>
                <title>The 40-Year-Old Virgin</title>
                <price>29.98</price>
        </order-item>
        <order-item>
                <position>2</position>
                <quantity>1</quantity>
                <product-id>299</product-id>
                <title>Pulp Fiction</title>
                <price>29.99</price>
        </order-item>
</Order>



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">

	<!-- Configure the EDI Parser to parse the message stream into a stream of SAX events. -->
	<resource-config selector="org.xml.sax.driver">
		<resource>org.milyn.smooks.edi.SmooksEDIParser</resource>
		<param name="mapping-model">/example/edi-to-xml-order-mapping.xml</param>
	</resource-config>

</smooks-resource-list>

Here's the edi mapping ("/src/main/java/example/edi-to-xml-order-mapping.xml"):

<?xml version="1.0" encoding="UTF-8"?>
<medi:edimap xmlns:medi="http://www.milyn.org/schema/edi-message-mapping-1.0.xsd">

	<medi:description name="DVD Order" version="1.0" />

	<medi:delimiters segment="&#10;" field="*" component="^" sub-component="~" />

	<medi:segments xmltag="Order">

		<medi:segment segcode="HDR" xmltag="header">
			<medi:field xmltag="order-id" />
			<medi:field xmltag="status-code" />
			<medi:field xmltag="net-amount" />
			<medi:field xmltag="total-amount" />
			<medi:field xmltag="tax" />
			<medi:field xmltag="date" />
		</medi:segment>

		<medi:segment segcode="CUS" xmltag="customer-details">
			<medi:field xmltag="username" />
			<medi:field xmltag="name">
				<medi:component xmltag="firstname" />
				<medi:component xmltag="lastname" />
			</medi:field>
			<medi:field xmltag="state" />
		</medi:segment>

		<medi:segment segcode="ORD" xmltag="order-item" maxOccurs="-1">
			<medi:field xmltag="position" />
			<medi:field xmltag="quantity" />
			<medi:field xmltag="product-id" />
			<medi:field xmltag="title" />
			<medi:field xmltag="price" />
		</medi:segment>

	</medi:segments>

</medi:edimap>


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.

See the example/Main.java in the example source.

  • No labels