4. WHAT IS UN/EDIFACT?
• UN/EDIFACT
‣ “United Nations/Electronic Data Interchange For Administration, Commerce and Transport”
• UN/EDIFACT & X12
‣ Dominant B2B data exchange standards (>>> XML)
‣ X12 North America
‣ UN/EDIFACT Everywhere else
Wednesday 1 September 2010
5. WHAT IS UN/EDIFACT?
•A Message Interchange “Protocol"
UNB
UNH
<message>
UNT
UNH
<message>
UNT
etc...
UNZ
Wednesday 1 September 2010
7. EDI SUPPORT IN 1.3
Input <message>
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
Smooks
<edi:reader mappingModel="../edi-mapping-models/order-mapping.xml" />
Output
<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>
Wednesday 1 September 2010
8. EDI SUPPORT IN 1.3
• Single <message> instance
‣ No Interchange Support
• Generic EDI Reader
‣ No standards support “out-of-the-box”
‣ Hand coded “EDI Mapping Models”
• Reading - YES .... Writing - NO
Wednesday 1 September 2010
9. EDI SUPPORT IN 1.3
• Each <message> defined by an “EDI Mapping Model”
‣ Schema for EDI <?xml version="1.0" encoding="UTF-8"?>
<medi:edimap xmlns:medi="http://www.milyn.org/schema/edi-message-mapping-1.3.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>
Wednesday 1 September 2010
11. MORE... WHAT IS UN/EDIFACT?
• UN/EDIFACT Standard
‣ An Interchange Protocol
‣ A Directory of Interchange Message Definitions
- 20+ Directory Versions/Releases (d93a, d03b etc)
- ~ 200 Messages/Directory
- Defined in .zip files... downloadable
- Not very user friendly !!!
Wednesday 1 September 2010
12. EDI CONVERSION TOOL
(ECT)
• Input: UN/DIFACT Directory .zip
• Output: Smooks EDI Mapping Model .jar
‣ “Zip Set”
Wednesday 1 September 2010
13. EDI CONVERSION TOOL
(ECT)
• Maven & Ant Plugins
<plugins>
<plugin>
<groupId>org.milyn</groupId>
<artifactId>maven-ect-plugin</artifactId>
<version>1.4-SNAPSHOT</version>
<configuration>
<src>d03b.zip</src>
<srcType>UNEDIFACT</srcType>
</configuration>
<executions>
<execution><goals><goal>generate</goal></goals></execution>
</executions>
</plugin>
</plugins>
Wednesday 1 September 2010
14. EDI CONVERSION TOOL
(ECT)
• d03b-mapping-1.0-SNAPSHOT.jar
org.milyn.edi.unedifact:d03b-mapping:1.0-SNAPSHOT
#UN/EDIFACT Interchange Properties
#Sun Aug 08 10:41:40 IST 2010
interchangeType=UNEDIFACT
interchangeBindingConfig=/org/milyn/smooks/edi/unedifact/model/r41/bindings/unedifact-interchange.xml
messageBindingConfig=/org/milyn/smooks/edi/unedifact/model/r41/bindings/unedifact-message.xml
Wednesday 1 September 2010
15. EDI CONVERSION TOOL
(ECT)
• Future Additions
‣ X12
‣ HL7
‣ TRADACOMS
‣ etc...
Wednesday 1 September 2010
17. UN/EDIFACT READER
• Nested Execution of the <edi:reader>
UNB
UNH
<message> Two
UNT
One UNH
<message> Three
UNT
etc...
UNZ
Wednesday 1 September 2010
18. UN/EDIFACT + JAVA
• Read: EDI Stream Java Objects
• Write: Java Objects EDI Stream
Wednesday 1 September 2010
19. UN/EDIFACT + JAVA
• Read: EDI Stream SAX Events Java Objects
• Write: Java Objects EDI Stream
Wednesday 1 September 2010
20. UN/EDIFACT + JAVA
• EDI Stream SAX Events
ECT
‣ EDI Mapping Models
• SAX Events Java Objects
?
‣ Smooks Java Binding (<jb:bean> etc)
Wednesday 1 September 2010
21. EDI JAVA COMPILER (EJC)
• Input: EDI Mapping Model “Zip Set” (from ECT)
‣ e.g. d03b-mapping-1.0-SNAPSHOT.jar
• Output: Compiled Java Object Model
‣ Including <jb:bean> binding configurations
‣ Easy to use Factory Class
‣ e.g. d03b-binding-1.0-SNAPSHOT.jar
Wednesday 1 September 2010
23. EDI JAVA COMPILER (EJC)
• Read: EDI Stream Java Objects
// Create an instance of the EJC generated factory class... cache this and reuse !!!
D03BInterchangeFactory factory = D03BInterchangeFactory.getInstance();
// Deserialize the UN/EDIFACT interchange stream to Java...
UNEdifactInterchange interchange = factory.fromUNEdifact(ediInStream);
// Need to test which interchange syntax version. Supports v4.1 at the moment...
if(interchange instanceof UNEdifactInterchange41) {
UNEdifactInterchange41 interchange41 = (UNEdifactInterchange41) interchange;
for(UNEdifactMessage41 message : interchange41.getMessages()) {
// Process the messages...
Object messageObj = message.getMessage();
if(messageObj instanceof Invoic) {
// It's an INVOIC message....
Invoic invoic = (Invoic) messageObj;
ItemDescription itemDescription = invoic.getItemDescription();
// etc etc....
} else if(messageObj instanceof Cuscar) {
// It's a CUSCAR message...
} else if(etc etc etc...) {
// etc etc etc...
}
}
}
Wednesday 1 September 2010
24. EDI JAVA COMPILER (EJC)
• Write: Java Objects EDI Stream
factory.toUNEdifact(interchange, ediOutStream);
Wednesday 1 September 2010
25. EDI JAVA COMPILER (EJC)
• Interchange Object Model
public class UNEdifactInterchange41 implements UNEdifactInterchange {
private UNB41 interchangeHeader;
private UNZ41 interchangeTrailer;
private List<UNEdifactMessage41> messages;
}
public class UNEdifactMessage41 implements UNEdifactMessage {
private UNB41 interchangeHeader;
private UNG41 groupHeader;
private UNE41 groupTrailer;
private UNH41 messageHeader;
private UNT41 messageTrailer;
private Object message;
}
Wednesday 1 September 2010
26. DISTRIBUTION
• Maven Central Public Repo
‣ EDI Mapping Model “Zip Sets”
<dependency>
<groupId>org.milyn.edi.unedifact</groupId>
<artifactId>d03b-mapping</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
‣ Java Binding Models
<dependency>
<groupId>org.milyn.edi.unedifact</groupId>
<artifactId>d03b-binding</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Wednesday 1 September 2010
27. DISTRIBUTION
• Build and distribute as many as possible
‣ Users avoid ECT and EJC steps
‣ Consume/Produce UN/EDIFACT in minutes !!!
‣ SVN Repo (edi/gen)
Wednesday 1 September 2010
32. UN/EDIFACT TO XML
EXAMPLE
1. Add Mapping Model Dependencies (Zip Sets)
2. Create Smooks Configuration With <unedifact:reader>
3. Execute Smooks runtime on Smooks configuration
Wednesday 1 September 2010
33. UN/EDIFACT - READING &
WRITING EXAMPLE
1. Add Mapping Model Dependencies (Java Bindings)
2. Read using Interchange Factory class
3. Write using Interchange Factory class
Wednesday 1 September 2010