[
https://issues.apache.org/jira/browse/TUSCANY-3857?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13030923#comment-13030923
]
Scott Kurz commented on TUSCANY-3857:
-------------------------------------
In r1101239, I committed a fix for this. It first tries to use the wrapper
element's schema to guide the unwrapping. If this fails, (most likely because
of an operation wrapper child not present in the payload wrapper), then we
revert to unwrapping by groups of similar elements.
To do this, I introduced a new boolean: isOmissible, which in schema terms is
true if "minOccurs=0"
The net result continues to support invalid elements (e.g. in the case where we
have a Java that's similar to an existing WSDL but not actually generated from
it). Though a side effect of this change is that I validate multiple
consecutive child elements against the schema (i.e. ensure that the
corresponding ElementInfo isMany is "true").. there's probably a payload out
there for which the behavior is different then but I'm not giving it any more
thought.
Finally... on the wrap path (not mentioned in my original problem writeup), I
added some code which will simply omit writing a null element into the wrapper
in case nillable="false", i.e. I prefer to wrap 'null' as xsi:nil="true" but
will also simply not write anything into the wrapper. Though it may seem more
symmetric to look at the isOmissible flag in this case, I couldn't see making
the behavior any different after doing so, so didn't.
> unwrapping OMElementWrapperHandler can't easily tolerate both non-valid data
> and minOccurs="0" data
> ---------------------------------------------------------------------------------------------------
>
> Key: TUSCANY-3857
> URL: https://issues.apache.org/jira/browse/TUSCANY-3857
> Project: Tuscany
> Issue Type: Bug
> Components: Java SCA Axis Binding Extension, Java SCA Databinding-SDO
> Reporter: Scott Kurz
> Priority: Minor
>
> In r1086760, I committed a change to OMElementWrapperHandler.getChildren so
> that it could handle unwrapping a wrapper with "missing" children, i.e.
> children with schema def of minOccurs="0" which aren't present as a child of
> the wrapper.
> The code we had would, after not finding a child of given QName, group the
> wrapper children into like-QName-elements and then allow indexing into this
> list of groups.
> This would prevent the next wrapper child from matching normally in the
> minOccurs="0" case, so I removed that logic.
> However, now I've broken our handling of schema-invalid payloads, as seen in
> the module:
> testing\itest\ws\endpoint-references
> Will have to think about how to handle both cases.
> I don't recall us talking about it in awhile, but I think the handling of
> XSD-invalid data is a significant feature of Tuscany that we should try not
> to break.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira