XML to EDI Smooks v2.0.0-M2

908 views
Skip to first unread message

Ivan Metla

unread,
Mar 24, 2021, 2:07:52 PM3/24/21
to Smooks Users
Hi all,

I am trying to convert XML to EDI using Smooks v2.0.0-M2. 
I found an example how to convert EDI to XML https://github.com/smooks/smooks-examples/tree/master/edi-to-xml and found a documentation https://github.com/smooks/smooks.github.io/blob/v2.0.0-M2/docs.markdown#xml-api-3 has the possibility to convert XML to EDI by add 

 <edi:unparser unparseOnElement="/Order" schemaURI="/edi-to-xml-mapping.dfdl.xsd" segmentTerminator="%NL;" compositeDataElementSeparator="^"/>


but received the exception:
Caused by: org.apache.daffodil.japi.DaffodilUnparseErrorSAXException: Unparse Error: Expected element start event for {}header, but received element start event for (invalid) {}Order.

Maybe somebody has a working example of how to convert XML to EDI or dfdl.xsd file for that convertion?

Claude

unread,
Mar 25, 2021, 3:12:57 AM3/25/21
to Smooks Users
Welcome to the forum Ivan! The DFDL unparser is complaining that the received XML doesn't match the DFDL schema. Please post the XML you're trying to convert.

Claude

Ivan Metla

unread,
Mar 25, 2021, 3:19:05 AM3/25/21
to Smooks Users
Hi Claude,

My XML:
<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>

I would like to convert it to EDI:
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


My DFDL:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/" xmlns:ibmEdiFmt="http://www.ibm.com/dfdl/EDI/Format">

<xsd:import namespace="http://www.ibm.com/dfdl/EDI/Format"
schemaLocation="/EDIFACT-Common/IBM_EDI_Format.dfdl.xsd"/>

<xsd:annotation>
<xsd:appinfo source="http://www.ogf.org/dfdl/">
<dfdl:format ref="ibmEdiFmt:EDIFormat"/>
</xsd:appinfo>
</xsd:annotation>

<xsd:element name="Order">
<xsd:complexType>
<xsd:sequence>
<xsd:sequence dfdl:initiatedContent="yes">
<xsd:element dfdl:initiator="HDR" dfdl:ref="ibmEdiFmt:EDISegmentFormat" name="header">
<xsd:complexType>
<xsd:sequence dfdl:ref="ibmEdiFmt:EDISegmentSequenceFormat">
<xsd:element name="order-id" type="xsd:string"/>
<xsd:element name="status-code" type="xsd:string"/>
<xsd:element name="net-amount" type="xsd:string"/>
<xsd:element name="total-amount" type="xsd:string"/>
<xsd:element name="tax" type="xsd:string"/>
<xsd:element name="date" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:initiator="CUS" dfdl:ref="ibmEdiFmt:EDISegmentFormat" name="customer-details">
<xsd:complexType>
<xsd:sequence dfdl:ref="ibmEdiFmt:EDISegmentSequenceFormat">
<xsd:element name="username" type="xsd:string"/>
<xsd:element name="name">
<xsd:complexType>
<xsd:sequence dfdl:ref="ibmEdiFmt:EDICompositeSequenceFormat">
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="state" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:initiator="ORD" dfdl:ref="ibmEdiFmt:EDISegmentFormat" name="order-item" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence dfdl:ref="ibmEdiFmt:EDISegmentSequenceFormat">
<xsd:element name="position" type="xsd:string"/>
<xsd:element name="quantity" type="xsd:string"/>
<xsd:element name="product-id" type="xsd:string"/>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="price" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

Claude Mamo

unread,
Mar 25, 2021, 4:20:18 AM3/25/21
to smook...@googlegroups.com
I couldn't reproduce the error locally with smooks-edi-cartridge 2.0.0-M2. Are you sure you're referencing the right Smooks version?

Claude

--
You received this message because you are subscribed to the Google Groups "Smooks Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to smooks-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/smooks-user/6b8501fc-ac29-440e-b931-80c3ba56191dn%40googlegroups.com.

Ivan Metla

unread,
Mar 25, 2021, 4:25:31 AM3/25/21
to smook...@googlegroups.com
Yep. I execute XML to EDI. 

