Steve Lawrence created DAFFODIL-2992:
----------------------------------------
Summary: Support embedding dependencies in saved parsers
Key: DAFFODIL-2992
URL: https://issues.apache.org/jira/browse/DAFFODIL-2992
Project: Daffodil
Issue Type: Bug
Reporter: Steve Lawrence
A common headache is building a saved parser that depends on charset, UDF, or
layer plugins, and then making sure that plugin is made available on the
classpath when that saved parser is reloaded. It is not a trivial task, and is
easy to mess up. We should come up with a way to make this much easier and less
error prone.
One approach is to change the format our our saved parser so that instead of
just containing the serialized parser, it is a zip file the contains the
serialized parser as well as any plugins and dependencies.
When the saved parser is reloaded, it could then extract the dependencies and
make them available via a custom class loader.
One benefit of this is that different saved parsers could have different
versions of the same plugin, since the classloader can keep that all separate.
Interactions with the ServiceLoader may add complications.
One issue is how to define which jars should be added, since not all jars want
to be embedded, just plugin jars. Other jars, like schema jars or daffodil jars
should not be included.
Maybe with the CLI it must be done manually with a new option to the save
parser command, e.g.
daffodil save-parser -s foo.dfdl.xsd -j charset.jar -j layer.jar foo.bin
Alternatively, now that the daffodil SBT plugin is more common, we could
potentially add logic in that to scan libraryDependencies and add those when
using "sbt daffodilPackageBin". It's not clear how to filter out schema jars
and only get charset jars.
The DataProcessor.save API probably wants to change so that it can accept a
list of additional jars to embed.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)