----- Original Message -----
Sent: Wednesday, October 30, 2002 2:31
PM
Subject: .NET interoperability problem
with arrays of "primitives"
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?