My Java code, Maybe some wrong with it?
Smooks smooks = new Smooks("edi-to-xml/smooks-config-unparser.xml"); 
ExecutionContext executionContext = smooks.createExecutionContext();
StringResult stringResult = new StringResult();
// Configure the execution context to generate a report...
executionContext.getContentDeliveryRuntime().addExecutionEventListener(new HtmlReportGenerator("target/report/report.html"));
// Filter the input message to the outputWriter, using the execution context...
smooks.filterSource(new ByteSource(messageIn), stringResult);
Locale.setDefault(defaultLocale);
return stringResult.toString();


Can you share your working example to convert XML to EDI?

--
Regards,
Ivan Metla

AgileVision sp. z o.o.
Software Development Services


Claude Mamo

unread,
Mar 25, 2021, 4:51:58 AM3/25/21
to smook...@googlegroups.com

Ivan Metla

unread,
Mar 25, 2021, 5:07:59 AM3/25/21
to smook...@googlegroups.com
Thank you a lot. It is working now.

--
Regards,
Ivan Metla

AgileVision sp. z o.o.
Software Development Services

Claude Mamo

unread,
Mar 25, 2021, 5:08:58 AM3/25/21
to smook...@googlegroups.com
Do you know what the problem was?

Claude

Ivan Metla

unread,
Mar 25, 2021, 5:54:22 AM3/25/21
to smook...@googlegroups.com
Yes. You were right before about the version of Smooks.  I used examples from the master branch of the repository https://github.com/smooks/smooks-examples. And only now understood that the master branch used Smooks 2.0.0-M3-SNAPSHOT, I reproduced the exception. When I checkout to the tag v1.0.1(Smooks 2.0.0-M2) the example is working fine.

Smooks 2.0.0-M2 - work fine.
Smooks 2.0.0-M3-SNAPSHOT - threw the exception.

