[ http://issues.apache.org/jira/browse/AXIS-2011?page=all ]
Guillaume Sauthier updated AXIS-2011: ------------------------------------- Attachment: axis-arrayMapping.patch A real patch against latest CVS apply into src > Multi Dimensional Array Serilization > ------------------------------------ > > Key: AXIS-2011 > URL: http://issues.apache.org/jira/browse/AXIS-2011 > Project: Axis > Type: Improvement > Components: Deployment / Registries, Serialization/Deserialization > Versions: 1.2 > Environment: JOnAS 4.4 > Reporter: Guillaume Sauthier > Assignee: Guillaume Sauthier > Attachments: axis-arrayMapping.patch, axis-src.jar, axis-test.jar > > Actually the test case test.wsdl.marshall is broken because Axis do not > serialize 2D arrays as expected. > See http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383522 for reference. > We are expecting a correct SOAP Message formed like this : > soap:Body > ns1:myOperation > return > return soapenc:arraytype="xsd:string[][2]" xsi:type="soapenc:Array" > return soapenc:arraytype="xsd:string[2]" xsi:type="soapenc:Array" > return xsi:type="xsd:string" [Value1] > return xsi:type="xsd:string" [] > return xsi:type="xsd:string" xsi:nil="true" > [...] > Instead, we have the following : > soap:Body > ns1:myOperation > return > return soapenc:arraytype="ns:ArrayOfstring[][2]" xsi:type="soapenc:Array" > return soapenc:arraytype="xsd:string[2]" xsi:type="soapenc:Array" > return xsi:type="xsd:string" [Value1] > return xsi:type="xsd:string" [] > return xsi:type="ns:ArrayOfArrayOfstring" xsi:nil="true" > [...] > Points to notice : > A. the first arrayType has a wrong xml type (expecting most inner non array > type xsd:string in place of ns:ArrayOfstring) > B. the first arrayType has a right dims ([][2]) : 2D array with 2 elements > for the first dim > C. last element of the array has a wrong xsi:type ! I don't know where it > comes from but its wrong, indeed :) > The first thing I tried to change the xsi:type (C) was to lookup the xml type > from the (most inner non array )Java type we retrieve. Problem with this > approach : I can't exactly control if I will get an xsd:string or > soapenc:string. For my case, I was waiting an xsd:string and the TypeMapping > gives me a soapenc:string. Grrr ! > Looking deeper in ArraySerializer.serialize(), we can see that this > serializer is not "symetrical" (for java type and xml type) : we can go > several levels deep when searching for the most inner non array java type, > but we're stuck to the itemType (only 1 level deep) retrieved from > SerializationContext for xml types! > My idea is to allow searching in xml types too. If we have for each > ArraySerializer the wanted innerType, we can get the mapped serializer. If > the retrieved serializer is an ArraySerilalizer, we can go one step further, > ... > So with this, we're symetrical (we go deeper for the xml AND java types in > the same time). > Notice that's more time consumming, because we search TypeMapping very often ! > Now, how to give these metadatas to the Engine ? In the wsdd, indeed ! > So now, we have a new element arrayMapping element that allow us to specify > the innerType for an ArraySerializer ! > To be complete, I made some changes too in JavaDeployWriter, to write up the > arrayMapping element when an ArraySerializerFactory has to be used. > Important : This is only for review (Glen/Tom ?) !! The code attached to this > report is neither clean nor complete : > - innerName attribute is not used, could be usefull ? > - to limitate the number of impacted files, a lot of Constants are inside > WSDDArrAyMapping, should go in WSDDContstants. > - at this time, arrayMapping is only understand if contained in a service > element ! We should add for each TypeMappingContainer subclasses... > - WSDDArrayMapping can be improved with error message (when trying to set > ser/deser other than ArraySerFactory...) > - maybe we can add some NPE checks :) > Thanks for your comments/suggestions ! > --Guillaume -- 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