Details
Description
In a case where a collection that's expected to be the last part of an element's content is followed by another element, the error message "Expected end tag, found start tag..." is generated but identifies the first child element of the unexpected element. Here's the binding:
<mapping class="cap.data.DataSet" extends="cap.data.Rule" name="DataSet">
<structure map-as="cap.data.Rule"/>
<collection add-method="addAction" item-type="cap.data.Action" iter-method="actionIterator"/>
<collection add-method="addDataItem" item-type="cap.data.DataItem" iter-method="dataItemIterator"/>
</mapping>
Here's the actual XML:
<DataSet label="START">
<Message>Is the patient greater than or = 16 years of age?</Message>
<Selection name="age" required="YES" tabular="NO" type="RADIO">
<SelectedItem default="NO" returnValue="no" textEntry="NO">No</SelectedItem>
<SelectedItem default="NO" returnValue="yes" textEntry="NO">Yes</SelectedItem>
</Selection>
<Action label="REJECT-AGE">
<Condition>START.age = "no"</Condition>
</Action>
<Action label="REASON">
<Condition>START.age = "yes"</Condition>
</Action>
</DataSet>
where Selection is a type of cap.data.DataItem. The generated error is "org.jibx.runtime.JiBXException: Expected end tag, found start tag "Condition" (line 10, col 15)".
It looks like the collection close handling code needs to be adjusted to make sure the error message refers to the proper tag.
Here is a complete binding.xml that attempted to solve the problem and failed. Selected and SelectedItem are the elements which fail. I will attach an example target file so you can see the whole thing.