|
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?
|
- .NET interoperability problem with arrays of "primitiv... Martin Jericho
- Re: .NET interoperability problem with arrays of "... Martin Jericho
- Re: .NET interoperability problem with arrays of "... Martin Jericho