full stack trace:
INFO  2021-03-25 11:41:40,822 [main] org.smooks.cartridges.dfdl.DataProcessorFactory: Compiling and caching DFDL schema...
Exception in thread "main" org.smooks.api.SmooksException: Failed to filter source
at org.smooks.engine.delivery.sax.ng.SaxNgFilter.doFilter(SaxNgFilter.java:118)
at org.smooks.engine.delivery.sax.ng.SaxNgFilter.doFilter(SaxNgFilter.java:89)
at org.smooks.Smooks._filter(Smooks.java:548)
at org.smooks.Smooks.filterSource(Smooks.java:506)
at org.smooks.examples.edi2xml.MainUnparse.runSmooksTransform(MainUnparse.java:83)
at org.smooks.examples.edi2xml.MainUnparse.main(MainUnparse.java:100)
Caused by: org.smooks.api.SmooksException: Error in org.smooks.engine.delivery.interceptor.StreamResultWriterInterceptor while processing visitAfter SAX NG event
at org.smooks.engine.delivery.interceptor.ExceptionInterceptor.processVisitorException(ExceptionInterceptor.java:219)
at org.smooks.engine.delivery.interceptor.ExceptionInterceptor.intercept(ExceptionInterceptor.java:200)
at org.smooks.engine.delivery.interceptor.ExceptionInterceptor.visitAfter(ExceptionInterceptor.java:183)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke(AbstractInterceptorVisitor.java:165)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke(AbstractInterceptorVisitor.java:162)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept(AbstractInterceptorVisitor.java:122)
at org.smooks.engine.delivery.interceptor.StaticProxyInterceptor.visitAfter(StaticProxyInterceptor.java:208)
at org.smooks.engine.delivery.sax.ng.SaxNgHandler.visitAfter(SaxNgHandler.java:314)
at org.smooks.engine.delivery.sax.ng.SaxNgHandler.endElement(SaxNgHandler.java:211)
at org.smooks.engine.delivery.SmooksContentHandler.endElement(SmooksContentHandler.java:126)
at com.ctc.wstx.sr.BasicStreamReader.fireSaxEndElement(BasicStreamReader.java:1801)
at com.ctc.wstx.sax.WstxSAXParser.fireEvents(WstxSAXParser.java:700)
at com.ctc.wstx.sax.WstxSAXParser.parse(WstxSAXParser.java:623)
at org.smooks.engine.delivery.sax.ng.SaxNgParser.parse(SaxNgParser.java:86)
at org.smooks.engine.delivery.sax.ng.SaxNgFilter.doFilter(SaxNgFilter.java:106)
... 5 more
Caused by: org.apache.daffodil.japi.DaffodilUnparseErrorSAXException: Unparse Error: Expected element start event for {}header, but received element end event for {}Order.
Data location was preceding byte 0
at org.apache.daffodil.japi.DaffodilUnparseContentHandler.endDocument(Daffodil.scala:1044)
at org.smooks.cartridges.dfdl.unparser.DfdlUnparser.visitAfter(DfdlUnparser.java:99)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke(AbstractInterceptorVisitor.java:165)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke(AbstractInterceptorVisitor.java:162)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept(AbstractInterceptorVisitor.java:122)
at org.smooks.engine.delivery.interceptor.EventInterceptor.visitAfter(EventInterceptor.java:187)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke(AbstractInterceptorVisitor.java:165)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke(AbstractInterceptorVisitor.java:162)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept(AbstractInterceptorVisitor.java:122)
at org.smooks.engine.delivery.interceptor.TextConsumerInterceptor.visitAfter(TextConsumerInterceptor.java:91)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke(AbstractInterceptorVisitor.java:165)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke(AbstractInterceptorVisitor.java:162)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept(AbstractInterceptorVisitor.java:122)
at org.smooks.engine.delivery.interceptor.StreamResultWriterInterceptor.lambda$intercept$0(StreamResultWriterInterceptor.java:118)
at org.smooks.engine.memento.DefaultMementoCaretaker.stash(DefaultMementoCaretaker.java:107)
at org.smooks.engine.delivery.interceptor.StreamResultWriterInterceptor.intercept(StreamResultWriterInterceptor.java:111)
at org.smooks.engine.delivery.interceptor.StreamResultWriterInterceptor.visitAfter(StreamResultWriterInterceptor.java:76)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke(AbstractInterceptorVisitor.java:165)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke(AbstractInterceptorVisitor.java:162)
at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept(AbstractInterceptorVisitor.java:122)
at org.smooks.engine.delivery.interceptor.ExceptionInterceptor.intercept(ExceptionInterceptor.java:198)
... 18 more

Process finished with exit code 1


--
Regards,
Ivan Metla

AgileVision sp. z o.o.
Software Development Services

Claude Mamo

unread,
Mar 25, 2021, 6:03:02 AM3/25/21
to smook...@googlegroups.com
Understood. The DFDL and EDI unparsers in the 2.0.0-M3 release will operate slightly differently to take advantage of the new streaming capabilities in Apache Daffodil 3.

Claude
 

Ivan Metla

unread,
Mar 25, 2021, 6:29:51 AM3/25/21
to smook...@googlegroups.com
Thank you a lot for your help. Do you have a release date for stable v2?

--
Regards,
Ivan Metla

AgileVision sp. z o.o.
Software Development Services

Claude Mamo

unread,
Mar 25, 2021, 7:03:22 AM3/25/21
to smook...@googlegroups.com
2.0.0-M3 will be the final milestone release so no more major changes after that. Subsequent releases prior to GA will be release candidates (i.e., bug fixes or minor features). As for when Smooks 2 will be GA, I cannot give a definite date but it should be sometime this year.

Claude

Nestor F

unread,
Dec 16, 2021, 5:54:03 AM12/16/21
to Smooks Users
Hi team,

I am trying to unparse XML to EDI with Smooks 2, using a custom dfdl for edifact. With that custom dfdl, I can unparse from xml to edi with daffodil 3.1.0 with no issues.

First I tried modifying example in https://github.com/smooks/smooks-examples/tree/master/edi-to-xml to unparse my xml file. I updated xml file, Main class, smooks-config. It runs with no errors but the result printed in the console is empty.

Second I tried running the example in https://github.com/claudemamo/smooks-xml-to-edi  After updating xml file and dfdl schema file accordingly, I run it and I get a schema error:

