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

Reply via email to