Uploaded image for project: 'Daffodil'
  1. Daffodil
  2. DAFFODIL-2072

Poor reporting of schema errors when used as library

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 2.3.0
    • 3.6.0
    • API

    Description

      When used as a library, Daffodil does not produce a meaningfull error when provided with an invalid schema file.

      Consider the following Scala program (Main.scala):

      package com.tresys.test

      import org.apache.daffodil.sapi.Daffodil
      import org.apache.daffodil.sapi.Compiler
      import org.apache.daffodil.util.Misc
      import org.apache.daffodil.sapi.ProcessorFactory
      import org.apache.daffodil.sapi.DataProcessor
      import org.apache.daffodil.api.URISchemaSource

      object Main extends App {
      override def main(args: Array[String]): Unit =

      Unknown macro: { val dfdlCompiler}

      }

      The relevent portion of test.dfdl.xsd is:

      <xs:element name="top" type="tns:nonexistant" />

      where tns:nonexistant is never defined.

      Executing Main.scala produces the following error:

      Exception in thread "main" org.apache.daffodil.exceptions.Abort: Usage error: ProcessorFactory.this.isError.unary_!
      org.apache.daffodil.exceptions.Assert$.abort(Assert.scala:129)
      org.apache.daffodil.compiler.ProcessorFactory.$anonfun$onPath$1(Compiler.scala:131)
      scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
      org.apache.daffodil.ExecutionMode$.$anonfun$usingCompilerMode$1(ExecutionMode.scala:64)
      at org.apache.daffodil.exceptions.Assert$.abort(Assert.scala:129)
      at org.apache.daffodil.compiler.ProcessorFactory.$anonfun$onPath$1(Compiler.scala:131)
      at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
      at org.apache.daffodil.ExecutionMode$.$anonfun$usingCompilerMode$1(ExecutionMode.scala:64)
      at org.apache.daffodil.compiler.ProcessorFactory.onPath(Compiler.scala:130)
      at org.apache.daffodil.sapi.ProcessorFactory.onPath(Daffodil.scala:273)
      at com.tresys.test.Main$.main(Main.scala:16)
      at com.tresys.test.Main.main(Main.scala)

      For reference, using the CLI produces the following (good) error:

      [error] Schema Definition Error: Error loading schema due to org.xml.sax.SAXParseException; systemId: file:/home/bsloane/workspace/Test/src/test.dfdl.xsd; lineNumber: 35; columnNumber: 51; src-resolve: Cannot resolve the name 'tns:nonexistant' to a 'type definition' component.
      Schema context: file:/home/bsloane/workspace/Test/src/test.dfdl.xsd Location in file:??

      Attachments

        1. Main.scala
          0.6 kB
          Brandon Sloane
        2. test.dfdl.xsd
          2 kB
          Brandon Sloane

        Activity

          People

            okilo@tresys.com Olabusayo Kilo
            brandon.sloane Brandon Sloane
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: