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

Poor handling of missing source attribute on <xs:appinfo> element

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.1.0
    • 2.3.0
    • Diagnostics
    • None

    Description

      When an appinfo element is present inside an empty sequence inside of a choice, and said appinfo element is missing its source attribute, Daffodil crashes instead of producing a useful error message.

       

      A complete schema is attached, but the relevent section is:

       

      <xs:element name="a">
      <xs:complexType>
      <xs:choice>
      <xs:sequence>
      <xs:annotation>
      <!--
      <xs:appinfo source="http://www.ogf.org/dfdl/">
      -->
      <xs:appinfo>
      <dfdl:discriminator testKind="pattern" testPattern="."/>
      </xs:appinfo>
      </xs:annotation>
      </xs:sequence>
      </xs:choice>
      </xs:complexType>
      </xs:element>

      Actual Output:

      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      !! An unexpected exception occurred. This is a bug! !!
      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      Please report this bug and help us fix it:

      https://daffodil.apache.org/community/#issue-tracker

      Please include the following exception, the command you
      ran, and any input, schema, or tdml files used that led
      to this bug.

      org.apache.daffodil.oolag.CircularDefinition: OOLAG Cycle (of 2) through groupMembers@253380088, groupMembers@253380088
      at org.apache.daffodil.oolag.OOLAG$OOLAGValueBase.oolagBefore(OOLAG.scala:492)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.liftedTree1$1(OOLAG.scala:584)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value$lzycompute(OOLAG.scala:583)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value(OOLAG.scala:581)
      at org.apache.daffodil.dsom.GroupDefLike$class.groupMembers(GroupDef.scala:70)
      at org.apache.daffodil.dsom.Choice.groupMembers$lzycompute(ChoiceGroup.scala:267)
      at org.apache.daffodil.dsom.Choice.groupMembers(ChoiceGroup.scala:267)
      at org.apache.daffodil.dsom.ModelGroup.sequenceChildren$lzycompute(ModelGroup.scala:201)
      at org.apache.daffodil.dsom.ModelGroup.sequenceChildren(ModelGroup.scala:201)
      at org.apache.daffodil.dsom.ModelGroup$$anonfun$sequencePeers$1.apply(ModelGroup.scala:161)
      at org.apache.daffodil.dsom.ModelGroup$$anonfun$sequencePeers$1.apply(ModelGroup.scala:161)
      at org.apache.daffodil.dsom.ModelGroup.sequencePeers$lzycompute(ModelGroup.scala:161)
      at org.apache.daffodil.dsom.ModelGroup.sequencePeers(ModelGroup.scala:161)
      at org.apache.daffodil.dsom.SequenceTermBase.myPeers$lzycompute(SequenceGroup.scala:54)
      at org.apache.daffodil.dsom.SequenceTermBase.myPeers(SequenceGroup.scala:54)
      at org.apache.daffodil.dsom.ModelGroup$$anonfun$prettyIndex$1.apply(ModelGroup.scala:147)
      at org.apache.daffodil.dsom.ModelGroup$$anonfun$prettyIndex$1.apply(ModelGroup.scala:152)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.liftedTree1$1(OOLAG.scala:585)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value$lzycompute(OOLAG.scala:583)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value(OOLAG.scala:581)
      at org.apache.daffodil.dsom.ModelGroup.prettyIndex(ModelGroup.scala:152)
      at org.apache.daffodil.dsom.ModelGroup.diagnosticDebugName$lzycompute(ModelGroup.scala:155)
      at org.apache.daffodil.dsom.ModelGroup.diagnosticDebugName(ModelGroup.scala:155)
      at org.apache.daffodil.dsom.SchemaComponent$class.toString(SchemaComponent.scala:180)
      at org.apache.daffodil.dsom.ModelGroup.toString(ModelGroup.scala:129)
      at org.apache.daffodil.exceptions.SchemaFileLocation.<init>(SchemaFileLocatable.scala:52)
      at org.apache.daffodil.exceptions.SchemaFileLocatable$class.schemaFileLocation(SchemaFileLocatable.scala:131)
      at org.apache.daffodil.dsom.ModelGroup.schemaFileLocation$lzycompute(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.ModelGroup.schemaFileLocation(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.ImplementsThrowsOrSavesSDE$class.SDW(SDE.scala:190)
      at org.apache.daffodil.dsom.ModelGroup.SDW(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.AnnotatedMixin$$anonfun$11.apply(AnnotatedSchemaComponent.scala:288)
      at org.apache.daffodil.dsom.AnnotatedMixin$$anonfun$11.apply(AnnotatedSchemaComponent.scala:284)
      at scala.collection.TraversableLike$$anonfun$filterImpl$1.apply(TraversableLike.scala:248)
      at scala.collection.Iterator$class.foreach(Iterator.scala:893)
      at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
      at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
      at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
      at scala.collection.TraversableLike$class.filterImpl(TraversableLike.scala:247)
      at scala.collection.TraversableLike$class.filter(TraversableLike.scala:259)
      at scala.collection.AbstractTraversable.filter(Traversable.scala:104)
      at org.apache.daffodil.dsom.AnnotatedMixin$class.dfdlAppInfos(AnnotatedSchemaComponent.scala:284)
      at org.apache.daffodil.dsom.ModelGroup.dfdlAppInfos$lzycompute(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.ModelGroup.dfdlAppInfos(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.AnnotatedMixin$class.annotationObjs(AnnotatedSchemaComponent.scala:325)
      at org.apache.daffodil.dsom.ModelGroup.annotationObjs$lzycompute(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.ModelGroup.annotationObjs(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.AnnotatedMixin$$anonfun$formatAnnotation$1.apply(AnnotatedSchemaComponent.scala:355)
      at org.apache.daffodil.dsom.AnnotatedMixin$$anonfun$formatAnnotation$1.apply(AnnotatedSchemaComponent.scala:354)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.liftedTree1$1(OOLAG.scala:585)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value$lzycompute(OOLAG.scala:583)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value(OOLAG.scala:581)
      at org.apache.daffodil.dsom.AnnotatedMixin$class.formatAnnotation(AnnotatedSchemaComponent.scala:354)
      at org.apache.daffodil.dsom.ModelGroup.formatAnnotation$lzycompute(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.ModelGroup.formatAnnotation(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.AnnotatedSchemaComponent$class.nonDefaultFormatChain(AnnotatedSchemaComponent.scala:207)
      at org.apache.daffodil.dsom.ModelGroup.nonDefaultFormatChain$lzycompute(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.ModelGroup.nonDefaultFormatChain(ModelGroup.scala:129)
      at org.apache.daffodil.dsom.AnnotatedSchemaComponent$class.findPropertyOptionThisComponentOnly(AnnotatedSchemaComponent.scala:255)
      at org.apache.daffodil.dsom.SequenceDefMixin$class.hiddenGroupRefOption(SequenceGroup.scala:280)
      at org.apache.daffodil.dsom.Sequence.hiddenGroupRefOption$lzycompute(SequenceGroup.scala:287)
      at org.apache.daffodil.dsom.Sequence.hiddenGroupRefOption(SequenceGroup.scala:287)
      at org.apache.daffodil.dsom.ModelGroupFactory$.apply(ModelGroup.scala:53)
      at org.apache.daffodil.dsom.TermFactory$.apply(ModelGroup.scala:117)
      at org.apache.daffodil.dsom.GroupDefLike$$anonfun$groupMembers$1$$anonfun$apply$2.apply(GroupDef.scala:80)
      at org.apache.daffodil.dsom.GroupDefLike$$anonfun$groupMembers$1$$anonfun$apply$2.apply(GroupDef.scala:78)
      at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
      at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
      at scala.collection.immutable.List.foreach(List.scala:381)
      at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
      at scala.collection.immutable.List.flatMap(List.scala:344)
      at org.apache.daffodil.dsom.GroupDefLike$$anonfun$groupMembers$1.apply(GroupDef.scala:78)
      at org.apache.daffodil.dsom.GroupDefLike$$anonfun$groupMembers$1.apply(GroupDef.scala:70)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.liftedTree1$1(OOLAG.scala:585)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value$lzycompute(OOLAG.scala:583)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value(OOLAG.scala:581)
      at org.apache.daffodil.dsom.GroupDefLike$class.groupMembers(GroupDef.scala:70)
      at org.apache.daffodil.dsom.Choice.groupMembers$lzycompute(ChoiceGroup.scala:267)
      at org.apache.daffodil.dsom.Choice.groupMembers(ChoiceGroup.scala:267)
      at org.apache.daffodil.dsom.ModelGroup.elementChildren$lzycompute(ModelGroup.scala:178)
      at org.apache.daffodil.dsom.ModelGroup.elementChildren(ModelGroup.scala:177)
      at org.apache.daffodil.dsom.ElementBase$class.elementChildren(ElementBase.scala:578)
      at org.apache.daffodil.dsom.AbstractElementRef.elementChildren$lzycompute(ElementRef.scala:33)
      at org.apache.daffodil.dsom.AbstractElementRef.elementChildren(ElementRef.scala:33)
      at org.apache.daffodil.dsom.ElementBase$class.checkParseUnparsePolicyCompatibility(ElementBase.scala:1156)
      at org.apache.daffodil.dsom.AbstractElementRef.checkParseUnparsePolicyCompatibility(ElementRef.scala:33)
      at org.apache.daffodil.compiler.ProcessorFactory.x$2$lzycompute(Compiler.scala:89)
      at org.apache.daffodil.compiler.ProcessorFactory.x$2(Compiler.scala:82)
      at org.apache.daffodil.compiler.ProcessorFactory.generateUnparser$lzycompute(Compiler.scala:82)
      at org.apache.daffodil.compiler.ProcessorFactory.generateUnparser(Compiler.scala:82)
      at org.apache.daffodil.compiler.ProcessorFactory$$anonfun$unparser$1.apply(Compiler.scala:104)
      at org.apache.daffodil.compiler.ProcessorFactory$$anonfun$unparser$1.apply(Compiler.scala:103)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.liftedTree1$1(OOLAG.scala:585)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value$lzycompute(OOLAG.scala:583)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value(OOLAG.scala:581)
      at org.apache.daffodil.compiler.ProcessorFactory.unparser$lzycompute(Compiler.scala:103)
      at org.apache.daffodil.compiler.ProcessorFactory.unparser(Compiler.scala:103)
      at org.apache.daffodil.compiler.ProcessorFactory$$anonfun$4.apply(Compiler.scala:123)
      at org.apache.daffodil.compiler.ProcessorFactory$$anonfun$4.apply(Compiler.scala:123)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.liftedTree1$1(OOLAG.scala:585)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value$lzycompute(OOLAG.scala:583)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value(OOLAG.scala:581)
      at org.apache.daffodil.oolag.OOLAG$OOLAGValue.valueAsAny(OOLAG.scala:579)
      at org.apache.daffodil.oolag.OOLAG$OOLAGHost$$anonfun$checkErrors$2.apply$mcV$sp(OOLAG.scala:287)
      at org.apache.daffodil.oolag.OOLAG$OOLAGHost$$anonfun$checkErrors$2.apply(OOLAG.scala:287)
      at org.apache.daffodil.oolag.OOLAG$OOLAGHost$$anonfun$checkErrors$2.apply(OOLAG.scala:287)
      at org.apache.daffodil.oolag.OOLAG$.keepGoing(OOLAG.scala:60)
      at org.apache.daffodil.oolag.OOLAG$OOLAGHost$class.checkErrors(OOLAG.scala:287)
      at org.apache.daffodil.oolag.OOLAG$OOLAGHost$class.isError(OOLAG.scala:346)
      at org.apache.daffodil.compiler.ProcessorFactory.org$apache$daffodil$compiler$ProcessorFactory$$super$isError(Compiler.scala:137)
      at org.apache.daffodil.compiler.ProcessorFactory$$anonfun$isError$1$$anonfun$apply$mcZ$sp$2.apply$mcZ$sp(Compiler.scala:137)
      at org.apache.daffodil.compiler.ProcessorFactory$$anonfun$isError$1$$anonfun$apply$mcZ$sp$2.apply(Compiler.scala:128)
      at org.apache.daffodil.compiler.ProcessorFactory$$anonfun$isError$1$$anonfun$apply$mcZ$sp$2.apply(Compiler.scala:128)
      at org.apache.daffodil.oolag.OOLAG$.keepGoing(OOLAG.scala:60)
      at org.apache.daffodil.compiler.ProcessorFactory$$anonfun$isError$1.apply$mcZ$sp(Compiler.scala:128)
      at org.apache.daffodil.compiler.ProcessorFactory$$anonfun$isError$1.apply(Compiler.scala:128)
      at org.apache.daffodil.compiler.ProcessorFactory$$anonfun$isError$1.apply(Compiler.scala:128)
      at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
      at org.apache.daffodil.ExecutionMode$$anonfun$usingCompilerMode$1.apply(ExecutionMode.scala:64)
      at org.apache.daffodil.ExecutionMode$$anonfun$usingCompilerMode$1.apply(ExecutionMode.scala:64)
      at org.apache.daffodil.compiler.ProcessorFactory.isError(Compiler.scala:128)
      at org.apache.daffodil.compiler.Compiler.compileSource(Compiler.scala:333)
      at org.apache.daffodil.Main$$anonfun$71.apply(Main.scala:712)
      at org.apache.daffodil.Main$$anonfun$71.apply(Main.scala:711)
      at org.apache.daffodil.util.Timer$.getTimeResult(Timer.scala:76)
      at org.apache.daffodil.util.Timer$.getResult(Timer.scala:35)
      at org.apache.daffodil.Main$.createProcessorFromSchema(Main.scala:711)
      at org.apache.daffodil.Main$.run(Main.scala:824)
      at org.apache.daffodil.Main$.main(Main.scala:1297)
      at org.apache.daffodil.Main.main(Main.scala)

      Attachments

        1. test.dfdl.xsd
          2 kB
          Brandon Sloane

        Activity

          People

            dfthompson Dave Thompson
            brandon.sloane Brandon Sloane
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: