Compile DFDL schemas into ProcessorFactory's or reload saved parsers into DataProcessor's.
Information related to a location in data
Compiled version of a DFDL Schema, used to parse data and get the DFDL infoset
Class containing diagnostic information
This exception will be thrown as a result of attempting to reload a saved parser that is invalid (not a parser file, corrupt, etc.
This exception will be thrown as a result of an invalid usage of the Daffodil API
Information related to locations in DFDL schema files
Result of calling long), containing the resulting infoset, any diagnostic information, and the final data location
Factory to create DataProcessor's, used for parsing data
Abstract class that adds diagnostic information to classes that extend it.
Factory object to create a Compiler and set global configurations
Validation modes for validating the resulting infoset against the DFDL schema
Provides the classes necessary to perform parse tracing or create a custom debugger
Provides the classes necessary to recieve logging messages from Daffodil.
Provides the classes necessary to compile DFDL schemas, parse and unparse files using the compiled objects, and retrieve results and parsing diagnostics
Overview
The main class to use is Daffodil to create a Compiler:
val c = Daffodil.compiler()
This can then be used to compiled a DFDL schema, and generate a ProcessorFactory:
val pf = c.compileFile(file)
This can then be used to create a DataProcessor:
This can then be used to parse data, returning a ParseResult, which contains the DFDL infoset in either a jdom2 Document or a scala XML Node:
The DataProcessor.parse(java.nio.channels.ReadableByteChannel) method may be called multiple times without the need to create another data processors. For example:
Failures & Diagnostics
It is possible that failures could occur during the creation of the ProcessorFactory, DataProcessor, or ParseResult. However, rather than throwing an exception on error (e.g. invalid DFDL schema, parse error, etc), these classes extend WithDiagnostics, which is used to determine if an error occured, and any diagnostic information (see Diagnostic) related to the step. thus, before contining, one must check WithDiagnostics#isError. For example:
Saving & Reloading Parsers
In some cases, it may be beneficial to save a parser and reload it. For example, when starting up, it may be quicker to reload an already compiled parser than to compile it from scratch. To save a DataProcessor:
And to restore a saved DataProcessor: