Have you tried changing your bean from: public class MyBean { public String[] Values; }
to: public class MyBean { private String[] Values; public String[] getValues(); public void setValues(String[] x); } to see if it makes a difference ?
From: "Martin Jericho" <[EMAIL PROTECTED]>
Reply-To: [EMAIL PROTECTED]
To: <[EMAIL PROTECTED]>
Subject: Empty arrays not serialized properly
Date: Thu, 31 Oct 2002 11:02:09 +1000
Using Axis 1.0, a bean containing an array property is serialized by simply including each element of the array directly under the bean element, as demonstrated in this example:
public class MyBean {
public String[] Values;
}
Which looks like this over the wire:
<multiRef id="id4" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:MyBean" xmlns:ns3="urn:myproject" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<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>
I'm still not sure whether this is compliant with the standard (can anyone confirm this?)
Anyway, when the Values array is empty, there is no way to distinguish it from the case where the Values field is null. Thus, when an empty array is sent, the other side receives a null. Here is an example of the serialized object:
<multiRef id="id4" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:MyBean" xmlns:ns3="urn:myproject" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" />
To make things worse, it was acutally working properly in beta2, it is only broken in 1.0. This is how beta2 was serializing arrays:
<multiRef id="id4" SOAP-ENC:root="0" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:MyBean" xmlns:ns3="urn:myproject">
<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>
There are two possible explanations:
1. This method of serializing array properties in beans is invalid. .NET doesn't understand it, which gives me some suspicions that this is the case. If so however, why was it changed since axis beta2, which was serializing them in an unambiguous way that .NET understands?
2. This method of serializing array properties in beans is valid, but the null case should be handled differently. This implies that .NET has a problem with the standard, but there is still a bug in axis because it's not handling the null case properly.
Why was this change made to axis between beta2 and 1.0? Why wasn't it properly tested?
_________________________________________________________________
Choose an Internet access plan right for you -- try MSN! http://resourcecenter.msn.com/access/plans/default.asp