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

Optional element at end of choice branch triggers unparse error

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.2.0
    • 3.5.0
    • Back End
    • None

    Description

      Given the following schema:

      {{ <xs:group name="groupOfChoice">
      <xs:sequence>
      <xs:element name="key" type="xs:string" dfdl:lengthKind="explicit" dfdl:length="1" />
      <xs:choice dfdl:choiceDispatchKey="

      { ./ex:key }

      ">
      <xs:sequence dfdl:choiceBranchKey="a">
      <xs:element name="elt_a" type="xs:string" dfdl:lengthKind="explicit" dfdl:length="3" />
      </xs:sequence>
      <xs:sequence dfdl:choiceBranchKey="b">
      <xs:element name="elt_b" type="xs:string" dfdl:lengthKind="explicit" dfdl:length="3" />
      <xs:element name="elt_c" type="xs:string" dfdl:lengthKind="explicit" dfdl:length="3"
      minOccurs="0" maxOccurs="1" dfdl:occursCountKind="expression" dfdl:occursCount="

      { if (fn:exists(../ex:elt_b)) then 1 else 0 }

      " />
      </xs:sequence>
      </xs:choice>
      </xs:sequence>
      </xs:group>}}

      During unparse, the element following this group (the next element after elt_c) will have an invalid ERD and will trigger an unparse error.

      I've spent a fair amount of time looking at this, but was unable to find the root cause of this issue. I'm thinking that it must be something where the various stacks tracking the current element and next element are some how getting out of sync and when we are looking for the element after elt_c, Daffodil still thinks it is withing the choice containing elt_c.

      I will open a pull request with the test for this bug.

      Attachments

        Activity

          People

            Unassigned Unassigned
            jadams_tresys Josh Adams
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 20m
                20m