You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2014/12/19 15:28:13 UTC
[jira] [Commented] (CXF-6163) WSDL Javascript generator for xsd:any
elements is not correct when any is optional
[ https://issues.apache.org/jira/browse/CXF-6163?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14253430#comment-14253430 ]
ASF GitHub Bot commented on CXF-6163:
-------------------------------------
GitHub user DemonShi opened a pull request:
https://github.com/apache/cxf/pull/46
[CXF-6163] Fixed xsd:any behaviour when used with minOccurs=0, maxOccurs>1
* xsd:any deserializer does not go into infinite loop when xsd:any cannot match any element and minOccurs=0
Here is how generated code now looks like:
```javascript
var anyObject = [];
var matcher = new org_apache_cxf_any_ns_matcher(org_apache_cxf_any_ns_matcher.ANY, 'urn:...', [], null);
var anyNeeded = 0;
var anyAllowed = 9223372036854775807;
while (anyNeeded > 0 || anyAllowed > 0) {
var anyURI;
var anyLocalPart;
var anyMatched = false;
if (curElement) {
anyURI = cxfjsutils.getElementNamespaceURI(curElement);
anyLocalPart = cxfjsutils.getNodeLocalName(curElement);
var anyQName = '{' + anyURI + '}' + anyLocalPart;
cxfjsutils.trace('any match: ' + anyQName);
anyMatched = matcher.match(anyURI, anyLocalPart)
cxfjsutils.trace(' --> ' + anyMatched);
}
if (anyMatched) {
anyDeserializer = cxfjsutils.interfaceObject.globalElementDeserializers[anyQName];
cxfjsutils.trace(' deserializer: ' + anyDeserializer);
if (anyDeserializer) {
var anyValue = anyDeserializer(cxfjsutils, curElement);
} else {
var anyValue = curElement.nodeValue;
}
anyObject.push(anyValue);
anyNeeded--;
anyAllowed--;
curElement = cxfjsutils.getNextElementSibling(curElement);
} else {
if (anyNeeded > 0) {
throw 'not enough ws:any elements';
} else {
break;
}
}
}
var anyHolder = new org_apache_cxf_any_holder(anyURI, anyLocalPart, anyValue);
newobject.setAny(anyHolder);
```
* xsd:any serializer does not throw an exception when xsd:any element is being passed as empty array and minOccurs=0
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/DemonShi/cxf cxf-6163
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/cxf/pull/46.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #46
----
commit 5824a9e56386b1938667d41d27c1007943fcf098
Author: Andrii Nikitiuk <de...@gmail.com>
Date: 2014-12-19T14:17:27Z
[CXF-6163] Fixed xsd:any behaviour when used with minOccurs=0, maxOccurs>1
----
> WSDL Javascript generator for xsd:any elements is not correct when any is optional
> ----------------------------------------------------------------------------------
>
> Key: CXF-6163
> URL: https://issues.apache.org/jira/browse/CXF-6163
> Project: CXF
> Issue Type: Bug
> Components: JavaScript Client
> Affects Versions: 3.0.2
> Reporter: Andrii Nikitiuk
> Priority: Minor
> Labels: javascript, optional, wsdl2js, xsd, xsd:any
>
> Here is an example of WSDL complexType with any element:
> {code}
> <complexType name="SomeType">
> <sequence>
> <element name="arg1" type="xsd:int"/>
> <any maxOccurs="unbounded" minOccurs="0"/>
> </sequence>
> </complexType>
> {code}
> Here are some problems:
> * In generated Javascript this xsd:any element is marked as "required", while we have minOccurs="0"
> * Deserializer of this xsd:any element goes into infinite loop when there is nothing that can be threaten as xsd:any
> * Serializer also thinks of this xsd:any as required element and throws exception if it is null
> Expected behavior:
> * xsd:any should be threaten as optional element
> * parsing of XML with xsd:any element in WSDL should not hang
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)