Hi Bill, do u already try to map your array in your WSDD ? Something like that :
<typeMapping xmlns:ns="urn:MyNS" qname="ns:Employe" type="java:bill.keese.Employe" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" /> <typeMapping xmlns:ns="urn:MyNS" qname="ns:ArrayOfEmployee" type="java:bill.keese.Employe[]" serializer="org.apache.axis.encoding.ser.ArraySerializerFactory" deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory" encodingStyle="" /> --------------- Sebastien On Thu, 17 Feb 2005 15:15:17 +0900, Bill Keese <[EMAIL PROTECTED]> wrote: > Wow, great answer. Thanks! I was actually just asking about issue #2, > wrapped or bare arrays. > > I looked over the Axis code again and realized that in ArraySerializer.java > version 1.31, the code I mentioned in my previous mail was corrected to > output wrapped or bare arrays in concordance with the WSDL file. The > problem is that there is still a bug when an operation returns an array > directly, rather than a structure containing an array (ie, an operation > like "Employee[] getEmployees()"). > > Bill > > Dino Chiesa wrote: > > I am not clear. Seems there are two issues, > 1. SOAP encoding (blaaaach!) vs Literal > 2. wrapped or bare arrays > > Let's stay away from SOAPENC:arrayType since we all listen to WS-I. > > So, on issue #2, are you asking, does .NET expect arrays embedded in types > to be serialized as [Example 1]: > <Container> > <param1> foo</param1> > <wrapper> > <param2>bar</param2> > <param2>blah</param2> > ... > </wrapper> > </Container> > > or as [Example 2] > > > <Container> > <param1> foo</param1> > <param2>bar</param2> > <param2>blah</param2> > ... > </Container> > ? > > The answer is, .NET can go either way. It takes its cue from the WSDL. > > If the WSDL uses a complexType to wrap an array, such as this: > > > > > <s:complexType name="Container"> > <s:sequence> > <s:element minOccurs="1" maxOccurs="1" name="param1" nillable="true" > type="s:string" /> > <s:element minOccurs="1" maxOccurs="1" name="wrapper" nillable="true" > type="tns:ArrayOfString" /> > </s:sequence> > </s:complexType> > <s:complexType name="ArrayOfString"> > <s:sequence> > <s:element minOccurs="0" maxOccurs="unbounded" name="param2" > type="s:string" /> > </s:sequence> > </s:complexType> > > ... then .NET will expect the XML on the wire to be "wrapped", as in > [Example 1] above. If the WSDL does not use a complexType to wrap the > array, but instead uses an element with maxOccurs != 1, like so: > > <s:complexType name="Container"> > <s:sequence> > <s:element minOccurs="1" maxOccurs="1" name="param1" nillable="true" > type="s:string" /> > <s:element minOccurs="0" maxOccurs="unbounded" name="param2" > type="s:string" /> > </s:sequence> > </s:complexType> > > ...then .NET will expect XML on the wire that does not wrap the array in an > element, such as in [Example 2] above. > > So you can do whatever. > > > > what format do people usually use? > > I guess it's a matter of style and taste. From the app programmer's > perspective, the generated type on the .NET side behaves the same. It looks > like this: > > public class Container { > public string param1; > public string[] param2; > } > > The metadata attached to the type (in the form of inline code attributes) > tells the .NET XML serializer whether to use a wrapper element or not. > > So the differences in on-the-wire serialization don't bubble up to the .NET > programmer. Personally I find the use of "ArrayOfX" to be clunky in the WSDL > and XSD. But it reads more nicely in the serialized XML, and so I > generally prefer it in complex schema. In simple schema, I don't care. > > > -D > > > ________________________________ > From: Bill Keese [mailto:[EMAIL PROTECTED] > Sent: Wednesday, February 16, 2005 9:18 PM > Cc: [EMAIL PROTECTED] > Subject: Re: rpc/literal vs document/literal, and returning a list of > objects > > Dino - question for you. The checkin comment for ArraySerializer v1.5 is > listed below. It implies that .NET *doesn't* want arrays serialized using > the <item> tag. And yet, all the examples I've seen of .NET services > indicate the opposite. Can you shed some light on this? And if your answer > is ".NET clients support either case as long as the XML response obeys the > WSDL file", then, what format do people usually use? > > ArraySerializer v1.5 checkin comment: > Support serializing Arrays in "literal" fashion (a .NET-ism). We introduce > an "isEncoded" flag on the MessageContext for now - this really wants to get > set to the encoding state we're in at present, but I couldn't figure out how > to coax that out of the serialization code yet. Let's say we have: class > Bean { public String field1; public String [] field2; } if isEncoded is true > (the default), we get XML that looks like: <bean> <field1>hi there</field1> > <field2 SOAPENC:arrayType="xsd:string[2]"> <item>1</item> <item>2</item> > </field2> </bean> whereas if isEncoded is false, we now get: <bean> > <field1>hi there</field1> <field2>1</field2> <field2>2</field2> </bean> > TODOs: 1) Figure out how to get encodingStyle for real 2) Implement > deserializing from arrays encoded like this Bill > > > Bill Keese wrote: > Hi Dino, > > Nice to hear input from someone on the MS side. Anyway, yes, I think the > array issue is specific to Axis v1.2, and it's documented in > http://issues.apache.org/jira/browse/AXIS-1547 > > The patch specified in the bug report seems to fix most people's array > related problems. (It's not in CVS so you have to check out the Axis code > and modify it yourself.) > > Bill > > Dino Chiesa wrote: > Returning arrays from AXIS to .NET? Using AXIS v1.1 server, and .NET v1.1 - > it works for me. Here's a working sample with code. > http://dinoch.dyndns.org:7070/axis/AboutBasics.jsp I know this must be a > repeat, but I looked in the archive and did not see it. . . Is the arrays > issue specific to AXIS v1.2? -----Original Message----- From: Praveen Peddi > [mailto:[EMAIL PROTECTED] Sent: Tuesday, February 15, 2005 3:32 PM > To: [EMAIL PROTECTED]; Anne Thomas Manes Subject: Re: rpc/literal vs > document/literal, and returning a list of objects But what about the > doc/literal issues related to returning array of beans. Wouldn't Dan hit the > wall at some point. Atleast I hit the wall when I tried to move towards > doc/literal. We were using rpc/encoded style before and everything was > working great. When I read that rpc/encoded has permance problems I tried to > move to doc/literal style (actually wrapped/literal) but I was stuck with > returning arrays issue. My .NET client doesn't serialize the beans at all. I > read the Eric's thread and other email threads related to this issue but > could not really come up with a solution. Praveen ----- Original Message > ----- From: "Anne Thomas Manes" <[EMAIL PROTECTED]> To: > <[EMAIL PROTECTED]> Sent: Tuesday, February 15, 2005 12:47 PM Subject: > Re: rpc/literal vs document/literal, and returning a list of objects > And just to clarify... The difference between doc/literal and > wrapped/literal is in the way you invoke the service -- the contents on the > wire (the structure of the SOAP message) will be identical. In doc/literal, > you input an object (javabean), and you return an object (javabean). In > wrapped/literal, you input parameters, and you return an object. > Wrapped/literal is a programming convention that make doc/literal look like > rpc/literal. Don't use rpc/literal because .NET doesn't support it. Regards, > Anne On Tue, 15 Feb 2005 16:55:36 +0000, Tom Oinn <[EMAIL PROTECTED]> wrote: > Dan, My suggestion would be to use document / literal style. The data > structure you describe is easy to define as an XML schema (by hand if > > you must, but I'd use something like XMLSpy). You can then create the > > requisite WSDL file referencing this schema, generate the server side > > Java classes against this and modify them to call the appropriate methods > on your existing EJB. If you're using doc/literal style you'll also have to > build a (very simple) XSD type for your three inputs, in this case a simple > sequence with minoccurs and maxoccurs attributes set to 1. I would > definitely start with WSDL in any case, given that the WSDL defines whether > your service is WS-I compliant. HTH, Tom