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. Checksums (SHA256, SHA512) are also provided as alternative verification methods.
A new extension is added to support custom DFDL expression functions written in
Java or Scala. To add new functions, the UserDefinedFunctionProvider and
UserDefinedFunction interfaces must be implemented, compiled into a jar, and
added to the classpath. Once defined, the function can then be called just like
a normal DFDL expression function, such as
For more information on usage, see the User Defined Function
A new extension is added to support Binary Large Objects. Setting an element
xs:anyURI and setting the DFDL property
dfdlx:objectKind="bytes" will cause Daffodil to write the bytes associated
with the element to a file rather than to the infoset. The URI to the file is
stored in the infoset. The function
setBlobAttributes is added to the
InfosetOutputter to support changing the directory and name of these BLOB
Add support for unordered sequences via the
property. See section 14.3 of the DFDL specification for more information on
the behavior of unordered sequences.
During parsing, Daffodil stores the data stream in a cache to allow for backtracking. However, when streaming very large files that might need to backtrack long distances it is possible that the cache could outgrow the size of the heap, resulting in out of memory errors. In the majority of these cases, although possible, a parse would never actually need to backtrack that far, so we hold on to memory unnecessarily. New parameters are added to the input stream to support the ability to limit the maximum size of this cache. Daffodil will throw away old data when this limit is reached, and will only error if trying to backtrack to the discarded data.
During unparsing, in some circumstances it was possible for Daffodil to cache
unparsed data that could reach a 2GB+ limit and cause an out of memory error.
To prevent this error, each unparse cache will store a maximum amount in memory
(defined by the
maxByteArrayOutputStreamBufferSizeInBytes tunable). When
this maximum value is reached, Daffodil will switch to writing to a temporary
file (defined by the
tempFilePath tunable). Eventually, the contents of the
file will be written to the unparse data stream in chunks (defined by the
With these changes and BLOB support, handling large files, including those greater than 2GB is possible.
Improvements were made to the TDML runner, including API updates to support use in Java, and improved output on failures.
Multiple infrastructure changes were made, including support for GitHub Actions continuous integration, Windows CI tests, a new container based system for creating releases, and website updates.
Many non-functional changes were made, including improved internal type-safety, improved separation of runtime objects to support different runtimes in the future, initial changes to improve schema compilation speed, and other miscellaneous improvements.
The following changes have been made which may affect compatibility with past releases: