in daffodil-cli/src/main/scala/org/apache/daffodil/cli/Main.scala [2004:2076]
def run(arguments: Array[String]): ExitCode.Value = {
val ret =
try {
// Initialize the log level to Level.WARN in case we log anything before
// succesfully parsing command line arguments and setting the log level
setLogLevel(0)
runIgnoreExceptions(arguments)
} catch {
case s: scala.util.control.ControlThrowable => throw s
case e: java.io.FileNotFoundException => {
Logger.log.error(Misc.getSomeMessage(e).get)
ExitCode.FileNotFound
}
case e: java.nio.file.NoSuchFileException => {
Logger.log.error(Misc.getSomeMessage(e).get + " (No such file or directory)")
ExitCode.FileNotFound
}
case e: ExternalVariableException => {
Logger.log.error(Misc.getSomeMessage(e).get)
ExitCode.BadExternalVariable
}
case e: BindingException => {
Logger.log.error(Misc.getSomeMessage(e).get)
ExitCode.BadExternalVariable
}
case e: NotYetImplementedException => {
nyiFound(e)
ExitCode.NotYetImplemented
}
case e: TDMLException => {
Logger.log.error(Misc.getSomeMessage(e).get)
ExitCode.TestError
}
case e: OutOfMemoryError => {
oomError(e)
ExitCode.OutOfMemory
}
case e: UserDefinedFunctionFatalErrorException => {
Logger.log.error(Misc.getSomeMessage(e).get)
e.cause.getStackTrace.take(10).foreach { ste =>
Logger.log.error(s" at ${ste}")
}
ExitCode.UserDefinedFunctionError
}
case e: DebuggerExitException => {
ExitCode.Failure
}
case e: ScallopExitException => {
ExitCode(e.exitCode)
}
case e: GenericScallopException => {
Logger.log.error(e.message)
ExitCode.Usage
}
case e: DaffodilConfigException => {
Logger.log.error(e.message)
ExitCode.ConfigError
}
case e: LayerFatalException => {
Logger.log.error(e.getMessage, e)
ExitCode.LayerExecutionError
}
case e: Exception => {
bugFound(e)
ExitCode.BugFound
}
} finally {
// now that we are done we can remove the ThreadLocal that was set for
// CLI thread specific logging
daffodilLogger.removeThreadLoggerConfig()
}
ret
}