INFO  2021-12-16 11:21:11,457 [org.smooks.examples.xml2edi.Main.main()] org.smooks.cartridges.dfdl.DataProcessorFactory: Compiling and caching DFDL schema...
ERROR 2021-12-16 11:21:13,892 [org.smooks.examples.xml2edi.Main.main()] org.smooks.delivery.interceptor.ExceptionInterceptor: Error in org.smooks.delivery.interceptor.WriterInterceptor while processing visitAfter SAX-NG event
org.smooks.SmooksException: Unparse Error: Illegal content for simple element:MeasurementUnitCode
Schema context: MeasurementUnitCode Location line 991 column 26 in file:/tmp/smooks-xml-to-edi/target/classes/edi-to-xml-mapping.dfdl.xsd
        at org.smooks.cartridges.dfdl.unparser.DfdlUnparser.visitAfter(DfdlUnparser.java:83) ~[smooks-dfdl-cartridge-1.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.EventInterceptor$6.invoke(EventInterceptor.java:193) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.EventInterceptor$6.invoke(EventInterceptor.java:190) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.AbstractInterceptorVisitor.intercept(AbstractInterceptorVisitor.java:86) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.EventInterceptor.visitAfter(EventInterceptor.java:190) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.TextConsumerInterceptor$2.invoke(TextConsumerInterceptor.java:83) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.TextConsumerInterceptor$2.invoke(TextConsumerInterceptor.java:80) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.AbstractInterceptorVisitor.intercept(AbstractInterceptorVisitor.java:86) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.TextConsumerInterceptor.visitAfter(TextConsumerInterceptor.java:80) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.WriterInterceptor$1.invoke(WriterInterceptor.java:176) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.WriterInterceptor$1.invoke(WriterInterceptor.java:173) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.AbstractInterceptorVisitor.intercept(AbstractInterceptorVisitor.java:86) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.WriterInterceptor.intercept(WriterInterceptor.java:256) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.WriterInterceptor.visitAfter(WriterInterceptor.java:173) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.ExceptionInterceptor$6.invoke(ExceptionInterceptor.java:175) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.ExceptionInterceptor$6.invoke(ExceptionInterceptor.java:172) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.AbstractInterceptorVisitor.intercept(AbstractInterceptorVisitor.java:86) ~[smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.ExceptionInterceptor.intercept(ExceptionInterceptor.java:226) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.ExceptionInterceptor.visitAfter(ExceptionInterceptor.java:172) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.StaticProxyInterceptor$6.invoke(StaticProxyInterceptor.java:164) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.StaticProxyInterceptor$6.invoke(StaticProxyInterceptor.java:161) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.AbstractInterceptorVisitor.intercept(AbstractInterceptorVisitor.java:86) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.interceptor.StaticProxyInterceptor.visitAfter(StaticProxyInterceptor.java:161) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.sax.ng.SaxNgHandler.visitAfter(SaxNgHandler.java:323) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.sax.ng.SaxNgHandler.endElement(SaxNgHandler.java:222) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.SmooksContentHandler.endElement(SmooksContentHandler.java:123) [smooks-core-2.0.0-M2.jar:?]
        at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) [xercesImpl-2.12.0.jar:?]
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source) [xercesImpl-2.12.0.jar:2.12.0]
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) [xercesImpl-2.12.0.jar:2.12.0]
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) [xercesImpl-2.12.0.jar:2.12.0]
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) [xercesImpl-2.12.0.jar:?]
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) [xercesImpl-2.12.0.jar:?]
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) [xercesImpl-2.12.0.jar:?]
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) [xercesImpl-2.12.0.jar:?]
        at org.smooks.delivery.sax.ng.SaxNgParser.parse(SaxNgParser.java:92) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.sax.ng.SaxNgFilter.doFilter(SaxNgFilter.java:114) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.delivery.sax.ng.SaxNgFilter.doFilter(SaxNgFilter.java:89) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.Smooks._filter(Smooks.java:561) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.Smooks.filterSource(Smooks.java:517) [smooks-core-2.0.0-M2.jar:?]
        at org.smooks.examples.xml2edi.Main.runSmooksTransform(Main.java:82) [classes/:?]
        at org.smooks.examples.xml2edi.Main.main(Main.java:99) [classes/:?]
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:254) [exec-maven-plugin-3.0.0.jar:?]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_281]
Caused by: org.apache.daffodil.processors.unparsers.UnparseError: Unparse Error: Illegal content for simple element:MeasurementUnitCode

