Apache Daffodil 2.2.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" % "2.2.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

Daffodil 2.2.0 is the second release of Daffodil as an Apache incubator project. This release includes numerous bug fixes and DFDL feature additions to support more DFDL schemas.

New Features


A experimental DFDL language feature known as layering has been added to Daffodil. This feature has been discussed for future inclusion in the DFDL standard by the DFDL working group. The syntax of the properties is subject to some change in the future. The layering feature is described at Data Layering.

Message Streaming API

Daffodil's parser API has been enhanced to allow parsing of unbounded streams of messages, symmetric with the Daffodil unparser. The API enables calling the parse method repeatedly on the same data stream so as to parse one data element (typically a message, but could be any DFDL-described element) at a time from the stream. In prior releases, Daffodil had only a parse API that expected data for the parse to consume the entire data stream.

The Command Line Interface (CLI) now has options (--stream) for driving the parser in streaming mode.

Documentation for this API is in the SAPI - Scala API package, or for Java users in the JAPI - Java API package overview.

Scala 2.12 Support and Library Dependencies Updated

Daffodil now supports both Scala 2.11 and Scala 2.12. Most testing is now done on Scala 2.12 with only occasional regression checking done on Scala 2.11. Support for Scala 2.11 will eventually be elminated in a future release.

In addition, Daffodil depends on a number of other libraries. These have been updated to using the latest available versions of those libraries.

Zoned Decimal Text Numbers and Packed Decimal Calendars

Support for the dfdl:textNumberRep of zoned has been added along with the related DFDL properties that specify zoned-number format.

Also, for the dfdl:binaryCalendarRep property, in addition to standard, values of bcd, packed, and ibm4690Packed to support Binary Coded Decimal, IBM 390 Packed Decimal, and IBM 4690 Packed Decimal, respectively are supported.


As of 2.2.0, the following changes have been made which affect compatibility with past releases:

DFDLGeneralFormat.dfdl.xsd changes

This DFDL schema is used as a starting point by many schemas. Some changes to it can lead to incompatibilities.

Property dfdl:calendarTimeZone - was "UTC" now "" (empty string, meaning unknown time zone). This change often results in Infoset data that does not have the UTC time zone suffix +00:00 appended to it unless a time-zone was specified in the parsed data. In prior releases this suffix would have generally been appended, which was surprising, and deemed incorrect by users.

Property dfdl:occursCountKind - was parsed now implicit. With implicit the number of element occurrences that will be parsed ends when maxOccurs is reached. This is generally desirable, especially for optional elements (minOccurs="0, maxOccurs="1) where users found it unintuitive that such an element could end up as an array of more than one occurrance. In prior releases the dfdl:occursCountKind was parsed, which instructs Daffodil to continue parsing as many instances as it can find, and to stop accumulating them only when it is unable to successfully parse another.

Property dfdl:textNumberRoundingMode - was roundUnnecessary now roundHalfEven. This change should be compatible, and was necessary due to an update of the underlying ICU libraries used by Daffodil. The behavior of that library with respect to rounding modes was fixed, allowing us to change the rounding mode to the more reasonable roundHalfEven behavior.

The maxOccursBound limit

Prior Daffodil releases had a very small limit on the number of repeating occurrences an element could have, 1024, which was not being checked in some cases. It is now checked in all cases; however, with this checking it was discovered that many schemas break on this small limit. The limit was changed to Int.MaxValue (maximum positive value of a 32-bit integer), and must be tuned downward by users who wish to catch situations where there are an excessive number of repeats much larger than is reasonable for the data described by their DFDL schema. In addition, rather than a Parse Error, which causes backtracking, exceeding this tuned value will result in a runtime Schema Definition Error - which halts processing. If desired, in a DFDL Schema, a Parse Error can still be obtained by way of a dfdl:assert statement on the recurring element which tests that the dfdl:occursIndex() is less than the desired maximum bound.

The suppressSchemaDefinitionWarnings Tunable

Some schemas produce large number of schema definition warnings, and it is desirable to tolerate, and suppress these. The name of the tunable is now suppressSchemaDefinitionWarnings. Prior releases used suppressWarnings which was inconsistent with the API-level access names/symbols for the same concept.

TDML Runner Enhancements

The TDML Runner was enhanced to eliminate some false-positive test situations. Specifically it now requires controlled selections on round-trip testing. The TDML defaultRoundTrip and roundTrip attributes can now take on the values none, onePass, twoPass, or threePass. The values false and true are also accepted for compatibility and correspond to none and onePass respectively. This change reduces the number of false-positive tests which should be failing, but which pass because multiple-passes were used automatically. Please see the Test Data Markup Language (TDML) page.

Additional Changes


Bugs Fixed

Other Miscellaneous