[ http://issues.apache.org/jira/browse/AXIS-1818?page=comments#action_66342 ] Ashutosh Shahi commented on AXIS-1818: --------------------------------------
I agree with Simon that that the second Id element should go in the "any" collection. The problem is at the onStartChild() method of BeadDeserealizer class. When the second "id" element is repeated, instead of checking that it had occurred before and thus adding it to "any" type, the first value is simply overwritten. I think the expected behaviour should be if the element had already occured in previous pass, and maxoccurs is 1, it should either go to "any" type if it is present or should throw an Exception rather than simply eating one of the values. I am loking into how we can add a this condition here. Any thoughts on this? Ashutosh > MessageElement [] for <any> doesn't include all elements > -------------------------------------------------------- > > Key: AXIS-1818 > URL: http://issues.apache.org/jira/browse/AXIS-1818 > Project: Axis > Type: Bug > Components: Serialization/Deserialization > Versions: 1.2RC2 > Environment: XP / JDK 1.4.x / Axis 1.2 RC3 > Reporter: Simon Fell > Assignee: Venkat Reddy > Attachments: sforce.xml, sforce.xsd > > This is with Axis 1.2 RC3 > Given this type fragment > <sequence> > <element name="type" type="xsd:string"/> > <element name="fieldsToNull" type="xsd:string" nillable="true" minOccurs="0" > maxOccurs="unbounded"/> > <element name="Id" type="tns:ID" nillable="true" minOccurs="0" maxOccurs="1"/> > <any namespace="##targetNamespace" minOccurs="0" maxOccurs="unbounded"/> > </sequence> > If a runtime message returns the Id element twice, the 2nd instance, which > should end up in the any collection gets dropped. > There's a sample service at http://soap.4s4c.com/dotnet/any.wsdl that this > test code shows this problem. > AnyServiceLocator loc = new AnyServiceLocator(); > Soap svc = loc.getSoap(); > > QueryResult qr = svc.query("blah"); > > for (int i =0; i < qr.getRecords().length; i++ ) { > SObject s = qr.getRecords(i); > MessageElement [] e= s.get_any(); > System.out.println("MessageElement array size is " + > e.length); > for (int j = 0; j < e.length; j++ ){ > System.out.print(" " + e[j].getValue()); > } > System.out.println(""); > } > This prints out "MessageElement array size is 2", even though there's 3 > elements that appear after the first Id element, here's the fragement of the > response. > <records xsi:type="sf:sObject"> > <sf:type>Contact</sf:type> > <sf:Id>00330000006jryXAAQ</sf:Id> > <sf:Id>00330000006jryXAAQ</sf:Id> > <sf:FirstName>Fred</sf:FirstName> > <sf:LastName>A>B</sf:LastName> > </records> -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
