Apache Daffodil 3.4.0


Javadoc | Scaladoc

Get Release



The above release files should be verified using the PGP signatures and the project release KEYS. See verification instructions for a description of using the PGP and KEYS files for verification. A SHA512 checksum is also provided as an alternative verification method.

libraryDependencies += "org.apache.daffodil" %% "daffodil-sapi" % "3.4.0"
Create the file /etc/yum.repos.d/apache-daffodil.repo with the following content:
name=Apache Daffodil
Run the folllowing command:
sudo dnf install apache-daffodil

Release Notes

EXI Support

The Daffodil CLI adds two new infoset types–-I exi and -I exisa–to support infosets represented as EXI binary XML for non-schema aware and schema aware EXI, respectively. EXI infosets are significantly smaller in size than normal XML infosets, and are often even smaller than the original data format when made schema aware. The Daffodil CLI has added the Exificient library to support these infoset types.

API users can create EXI files by combining the existing SAXInfosetInputter and SAXInfosetOutputter classes with the Exificient SAX API or they can use the Agile Delta EXI SAX API which has been tested with Daffodil as well. Daffodil has added the new DaffodilXMLEntityResolver class to its Java and Scala public APIs to support creating schema aware EXI files too.

Pluggable Character Sets

Custom character sets can now be added to Daffodil by implementing a custom BitsCharsetDefinition class and related functions/classes, listing it in a META-INF/services file, packaging it into a jar, and adding it to the Daffodil classpath.

Embedded XML in the Infoset

When using the XMLTextInfosetInputter and XMLTextInfosetOutputter classes in the API, or -I xml in the CLI, simple string elements with the DFDL extension attribute dfdlx:runtimeProperties="stringAsXml=true" are treated as XML. This means that when parsing, instead of outputting the content as an XML escaped string, the parsed content is checked to be valid XML and output as if it were part of the XML infoset. When unparsing, the embedded XML part of the infoset is converted back to a string. Note that because there are multiple ways to read and write XML that are syntactically different but semantically the same, it is possible that parsed or unparsed data may differ from the original data.

C Code Generator Updates

The C code generator backend now supports reading and writing N-bit booleans and integers, where N is an explicit length from 1 to 64 bits. Additional miscellaneous changes include unit test support, fixes to nested choices, tweaks to how float numbers are output, and a command line option to choose the TDML implementation to run TDML tests.

Additional New Features/Improvements

Miscellaneous Bug Fixes


Dependency Changes

The following dependencies have been added or updated:


Command Line Interface

Schematron Validator


Changes to Transitive Dependencies