def run()

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
  }