All fields are string type with maxLength, I don't see what is wrong with that.

XML fragment:

<Measurements>
<MeasurementAttributeCode>WT</MeasurementAttributeCode>
<MeasuredAttributeCode>T</MeasuredAttributeCode>
<ValueRange>
<MeasurementUnitCode>KGM</MeasurementUnitCode>
<MeasurementValue>4000</MeasurementValue>
</ValueRange>
</Measurements>


Schema fragment:

<xsd:complexType name="MEA">

        <xsd:sequence dfdl:ref="ibmEdiFmt:EDISegmentSequenceFormat">
                <xsd:element name="MeasurementAttributeCode" minOccurs="0">
                        <xsd:simpleType>
                                <xsd:restriction base="xsd:string">
                                        <xsd:maxLength value="3"/>
                                </xsd:restriction>
                        </xsd:simpleType>
                </xsd:element>
                <xsd:element name="MeasuredAttributeCode" minOccurs="0">
                        <xsd:simpleType>
                                <xsd:restriction base="xsd:string">
                                        <xsd:maxLength value="3"/>
                                </xsd:restriction>
                        </xsd:simpleType>
                </xsd:element>
                <xsd:element name="ValueRange" minOccurs="0">

                        <xsd:complexType>
                                <xsd:sequence dfdl:ref="ibmEdiFmt:EDICompositeSequenceFormat">
                                        <xsd:element name="MeasurementUnitCode" minOccurs="0">
                                                <xsd:simpleType>
                                                        <xsd:restriction base="xsd:string">
                                                                <xsd:maxLength value="3"/>
                                                        </xsd:restriction>
                                                </xsd:simpleType>
                                        </xsd:element>
                                        <xsd:element name="MeasurementValue" minOccurs="0">
                                                <xsd:simpleType>
                                                        <xsd:restriction base="xsd:string">
                                                                <xsd:maxLength value="18"/>
                                                        </xsd:restriction>
                                                </xsd:simpleType>

                                        </xsd:element>
                                </xsd:sequence>
                        </xsd:complexType>
                </xsd:element>
        </xsd:sequence>
</xsd:complexType>


Any ideas about what could be wrong? Any dependency version I should try? I am using 2.0.0-M2 for the smooks edi cartridge dependency, tried a couple more versions with no success.

Thanks



Claude

