Since updating to Axis 1.0, my .NET client no longer understands the way axis sends arrays which are bean properties.
 
For example, I have a WSMap class that contains two String arrays, one called "Keys" and the other called "Values".
Over the wire, axis sends an object of this class like this:
 
  <multiRef id="id4" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:WSMap" xmlns:ns3="urn:myproject" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
   <Keys xsi:type="xsd:string">K1</Keys>
   <Keys xsi:type="xsd:string">K2</Keys>
   <Keys xsi:type="xsd:string">K3</Keys>
   <Values xsi:type="xsd:string">Value 1</Values>
   <Values xsi:type="xsd:string">Value 2</Values>
   <Values xsi:type="xsd:string">Value 3</Values>
  </multiRef>
When .NET tries to deserialize this, it generates an exception like this:
 
Unhandled Exception: System.InvalidOperationException: There is an error in XML document (14, 41). ---> System.InvalidCastException: Cannot assign object of type System.String to an object of type System.String[].
 
(This is pointing to the first <Keys> element)
 
Does the problem lie with AXIS sending the data in a non-standard way, or with .NET not supporting the standard?
 
In Axis beta2 it was sent like this, which .NET understood fine:
 
  <multiRef id="id4" SOAP-ENC:root="0" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:WSMap" xmlns:ns3="urn:myproject">
   <Keys xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[3]">
    <item>K1</item>
    <item>K2</item>
    <item>K3</item>
   </Keys>
   <Values xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[3]">
    <item>Value 1</item>
    <item>Value 2</item>
    <item>Value 3</item>
   </Values>
  </multiRef>
 
Is there any way to make Axis 1.0 use the old style?

Reply via email to