You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by bu...@apache.org on 2003/09/09 16:44:42 UTC

DO NOT REPLY [Bug 23031] New: - No deserializer found for ns1:ArrayOfstring

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23031>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23031

No deserializer found for ns1:ArrayOfstring

           Summary: No deserializer found for ns1:ArrayOfstring
           Product: Axis
           Version: 1.1
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Major
          Priority: Other
         Component: Serialization/Deserialization
        AssignedTo: axis-dev@ws.apache.org
        ReportedBy: zogthebogue@hotmail.com


To maximize interop, Axis serializes arrays with a type


of soapenc:Array. However, deserialization is not as


fail safe. If the type is soapenc:Array, then Axis uses


the arrayType to determine the array content, however


if the type is generic qname, you need to have registered


properly a type mapping for deserialization to work.


I think Axis should fall back on the "soapenc:Array" case


when no type mapping is registered, so as to be able to


seamlessly deserialize:


<return xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/" 
xsi:type="ns1:ArrayOfstring" ns2:arrayType="xsd:string[3]">


without having to register a type mapping for "ns1:ArrayOfstring".


I have a potential fix for this: in ArrayDeserializer, replace


        // Determine the class type for the array.


        arrayClass = null;


        if (typeQName != null) {


            arrayClass = context.getTypeMapping().


                getClassForQName(typeQName);


        } else {




by


        // Determine the class type for the array.


        arrayClass = null;


        if (typeQName != null) {


            arrayClass = context.getTypeMapping().


                getClassForQName(typeQName);


        } 


        if (typeQname == null || arrayClass == null) {