How can I convert XML file to EDI file using SMOOKS?
I am able to convert EDI to XML, in fact this is part of examples provided by SMOOKS.
Smooks is a framework for data processing applications – dealing with structured data such as XML or CSV. It provides both APIs and a configuration model that allow us to define transformations between predefined formats (for example XML to CSV, XML to JSON and more).
EDI stands for Electronic Data Interchange. It is a computer-to-computer exchange of data or information such as business documents between companies.
Based on your question i tried to do some research on it . Please check if it helps you .
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
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"):
<?xml version="1.0"?> <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:edi="http://www.milyn.org/xsd/smooks/edi-1.1.xsd"> <!-- Configure the EDI Reader to process the message stream into a stream of SAX events. --> <edi:reader mappingModel="/example/edi-to-xml-order-mapping.xml" /> </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=" " 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:
// Instantiate Smooks with the config... Smooks smooks = new Smooks("smooks-config.xml"); try { // Filter the input message to the outputWriter... smooks.filterSource(new StreamSource(messageIn), new StreamResult(messageOut)); } finally { smooks.close(); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With