[ 
https://issues.apache.org/jira/browse/DAFFODIL-2562?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17419330#comment-17419330
 ] 

Mike Beckerle commented on DAFFODIL-2562:
-----------------------------------------

Note: there is a workaround for this for users.

You change the choice branch that has the optional element at the end into 
itself a choice of two branches. One having the "formerly optional" element as 
a required element, along with a dfdl:discriminator that contains the 
occursCount expression as its predicate. The second branch of this new choice 
is the same structure, but without the "formerly optional" element. 

So the optionality is implemented by a choice of a sequence with, and another 
shorter sequence without that element. 

> Optional element at end of choice branch triggers unparse error
> ---------------------------------------------------------------
>
>                 Key: DAFFODIL-2562
>                 URL: https://issues.apache.org/jira/browse/DAFFODIL-2562
>             Project: Daffodil
>          Issue Type: Bug
>          Components: Back End
>    Affects Versions: 3.2.0
>            Reporter: Josh Adams
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> 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.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to