There seems to be an interop problem with .NET with jagged arrays
(array of arrays). I have a method exposed by Axis like so:
public String[][] getArrayOfStringArray(String[][] arg) {
return arg;
}
Here is the relevant part of the WSDL that was generated by Axis for the
String[][] type:
...
<complexType name="ArrayOfArrayOf_xsd_string">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[][]"/>
</restriction>
</complexContent>
</complexType>
<element name="ArrayOfArrayOf_xsd_string" nillable="true"
type="intf:ArrayOfArrayOf_xsd_string"/>
...
When I use .NET's WSDL.exe to generate the proxy, it generates a different
type than what is expected. (It generates String[][] as string[] instead of
string[][]).
public string[] getArrayOfStringArray(string[] arg) {
object[] results = this.Invoke("getArrayOfStringArray",
new object[] { arg});
return ((string[])(results[0]));
}
Has anyone run into this problem also ? Anyone knows of a workaround
(wsdl written differently etc)
There may be potentially be another problem. This one is in Axis's
ArraySerializer.java code. In ArraySerializer.java,
there is a hard-coded boolean (this is beta2 code) named enbale2Dim:
// Discover whether array can be serialized directly as a
two-dimensional
// array (i.e. arrayType=int[2,3]) versus an array of arrays.
...
boolean enable2Dim = true; // Enabled 2-Dim processing
This code attempts to send an array of arrays as a 2 dimensional array. The
problem is that .NET cannot handle multi-dimensional arrays (but can handle
jagged arrays). Can this boolean not be hard-coded but instead be
configurable so it may have a chance of interoperating with .NET ?
_________________________________________________________________
Send and receive Hotmail on your mobile device: http://mobile.msn.com