unread,
Dec 16, 2021, 9:44:43 AM12/16/21
to Smooks Users
I suggest you update to 2.0.0-M3 when you can. This version of the EDI cartridge has important performance improvements (see https://github.com/smooks/smooks-edi-cartridge/releases/tag/v2.0.0-M3
and https://github.com/smooks/smooks-dfdl-cartridge/releases/tag/v1.0.0-M3). Keep in mind that 2.0.0-M3 is on Apache Daffodil 3.0; not 3.1. Does your DFDL schema compile with 3.0?

Claude

Nestor F

unread,
Dec 17, 2021, 10:08:56 AM12/17/21
to Smooks Users
As per you comment, I switched to Daffodil 3.0 and again my dfdl schema worked well, both parse and unparse

If I update smooks dependency version from 2.0.0-M2 to 2.0.0-M3, in this example https://github.com/smooks/smooks-examples/tree/master/edi-to-xml

and I run mvn install, I get several "cannot find symbol" errors for several objects: StreamUtils, SmooksException, ExecutionContext, StringResult

I suspect I might need to update the java code for the example I am running, is that it? I am using Java 8.

Claude Mamo

unread,
Dec 17, 2021, 10:22:54 AM12/17/21
to smook...@googlegroups.com
Yes, M3 has several breaking changes as noted here https://github.com/smooks/smooks/releases/tag/v2.0.0-M3 though it should be easy to migrate from M2.

Claude

You received this message because you are subscribed to a topic in the Google Groups "Smooks Users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/smooks-user/Sq8SGOIk6jw/unsubscribe.
To unsubscribe from this group and all its topics, send an email to smooks-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/smooks-user/55e07b69-1036-4a28-bcdc-c1d6ca6be606n%40googlegroups.com.

Claude Mamo

unread,
Dec 17, 2021, 10:26:41 AM12/17/21
to smook...@googlegroups.com
If I update smooks dependency version from 2.0.0-M2 to 2.0.0-M3, in this example https://github.com/smooks/smooks-examples/tree/master/edi-to-xml

Nestor F

unread,
Dec 17, 2021, 2:48:06 PM12/17/21
to Smooks Users

Thanks Claude. I tried again with the newer example version.

Then if I configure smooks unparser like this

<edi:unparser schemaURI="/edifact.dfdl.xsd" />

The output is exactly the same input XML file.

If I configure smooks unparser like the following configuration, then I got an error:

<edi:unparser unparseOnElement="/IFCSUM"  schemaURI="/edifact.dfdl.xsd" />

I also tried this configuration, just in case, and got same error as before.

<edi:unparser unparseOnElement="/"  schemaURI="/edifact.dfdl.xsd" />

Note that the XML file to unparse has a structure like this:

<IFCSUM>
  <InterchangeHeader>
  </InterchangeHeader>
  <MessageGroup>
  </MessageGroup>
  <InterchangeTrailer>
  </InterchangeTrailer>
</IFCSUM>

Error is:

[WARNING]
org.smooks.api.SmooksException: Failed to filter source
    at org.smooks.engine.delivery.sax.ng.SaxNgFilter.doFilter (SaxNgFilter.java:118)
    at org.smooks.engine.delivery.sax.ng.SaxNgFilter.doFilter (SaxNgFilter.java:89)
    at org.smooks.Smooks._filter (Smooks.java:548)
    at org.smooks.Smooks.filterSource (Smooks.java:506)
    at org.smooks.examples.edi2xml.Unparse.runSmooksTransform (Unparse.java:82)
    at org.smooks.examples.edi2xml.Unparse.main (Unparse.java:99)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:748)

Caused by: org.smooks.api.SmooksException: Error in org.smooks.engine.delivery.interceptor.StreamResultWriterInterceptor while processing visitAfter SAX NG event
    at org.smooks.engine.delivery.interceptor.ExceptionInterceptor.processVisitorException (ExceptionInterceptor.java:219)
    at org.smooks.engine.delivery.interceptor.ExceptionInterceptor.intercept (ExceptionInterceptor.java:200)
    at org.smooks.engine.delivery.interceptor.ExceptionInterceptor.visitAfter (ExceptionInterceptor.java:183)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:165)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:162)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept (AbstractInterceptorVisitor.java:122)
    at org.smooks.engine.delivery.interceptor.StaticProxyInterceptor.visitAfter (StaticProxyInterceptor.java:208)
    at org.smooks.engine.delivery.sax.ng.SaxNgHandler.visitAfter (SaxNgHandler.java:314)
    at org.smooks.engine.delivery.sax.ng.SaxNgHandler.endElement (SaxNgHandler.java:211)
    at org.smooks.engine.delivery.SmooksContentHandler.endElement (SmooksContentHandler.java:126)
    at com.ctc.wstx.sr.BasicStreamReader.fireSaxEndElement (BasicStreamReader.java:1801)
    at com.ctc.wstx.sax.WstxSAXParser.fireEvents (WstxSAXParser.java:700)
    at com.ctc.wstx.sax.WstxSAXParser.parse (WstxSAXParser.java:623)
    at org.smooks.engine.delivery.sax.ng.SaxNgParser.parse (SaxNgParser.java:86)
    at org.smooks.engine.delivery.sax.ng.SaxNgFilter.doFilter (SaxNgFilter.java:106)
    at org.smooks.engine.delivery.sax.ng.SaxNgFilter.doFilter (SaxNgFilter.java:89)
    at org.smooks.Smooks._filter (Smooks.java:548)
    at org.smooks.Smooks.filterSource (Smooks.java:506)
    at org.smooks.examples.edi2xml.Unparse.runSmooksTransform (Unparse.java:82)
    at org.smooks.examples.edi2xml.Unparse.main (Unparse.java:99)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:748)
Caused by: org.apache.daffodil.japi.DaffodilUnparseErrorSAXException: Unparse Error: Expected element start event for {}InterchangeHeader, but received element end event for {}IFCSUM.

