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=12873>.
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=12873

Axis clients don’t set xsi:type attribute when marshalling arrays of java.lang.Objects.

           Summary: Axis clients don’t set xsi:type attribute when
                    marshalling arrays of java.lang.Objects.
           Product: Axis
           Version: current (nightly)
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Major
          Priority: Other
         Component: Serialization/Deserialization
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


When an Axis client sends an array of object, the xsi:type attribute should be 
set on each element, so that the server knows what type it is.  The Axis client 
should also look at this attribute when receiving a reply to know what type 
it’s dealing with.

The problem can be reproduced with .NET using the following client and server:
(The server will get a cast failure because it doesn't know the arguments real 
type).


Axis Client:

        public void doIt() throws Exception
        {
                ArrayOfAnyType arg = new ArrayOfAnyType();
                ArrayOfAnyType rtrn;

                Object[] obj = new Object[10];

                for (int i = 0; i < 10; i++)
                {
                        obj[i] = new MyType();
                        ((MyType)obj[i]).setI(i);
                        ((MyType)obj[i]).setS("string " + i);
                }

                arg.setAnyType(obj);

                rtrn = fport.test(arg);

                for (int i = 0; i < 10; i++)
                        System.out.println((MyType)rtrn.getAnyType(i));
        }


ASP.NET C# Server:

        public struct myType
        {
                public int i;
                public string s; 
        }
                        
        [WebMethod]
        public object[] Test(object[] arg)
        {
                object[] rtrn = new object[arg.Length];

                for (int i = 0; i < arg.Length; i++)
                {
                        myType str = new myType();

                        // This will cause a cast failure because .NET
                        // doesn't know arg[i] is really of type myType

                        str = (myType)arg[i];
                        rtrn[i] = str;
                }

                return rtrn;
        }

Reply via email to