axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dino Chiesa" <din...@microsoft.com>
Subject RE: array of recursive beans (doc/literal style)
Date Wed, 16 Feb 2005 22:06:30 GMT
yes, our most recent messages crossed in the ether.

________________________________

From: Praveen Peddi [mailto:ppeddi@contextmedia.com] 
Sent: Wednesday, February 16, 2005 2:34 PM
To: axis-user@ws.apache.org
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
<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 <mailto:ppeddi@contextmedia.com>  
	To: axis-user@ws.apache.org ; Eugene Shershnev
<mailto:shersh@gmail.com>  
	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 <mailto:shersh@gmail.com>  
		To: axis-user@ws.apache.org 
		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
<mailto:ppeddi@contextmedia.com>  
			To: axis-user@ws.apache.org 
			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
<mailto:dinoch@microsoft.com>  
				To: axis-user@ws.apache.org 
				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:ppeddi@contextmedia.com] 
				Sent: Tuesday, February 15, 2005 9:52 PM
				To: axis-user@ws.apache.org
				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.ContainerBea
n[]" 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.ContainerBea
n"/>

				</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:ppeddi@contextmedia.com 
				Tel:  401.854.3475 
				Fax:  401.861.3596 
				web: http://www.contextmedia.com 
	
************************************************************** 
				Context Media- "The Leader in Enterprise
Content Integration" 
				


Mime
View raw message