Data location was preceding byte 0
    at org.apache.daffodil.japi.DaffodilUnparseContentHandler.endDocument (Daffodil.scala:1044)
    at org.smooks.cartridges.dfdl.unparser.DfdlUnparser.visitAfter (DfdlUnparser.java:99)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:165)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:162)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept (AbstractInterceptorVisitor.java:122)
    at org.smooks.engine.delivery.interceptor.EventInterceptor.visitAfter (EventInterceptor.java:187)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:165)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:162)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept (AbstractInterceptorVisitor.java:122)
    at org.smooks.engine.delivery.interceptor.TextConsumerInterceptor.visitAfter (TextConsumerInterceptor.java:91)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:165)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:162)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept (AbstractInterceptorVisitor.java:122)
    at org.smooks.engine.delivery.interceptor.StreamResultWriterInterceptor.lambda$intercept$0 (StreamResultWriterInterceptor.java:118)
    at org.smooks.engine.memento.DefaultMementoCaretaker.stash (DefaultMementoCaretaker.java:107)
    at org.smooks.engine.delivery.interceptor.StreamResultWriterInterceptor.intercept (StreamResultWriterInterceptor.java:111)
    at org.smooks.engine.delivery.interceptor.StreamResultWriterInterceptor.visitAfter (StreamResultWriterInterceptor.java:76)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:165)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:162)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept (AbstractInterceptorVisitor.java:122)
    at org.smooks.engine.delivery.interceptor.ExceptionInterceptor.intercept (ExceptionInterceptor.java:198)
    at org.smooks.engine.delivery.interceptor.ExceptionInterceptor.visitAfter (ExceptionInterceptor.java:183)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:165)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor$VisitAfterInvocation.invoke (AbstractInterceptorVisitor.java:162)
    at org.smooks.engine.delivery.interceptor.AbstractInterceptorVisitor.intercept (AbstractInterceptorVisitor.java:122)
    at org.smooks.engine.delivery.interceptor.StaticProxyInterceptor.visitAfter (StaticProxyInterceptor.java:208)
    at org.smooks.engine.delivery.sax.ng.SaxNgHandler.visitAfter (SaxNgHandler.java:314)
    at org.smooks.engine.delivery.sax.ng.SaxNgHandler.endElement (SaxNgHandler.java:211)
    at org.smooks.engine.delivery.SmooksContentHandler.endElement (SmooksContentHandler.java:126)
    at com.ctc.wstx.sr.BasicStreamReader.fireSaxEndElement (BasicStreamReader.java:1801)
    at com.ctc.wstx.sax.WstxSAXParser.fireEvents (WstxSAXParser.java:700)
    at com.ctc.wstx.sax.WstxSAXParser.parse (WstxSAXParser.java:623)
    at org.smooks.engine.delivery.sax.ng.SaxNgParser.parse (SaxNgParser.java:86)
    at org.smooks.engine.delivery.sax.ng.SaxNgFilter.doFilter (SaxNgFilter.java:106)
    at org.smooks.engine.delivery.sax.ng.SaxNgFilter.doFilter (SaxNgFilter.java:89)
    at org.smooks.Smooks._filter (Smooks.java:548)
    at org.smooks.Smooks.filterSource (Smooks.java:506)
    at org.smooks.examples.edi2xml.Unparse.runSmooksTransform (Unparse.java:82)
    at org.smooks.examples.edi2xml.Unparse.main (Unparse.java:99)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:748)
   
   

Nestor F

unread,
Dec 17, 2021, 2:53:25 PM12/17/21
to Smooks Users
PS: Parsing edi works just fine from the same example code and same dfdl schema.

Nestor F

unread,
Dec 20, 2021, 7:02:37 AM12/20/21
to Smooks Users
Finally I got the unparse operation working. I added the smooks-dfdl-cartridge dependency and used Ivan's code in https://groups.google.com/g/smooks-user/c/GJtr3bNS5vA/m/p-E36jvkFAAJ (I noticed he had found a very similar error)

I had initially assumed it would work just by replacing the smooks config in the edi-to-xml example, but it didn't.

Reply all
Reply to author
Forward
0 new messages