I posted a question on Monday on the microsoft.public.dotnet.framework.aspnet.webservices newsgroup, titled "Bug parsing zero-length arrays". So far there is not reply, but the group is monitored by microsoft people. If you are a MSDN subscriber or have a support agreement, you might have more luck through direct channels. The thing that confuses me is that the author of the original posting mentioned it will be fixed in .net v2, which isn't mentioned anywhere.
----- Original Message ----- From: <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Monday, November 04, 2002 7:54 PM Subject: RE: Empty arrays not serialized properly > Thank you, I didn't find that message in my previous search. > I tried the empty arrays in .Net framework 1.1 beta, but it isn't fixed. > I'll write to Microsoft to ask when this is scheduled to get fixed. > Might be best to write a serializer for .Net, I'll try what is the easiest > solution. > > Note that when you generate the java classes from the .Net wsdl with > WSDL2Java, > it adds Java code to manipulate the soap output, so you can use a getter and > fieds > starting with uppercase. > > private org.tempuri.ArrayOfString testCase; > public org.tempuri.ArrayOfString getTestCase() { > return testCase; > } > static { ... > field.setXmlName(new > javax.xml.namespace.QName("http://tempuri.org/", "TestCase")); > ... > > > -----Original Message----- > From: Martin Jericho [mailto:martin.j@;jabmail.com] > Sent: maandag 4 november 2002 1:01 > To: [EMAIL PROTECTED] > Subject: Re: Empty arrays not serialized properly > > > Yes, I do have the same problem. Have you seen the previous post in this > mailing list regarding this? It's under the heading "AXIS to .NET array > Interoperability issue, and work around...". It's apparently a known bug in > the .NET client. > > > ----- Original Message ----- > From: <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]> > Sent: Saturday, November 02, 2002 4:30 AM > Subject: Re: Empty arrays not serialized properly > > > > Hi, > > Did you test that the data returned by the getter works when using a .NET > > client when the array is empty? > > I have a problem that .NET gives a exception parsing xml using this > > structure and the array has zero elements. > > The generated xml gives: > > <objects xsi:type="soapenc:Array" > > soapenc:arrayType="ns2:SchemaObject[0]" > > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/> > > > > ArentJan > > > > > > Thanks for the tip, it has given me further insight into the problem. > > > > Your suggestion works, but it introduces another problem. Specifying the > > beans in this way means that Java2WSDL will give the element the name > > "values" instead of what I want, which is "Values" with the first letter > > capitalised. I would have to rewrite all of my .NET client code, which is > > not possible. I also prefer using the public member way of declaring the > > bean's contents because it is more succinct, easier to read and maintain, > > and doesn't require any superfluous implementation code that is never used > > anyway. > > > > Is there any way I can get the element names to start with capital letters > > if I declare them using bean methods? > > > > So the fundamental cause of the problem is that Java2WSDL is declaring the > > array as follows if it is defined using a public member: > > > > <complexType name="MyClass"> > > <sequence> > > <element maxOccurs="unbounded" name="Values" nillable="true" > > type="xsd:string"/> > > </sequence> > > </complexType> > > > > > > This is defining a repeating string element called Values, which is not > the > > same as a single array element called Values, and is therefore a bug. > > > > The correct declaration, which is generated when the array is defined > using > > the bean get/set methods, is as follows: > > > > <element name="values" nillable="true" type="impl:ArrayOf_xsd_string"/> > > <complexType name="ArrayOf_xsd_string"> > > <complexContent> > > <restriction base="soapenc:Array"> > > <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/> > > </restriction> > > </complexContent> > > </complexType> > > > > > > I will create a new bug report for this in bugzilla. > > > > Thanks again > > Martin > > > > ----- Original Message ----- > > From: "Cun Yong Tan" <[EMAIL PROTECTED]> > > To: <[EMAIL PROTECTED]> > > Sent: Friday, November 01, 2002 12:27 AM > > Subject: Re: Empty arrays not serialized properly > > > > > > > > > > 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 > > >