Hi Dino,

It was nice meeting you yesterday. Thanks for helping with Interop problems :)

-- dims


On Wed, 16 Feb 2005 19:16:24 -0800, Dino Chiesa <[EMAIL PROTECTED]> wrote:
>  
> Hm 
> I don't really know what the problem is, then. 
>   
> I started with the WSDL you sent me, and removed the weird, redundant
> ArrayOf_tns1_ContainerBean type, and introduced a new named complexType in
> its place.   Like so: 
> 
>   <element name="getRootContainersResponse" type="tns1:ArrayOfContainerBean"
> /> 
>   
>   <complexType name="ArrayOfContainerBean">
>    <sequence>
>     <element maxOccurs="unbounded" name="item" type="tns1:ContainerBean"/>
>    </sequence>
>   </complexType> 
>   
>   
> and then of course the ContainerBean itself specified the type of the
> childContainers element to be the ArrayOfContainerBean complexType.   ya
> follow me? 
>   
> Then I did the wsdl2Java --server-side dance, 
> not using --noWrapped, 
> and provided an implementation of the service that generates random data, 
> which is important because you are sending xsd:date and .NET doesn't like
> nil Dates. 
>   
> Whoops !  no ArrayOfContainerBean.java is generated.  Using --noWrapped, it
> is?  So in the end I ran wsdl2Java twice, first with noWrapped, then
> without, and got the required classes to be generated.  
>   
> After taking that brief detour, I deployed the service to Jetty, using the
> generated deploy.wsdd. 
>   
> I also built a simple .NET client that calls the getRootContainers() method.
> I get back an array of ContainerBeans 
>   and each ContainerBean has a child array of ContainerBeans.  
>   
> It works for me.  I am using your wsdl and schema, modified as above. 
>   
> I can send you any of these files or a zip of all of them. 
>   
> I tried it with AXIS v1.1 first, which I have had good success with.   It
> worked. 
> Then I tried it with AXIS 1.2RC2.  I expected this to not work because you
> all are saying that arrays are broken in v1.2RC2.   It necessitated lots of
> changes to my makefile due to changes in the names of generated classes.?? 
> also the weirdness with failing to generate the ArrayOfContainerBean.      
> But in the end it worked.  In both cases the client was .NET v1.1.   
>   
> I double-checked the axis jars in the jetty webapp, they are from Nov 16
> 2004, whiich I guess is the release date of v1.2RC2.  so it really is
> working.   I did not apply Eric's patch.  I don't even know what Eric's
> patch is.  
>   
> Just for grins I generated a .NET server-side implementation, too.  The same
> client works with both the AXIS server and the .NET server.  Just change the
> URL.    There's  no difference.  Except the .NET version is faster and
> better looking.   ;) 
>   
>   
> "WSDL first, a good idea. (tm)" 
>   
>  
>  
>  ________________________________
>  From: Praveen Peddi [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, February 16, 2005 5:43 PM
> 
> To: [EMAIL PROTECTED]
> Subject: Re: array of recursive beans (doc/literal style)
> 
>  
>  
> I don't really like the option 1. And I don't know how to go for option 2
> :). I am trying to apply Eric's patch and see if it fixes my problem
> (assuming that this patch will be applied to Axis's cvs :) ). 
>   
> Praveen 
>  
> ----- Original Message ----- 
> From: Dino Chiesa 
> To: [EMAIL PROTECTED] 
> Sent: Wednesday, February 16, 2005 5:06 PM 
> Subject: RE: array of recursive beans (doc/literal style) 
> 
>  
> yes, our most recent messages crossed in the ether.
>  
>  ________________________________
>  From: Praveen Peddi [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, February 16, 2005 2:34 PM
> To: [EMAIL PROTECTED]
> Subject: Re: array of recursive beans (doc/literal style)
> 
>  
>  
> The main problem seems to be in the axis response anyway. So I am not sure
> if changing the WSDL would fix the problem on .NET side.Axis response has a
> blank namespace for the second level elements (see the green text and red
> text. I think they both should have similar attributes and namespaces).
> thats what I have to fix I think. But how do I fix is the question. 
>   
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
> xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
>  <soapenv:Body>
>   <getRootContainersResponse
> xmlns="http://soap.session.ip.contextmedia.com";>
>    <item xsi:type="ns1:ContainerBean"
> xmlns:ns1="http://soap.session.ip.contextmedia.com";>
>     <ID>9C5B3C608B5D151B6F87E368CC8AF182</ID>
>     <accessPermissions>7</accessPermissions>
>     <accountID>7F1CB4C5C87072FA8D6C21133A642EAB</accountID>
>     <childContainers>
>      <item xmlns="">
>       <ID>163C42F9BC87CB1CEBC14C0A45820DED</ID>
>       <accessPermissions>7</accessPermissions>
>       <accountID>7F1CB4C5C87072FA8D6C21133A642EAB</accountID>
>       <childContainers xsi:nil="true"/>
>       <creationDate>2005-02-09T17:21:44.000Z</creationDate>
>       <deliveryPermissions>0</deliveryPermissions>
>       <description/>
>       <lastModifiedDate>2005-02-09T17:21:44.000Z</lastModifiedDate>
>       <name>test</name>
>       <parentID>9C5B3C608B5D151B6F87E368CC8AF182</parentID>
>       <type>4</type>
>       <userID>8E89C8D2583DCB99812FC94FDE15AFE1</userID>
>      </item>
>     </childContainers>
>     <creationDate>2005-01-27T21:21:33.000Z</creationDate>
>     <deliveryPermissions>0</deliveryPermissions>
>     <description/>
>     <lastModifiedDate>2005-02-08T22:18:03.000Z</lastModifiedDate>
>     <name>My Content</name>
>     <parentID xsi:nil="true"/>
>     <type>1</type>
>     <userID>8E89C8D2583DCB99812FC94FDE15AFE1</userID>
>    </item>
>    <item xsi:type="ns3:ContainerBean"
> xmlns:ns3="http://soap.session.ip.contextmedia.com";>
>     <ID>829E600249C07064F73569782FF801EC</ID>
>     <accessPermissions>7</accessPermissions>
>     <accountID>7F1CB4C5C87072FA8D6C21133A642EAB</accountID>
>     <childContainers>
>      <item xmlns="">
>       <ID>F142D17B950A2A70E0DF6E777B8D39D4</ID>
>       <accessPermissions>7</accessPermissions>
>       <accountID>7F1CB4C5C87072FA8D6C21133A642EAB</accountID>
>       <childContainers/>
>       <creationDate>2005-01-27T21:24:18.000Z</creationDate>
>       <deliveryPermissions>0</deliveryPermissions>
>       <description/>
>       <lastModifiedDate>2005-01-27T21:24:18.000Z</lastModifiedDate>
>       <name>2</name>
>       <parentID>829E600249C07064F73569782FF801EC</parentID>
>       <type>4</type>
>       <userID xsi:nil="true"/>
>      </item>
>     </childContainers>
>     <creationDate>2005-01-27T21:21:29.000Z</creationDate>
>     <deliveryPermissions>0</deliveryPermissions>
>     <description/>
>     <lastModifiedDate>2005-01-27T21:38:41.000Z</lastModifiedDate>
>     <name>Enterprise Library</name>
>     <parentID xsi:nil="true"/>
>     <type>1</type>
>     <userID xsi:nil="true"/>
>    </item>
>   </getRootContainersResponse>
>  </soapenv:Body>
> </soapenv:Envelope> 
>   
>   
>  
> ----- Original Message ----- 
> From: Praveen Peddi 
> To: [EMAIL PROTECTED] ; Eugene Shershnev 
> Sent: Wednesday, February 16, 2005 2:20 PM 
> Subject: Re: array of recursive beans (doc/literal style) 
> 
>  
> I changed the wsdl. ContainerBean is now defined as (my changes are in
> blue): 
>  
> 
> <complexType name="ContainerBean">
>     <sequence>
>      <element name="ID" nillable="true" type="xsd:string"/>
>      <element name="accessPermissions" type="xsd:int"/>
>      <element name="accountID" nillable="true" type="xsd:string"/>
>      <element name="childContainers">
>       <complexType>
>        <sequence>
>         <element maxOccurs="unbounded" name="item"
> type="tns1:ContainerBean"/>
>        </sequence>
>       </complexType>
>      </element>
>      <element name="creationDate" nillable="true" type="xsd:dateTime"/>
>      <element name="deliveryPermissions" type="xsd:int"/>
>      <element name="description" nillable="true" type="xsd:string"/>
>      <element name="lastModifiedDate" nillable="true" type="xsd:dateTime"/>
>      <element name="name" nillable="true" type="xsd:string"/>
>      <element name="parentID" nillable="true" type="xsd:string"/>
>      <element name="type" type="xsd:int"/>
>      <element name="userID" nillable="true" type="xsd:string"/>
>     </sequence>
>    </complexType> 
> 
> I made my .NET client point to the modified WSDL. I still get the same
> error. My .NET client cant serialize the beans after top level. 
> 
> I didn't change the java code on server side though. All I did was changed
> WSDL manually and added this webreference on .NET side. 
> 
> Thx 
> 
> Praveen 
> 
>   
>  
> ----- Original Message ----- 
> From: Eugene Shershnev 
> To: [EMAIL PROTECTED] 
> Sent: Wednesday, February 16, 2005 1:08 PM 
> Subject: Re: array of recursive beans (doc/literal style) 
> 
>  
> Try changing your WSDL so there is no additional ArrayOd_tns1_ContainerBean
> type. 
> Basically, the definition of ContainerBean: 
>   
>     <complexType name="ContainerBean">
>      <sequence> 
>       . . .
>       <element maxOccurs="unbounded" name="item" type="tns1:ContainerBean"/>
>      </sequence>
>     </complexType>
>  
> Not sure if this is valid though, it's just my guess. 
>   
> Eugene 
>  
> ----- Original Message ----- 
> From: Praveen Peddi 
> To: [EMAIL PROTECTED] 
> Sent: Wednesday, February 16, 2005 12:39p 
> Subject: Re: array of recursive beans (doc/literal style) 
> 
>  
> Thanks for the response Dino. 
> I am using Axis rc1.2 nightly build from Feb 8th. 
> I think you are right regarding desinging the interfaces. Its better to work
> on WSDL and schema before working on java code but I have all the java
> classes built. These are not new services. I have all these services for
> long time and everything was working great until I moved to doc/literal
> style. I was using rpc/encoded style before. 
>   
> I looked at the WSDL generated by Axis and it looked fine to me. May be
> somone can look at my WSDL and see where it is wrong. Two elements that need
> to look at are: 
>  
>      <complexType name="ArrayOf_tns1_ContainerBean"> 
>  
>  
>      <sequence> 
>  
>  
>   <element maxOccurs="unbounded" minOccurs="0" name="item"
> type="tns1:ContainerBean" /> 
>   </sequence> 
> </complexType> 
>   
> AND 
>   
>  
>  
>      <element name="getRootContainersResponse"> 
>  
>  
>     <complexType> 
>  
>  
>     <sequence> 
>  
>  
>   <element maxOccurs="unbounded" name="item" type="tns1:ContainerBean" /> 
>   </sequence> 
>   </complexType> 
> </element> 
>   
> Both have the right definitions for array of beans. Looks like
> getRootContainerResponse defines namespace properly but not the
> ArrayOf_tns1_ContainerBean (look at the soap response file). 
>   
> Also, I am attaching the soap response. It looks like the problem is due to
> the namespace of each array element.Namespaces are defined properly for the
> top level elements array  but for the recursive elements, namespace is
> empty. 
>   
> Any help is appreciated. 
>   
> Thanks 
> Praveen 
>   
>  
> ----- Original Message ----- 
> From: Dino Chiesa 
> To: [EMAIL PROTECTED] 
> Sent: Wednesday, February 16, 2005 11:59 AM 
> Subject: RE: array of recursive beans (doc/literal style) 
> 
>  
> Is this a v1.2 RC thing, or are you using AXIS v1.1? 
>  And, how are you designing the interface?  
> There is a line of thinking that says, if you want interop, then start by
> designing the interface in a platform-independent manner.  In other words,
> WSDL and W3C XML Schema.   This applies whether you are using AXIS, .NET, or
> something else.  Some people call this "contract first" or "schema-first
> design". 
>   
> Schema-first design is a hassle you don't need if you are doing like-to-like
> communications.  So don't do it.  AXIS-to-AXIS is easy.  .NET-to-.NET is
> easy.  Just define your Interface in actual code (write your Java
> interface), specify some magic in the WSDD, and boom, you can connect. 
> It's when you want to mix and match clients and servers that this approach
> falls down.  Simple cases are ok, but nested arrays and structs don't work. 
>  In other words, starting with a .net server-side class and expecting the
> dynamically-generated WSDL to give good interop with an AXIS client, is
> wishful thinking.  Likewise for the converse. or any other combination of
> unlike webservices stacks.  
>   
> It sounds like you started with a Java class, and you are using Java2WSDL on
> it.  I would suggest that you start with the schema and WSDL, then generate
> the server-side Java interfaces and support classes with WSDL2Java.  Then
> provide the server-side implementations.  You may need adapters between the
> classes generated from the schema, and the existing application  on the
> server side.  
>   
> Likewise, generate the .NET (client-side) proxies from the WSDL.  
>   
> -Dino 
> MS 
> 
> 
>   
>  ________________________________
>  From: Praveen Peddi [mailto:[EMAIL PROTECTED] 
> Sent: Tuesday, February 15, 2005 9:52 PM
> To: [EMAIL PROTECTED]
> Subject: array of recursive beans (doc/literal style)
> 
>  
>  
> I have a method getRootContainers that returns array of ContainerBean[].
> Each ContainerBean has reference to an array of child ContainerBean[]. With
> Eugene's help I could make the array stuff work. the method sucessfully
> returns the array of COntainerBean[] and .NET reads it fine. But .NET client
> doesn't read them recursively. It only build the top level array fine but
> each ContainerBean has array of other ContainerBean. My service in wsdd
> looks as follows: 
>   
>  
> 
> <service name="CMISOAPContainerService" provider="java:RPC" style="wrapped"
> use="literal"> 
> 
> <parameter name="allowedMethods" value="copyContainer createContainer
> deleteContainer getContainer getContainerIcon getContainerProperties
> getRootContainers getContainerObjects getContentObjectsForContainer
> getRootContainers moveContainer updateContainer createQueryContainer
> updateQueryContainer createTaxonomy"/> 
> 
> <parameter name="scope" value="session"/> 
> 
> <parameter name="className"
> value="com.contextmedia.ip.session.soap.CMISOAPContainerService"/> 
> 
>  
> 
> <operation name="getRootContainers" qname="ns:getRootContainers"
> xmlns:ns="http://soap.session.ip.contextmedia.com";     returnQName="ns:item"
> returnType="ns:ContainerBean[]" > 
> 
>     <parameter name="depth" qname="ns:depth" type="xsd:int" mode="IN" /> 
> 
> </operation> 
> 
>  
> 
> <typemapping
> languageSpecificType="java:com.contextmedia.ip.session.soap.ContainerBean[]"
> qname="soapenc:Array"
> deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
> serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
> encodingStyle="" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/>
> 
>  
> 
> <beanMapping qname="bean:ContainerBean"
> xmlns:bean="http://soap.session.ip.contextmedia.com";
> languageSpecificType="java:com.contextmedia.ip.session.soap.ContainerBean"/>
> 
> </service> 
> I had to add <operation> and <typeMapping> tags after seeing Eugene's
> sample. w/o those two tags, even the first level of ContainerBean[] was not
> working. 
>   
> Not sure what else I am missing, How do I make the recursive bean stuff
> work? Is there any special configuration in WSDD file to make array of
> recursive beans work. 
>   
> Thanks, 
> Praveen 
>   
> ************************************************************** 
> Praveen Peddi
> Sr Software Engg, Context Media, Inc. 
> email:[EMAIL PROTECTED] 
> Tel:  401.854.3475 
> Fax:  401.861.3596 
> web: http://www.contextmedia.com 
> ************************************************************** 
> Context Media- "The Leader in Enterprise Content Integration" 
>  


-- 
Davanum Srinivas - http://webservices.apache.org/~dims/

Reply via email to