Return-Path: Delivered-To: apmail-ws-axis-user-archive@www.apache.org Received: (qmail 37925 invoked from network); 14 Apr 2005 21:16:57 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 14 Apr 2005 21:16:57 -0000 Received: (qmail 67488 invoked by uid 500); 14 Apr 2005 21:16:39 -0000 Delivered-To: apmail-ws-axis-user-archive@ws.apache.org Received: (qmail 67478 invoked by uid 500); 14 Apr 2005 21:16:38 -0000 Mailing-List: contact axis-user-help@ws.apache.org; run by ezmlm Precedence: bulk Reply-To: axis-user@ws.apache.org list-help: list-unsubscribe: List-Post: Delivered-To: mailing list axis-user@ws.apache.org Received: (qmail 67465 invoked by uid 99); 14 Apr 2005 21:16:38 -0000 X-ASF-Spam-Status: No, hits=0.1 required=10.0 tests=FORGED_RCVD_HELO,HTML_MESSAGE X-Spam-Check-By: apache.org Received-SPF: pass (hermes.apache.org: local policy) Received: from smtp.corp.harris.com (HELO mlbe2k1.cs.myharris.net) (137.237.104.159) by apache.org (qpsmtpd/0.28) with ESMTP; Thu, 14 Apr 2005 14:16:35 -0700 Received: from mlbmx1.cs.myharris.net ([137.237.90.73]) by mlbe2k1.cs.myharris.net with Microsoft SMTPSVC(5.0.2195.6713); Thu, 14 Apr 2005 17:16:31 -0400 Received: by mlbmx1.cs.myharris.net with Internet Mail Service (5.5.2657.72) id ; Thu, 14 Apr 2005 17:16:31 -0400 Message-ID: From: "Soti, Dheeraj" To: "'axis-user@ws.apache.org'" Subject: RE: Getting StackOverflow error while trying to invoke the servic e Date: Thu, 14 Apr 2005 17:16:27 -0400 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2657.72) Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01C54135.B1A16050" X-OriginalArrivalTime: 14 Apr 2005 21:16:31.0882 (UTC) FILETIME=[3B0076A0:01C54137] X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_001_01C54135.B1A16050 Content-Type: text/plain Dino, Explanation for Q.2: I have a class Content which I'll represent as a complex type in my wsdl. This class contains an array of Realizations. Realization is a base class and it has two children (see below in figure). So the elements of the array can be of type RealizationChild1 or RealizationChild2. How do I specify this in WSDL. What should be the type of the array element. One way can be to remove this inheritance thing in WSDL and define one single complex type Realization which has fields from both the children and one more field that tells which type of realization it is. Then Content can have an array of the newly created Realization. Do you think this will a good approach to follow? Realization | | ----------------------------------------------- ^ ^ | | RealizationChild1 RealizationChild2 For Q.1 I can write a custom serialize but I was trying to see if it is possible to just give the WSDL to the user. That way he doesn't need anything else to get access to the web service. He can generate the client side bindings in his own environment Thanks Dheeraj -----Original Message----- From: Dino Chiesa [mailto:dinoch@microsoft.com] Sent: Thursday, April 14, 2005 6:56 AM To: axis-user@ws.apache.org Subject: RE: Getting StackOverflow error while trying to invoke the service Getting back to older threads .. . . For Q1, I would use a custom serializer. You can just fix up the back-references in application code. at runtime. For example, introduce a method like Volume.getDevice() and that method does a scan on the device table, for a device with the given ID. you can then store the reference to this device in your object. (But don't serialize it) . This is all pretty easy in .NET, and also doable in AXIS with custom serialization. or move to something like SDO, which does this. For Q2, I don't know what specifically you are asking but it is possible for complexTypes to contain other complexTypes. This is fully interoperable. _____ From: Soti, Dheeraj [mailto:dsoti@harris.com] Sent: Monday, April 04, 2005 6:31 PM To: 'axis-user@ws.apache.org' Subject: RE: Getting StackOverflow error while trying to invoke the service Dino, Thanks for your elaborate reply. In my case the class A contains an array of type B elements. As you also noticed that class B keeps a reference to A. This will definitely create a loop when Axis will try to serialize it because while serializing B it'll try to serialize A and then B and so on. As you said that reference can be kept through an id of A as well. If I do that then it becomes pretty easy and there is no problem of looping but the downside is that sometimes consumer might have to give a different call to obtain the instance of class A using the id because some elements of the array of type B might point to another instance of class A. I hope I am not confusing you. See below: Instance1 of A ...field1 ...field2 ...Array of Instances of B Elements of Array of Instances of B are: --Instance1 of B (points to Instance1 of A) --Instance2 of B (points to some other instance of A) Q1. I am wondering what is the best practice here: --sacrifice the ease of loading the full object graph in favor of simple wsdl and simple serialization & de-serialization as that is the bottleneck in terms of performance. --or do something else to workaround this issue like create another complex element for A again which doesn't have further levels and use that for reference. Q2. I have a class that contains another class as a field for which there can be multiple implementations. class ContentContainer contains multiple ContentElements and there are multiple implementations of the latter (see below). How should I write my complex element in this case. As Anne also suggests that we should not treat web services as distributed object system so I don't want to use inheritance. One way can be to create a complex element that contains fields from all possible implementations of ContentElement and use that as a member of ContentContainer. Based on the fields set by the client I should create a specific instance at the implementation side. Any suggestion on this? ContentContainer-----contains one or more ---------------->ContentElement | | ---------------------------------------------------------- | | Element Type1 Element Type 2 Thanks Dheeraj Soti -----Original Message----- From: Dino Chiesa [mailto:dinoch@microsoft.com] Sent: Wednesday, March 30, 2005 1:50 AM To: axis-user@ws.apache.org Subject: RE: Getting StackOverflow error while trying to invoke the service You can prevent loops by normalizing your data schema. for example, look at the cyclic loop in the storage namespace. you have devices that contain volumes, and volumes that contain devices. this schema design in itself is not an error, but it strikes me as a bit loose. And the pitfall is: inserting a cycle into your Java-side data structures will cause a loop at runtime. If DeviceA includes VolumeA, and VolumeA contains DeviceA, sayonara. I suspect this is what is happening. if you normalize your data model, you may easily avoid this. Specify a VolumeId and a DeviceId, for example. The Device itself can include a VolumeId, which refers to an externally defined Volume. Maybe the Id is a UUID. Maybe an int. whatever. This way you have references to Volumes, not actual volumes. I would use the reference when the relationship is "isContainedBy or belongsTo. I would use the actual containment when the relationship between respective types is "contains". If you get my meaning. If a device contains volumes, then the Volume type should refer to a DeviceId, rather than containing an actual device. The other spots you identified, where a type contains an array of itself, or where typeA contains typeB which contains an array of typeA. . . (your contentContainer types and related). This is also a potential source of loops, but again is not an error in schema design. If you introduce a loop in your object graph at runtime, then AXIS will loop endlessly trying to serialize it. If you don't build cycles into the object graph, then you won't experience the problem. This area didn't bother me as much as the device/volume situation, because it seems there are more obvious scenarios where this sort of type nesting makes sense. But if looping is likely, you could apply the same reference approach here. _____ From: Soti, Dheeraj [mailto:dsoti@harris.com] Sent: Tuesday, March 29, 2005 8:46 PM To: 'axis-user@ws.apache.org' Subject: Getting StackOverflow error while trying to invoke the service I do have cyclic loops at some places. Any idea how to prevent this? See the WSDL below. I have highlighted the suspected places in red. Thanks Dheeraj ------_=_NextPart_001_01C54135.B1A16050 Content-Type: text/html Content-Transfer-Encoding: quoted-printable Message
Dino,
 
Explanation for Q.2:  I have a class Content which = I'll=20 represent as a complex type in my wsdl. This class contains an array of = Realizations. Realization is a base class and it = has two children (see=20 below in figure). So the elements of the array can be of type = RealizationChild1=20 or RealizationChild2.
 
How do=20 I specify this in WSDL. What should be the type of the array = element. One=20 way can be to remove this inheritance thing in WSDL and define one = single=20 complex type Realization which has fields from both the children and = one=20 more field that tells which type of realization it is. Then = Content=20 can have an array of the newly created Realization. Do you think this = will a=20 good approach to follow?
 
          &nb= sp;           &nb= sp; =20 Realization
          &nb= sp;           &nb= sp;          =20 |
          &nb= sp;           &nb= sp;          =20 |
          &nb= sp;      =20 -----------------------------------------------
          &nb= sp;     =20 ^            = ;            = ;            = ;         =20 ^
          &nb= sp;     =20 |            = ;            = ;            = ;          =20 |
          &nb= sp;RealizationChild1        &nbs= p;           &nbs= p;RealizationChild2       =20
 
For=20 Q.1 I can write a custom serialize but I was trying to see if it is = possible to=20 just give the WSDL to the user. That way he doesn't need anything else = to get=20 access to the web service. He can generate the client side bindings = in his=20 own environment
 
Thanks
 
Dheeraj
 
-----Original = Message-----
From: Dino=20 Chiesa [mailto:dinoch@microsoft.com]
Sent: Thursday, April = 14, 2005=20 6:56 AM
To: axis-user@ws.apache.org
Subject: RE: = Getting=20 StackOverflow error while trying to invoke the = service

Getting back to older threads .. . = .
 
For Q1,
I would use a custom serializer. =
You can just fix up the back-references in = application=20 code. at runtime.   
For example, introduce a method like =
  Volume.getDevice() =
and that method does a scan on the device = table, for a=20 device with the given ID.  you can then store the reference to = this=20 device in your object.  (But don't serialize it) = .    This=20 is all pretty easy in .NET, and also doable in AXIS with custom = serialization.=20  
 
or move to something like SDO, which does = this. =20
 
For Q2, I don't know what specifically you = are asking but=20 it is possible for complexTypes to contain other complexTypes.=20
This is fully interoperable. =
 
 


From: Soti, Dheeraj = [mailto:dsoti@harris.com]=20
Sent: Monday, April 04, 2005 6:31 PM
To:=20 'axis-user@ws.apache.org'
Subject: RE: Getting = StackOverflow error=20 while trying to invoke the service

Dino,
 
Thanks for your elaborate reply.
 
 In my case the class A contains an array of type B = elements. As=20 you also noticed that class B keeps a reference to A. This will=20 definitely create a loop when Axis will try to serialize it = because while=20 serializing B it'll try to serialize A and then B and so on. As = you said=20 that reference can be kept through an id of A as well. If I do = that then=20 it becomes pretty easy and there is no problem of looping but the = downside is=20 that sometimes consumer might have to give a different call to obtain = the=20 instance of class A using the id because some elements of the array = of type B=20 might point to another instance of class A. I hope I am not confusing = you. See=20 below:
 
Instance1 of A
   ...field1
   ...field2
   ...Array of Instances of B
 
Elements of Array of Instances of B are:
  --Instance1 of B (points to Instance1 of = A)
  --Instance2 of B (points to some other instance of=20 A)
 
Q1. I am wondering what is the best = practice=20 here:
  --sacrifice the ease of loading the full object graph = in favor=20 of simple wsdl and simple serialization & de-serialization = as that is=20 the bottleneck in terms of performance.
  --or do something else to workaround this issue like = create=20 another complex element for A again which doesn't have further levels = and use=20 that for reference.
 
Q2. I have a class that contains = another class as=20 a field for which there can be multiple = implementations.
 
class ContentContainer contains multiple ContentElements and = there are=20 multiple implementations of the latter (see below). How should I = write my=20 complex element in this case. As Anne also suggests that we should = not treat=20 web services as distributed object system so I don't want to use = inheritance.  One way can be to create a complex element that = contains=20 fields from all possible implementations of ContentElement and use = that as a=20 member of ContentContainer. Based on the fields set by the client I = should=20 create a specific instance at the implementation side. Any suggestion = on=20 this?
 
ContentContainer-----contains one or more=20 ---------------->ContentElement
          &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;     =20 |
          &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;     =20 |
          &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;       ---------------------------= -------------------------------
          &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;           &nb= sp;      =20 = |            = ;            = ;            = ;            = ;        =20 |
          &= nbsp;           &= nbsp;           &= nbsp;           &= nbsp;         =20 Element=20 = Type1           &= nbsp;           &= nbsp;            = Element Type 2   
          &nb= sp;           &nb= sp;    =20
 
 
Thanks
 
Dheeraj Soti
 
 
 
 
 
 
 
-----Original = Message-----
From: Dino=20 Chiesa [mailto:dinoch@microsoft.com]
Sent: Wednesday, = March 30,=20 2005 1:50 AM
To: axis-user@ws.apache.org
Subject: = RE:=20 Getting StackOverflow error while trying to invoke the=20 service

You can prevent loops by normalizing your = data schema.=20
for example, look at the cyclic loop in = the storage=20 namespace.   you have devices that contain volumes, and = volumes=20 that contain devices.  this schema design in itself is = not an=20 error, but it strikes me as a bit loose.  And the pitfall = is: =20 inserting a cycle into your Java-side data structures will cause a = loop at=20 runtime.  If DeviceA includes VolumeA, and VolumeA contains = DeviceA,=20 sayonara.  I suspect this is what is happening. =
 
if you normalize your data model, you = may easily avoid this.  = Specify a=20 VolumeId and a DeviceId, for example.  The Device itself can = include a=20 VolumeId, which refers to an externally defined Volume.  = Maybe the=20 Id is a UUID.  Maybe an int. whatever.  This way you = have=20 references to Volumes, not actual volumes.  =
 
I would use the reference when the = relationship is=20 "isContainedBy  or  belongsTo.    I would = use the=20 actual containment when the relationship between respective types=20 is   "contains".    If you get my = meaning.  If=20 a device contains volumes, then the Volume type should refer to a = DeviceId,=20 rather than containing an actual device. 
 
The other spots you identified, where a = type contains=20 an array of itself, or where typeA contains typeB which contains an = array of=20 typeA. . . (your contentContainer types and related).  = This is=20 also a potential source of loops, but again is not an error in = schema=20 design.  If you introduce a loop in your object graph at = runtime, then=20 AXIS will loop endlessly trying to serialize it.   If you = don't=20 build cycles into the object graph, then you won't experience the=20 problem.   This area didn't bother me as much as the = device/volume=20 situation, because it seems there are more obvious scenarios where = this sort=20 of type nesting makes sense.  But if looping is likely, you = could apply=20 the same reference approach here.
 


From: Soti, Dheeraj=20 [mailto:dsoti@harris.com]
Sent: Tuesday, March 29, 2005 = 8:46=20 PM
To: 'axis-user@ws.apache.org'
Subject: = Getting=20 StackOverflow error while trying to invoke the = service

I do have cyclic loops at some=20 places.  Any idea how to = prevent=20 this? See the=20 WSDL below. I have highlighted = the suspected=20 places in = red.

Thanks

Dheeraj

<?xml version=3D"1.0"=20 encoding=3D"UTF-8"?>
<wsdl:definitions targetNamespace=3D"http://services.hrs.harris.com/" =
  xmlns:apachesoap=3D"http://xml.apache.org/xml-soap" =
  xmlns:impl=3D"http://services.hrs.harris.com/" =
  xmlns:intf=3D"http://services.hrs.harris.com/" =
  xmlns:soapenc=3D"http://schemas.xmlsoap.org/soap/encoding/"=20
  xmlns:tns1=3D"http://services.hrs.harris.com/" =
  xmlns:content=3D"http://content.services.hrs.harris.com/" =
  xmlns:media=3D"http://media.services.hrs.harris.com/" =
  xmlns:device=3D"http://device.services.hrs.harris.com/" =
  xmlns:storage=3D"http://storage.services.hrs.harris.com/" =
  xmlns:timecode=3D"http://timecode.services.hrs.harris.com/" =
  xmlns:config=3D"http://config.services.hrs.harris.com/" =
  xmlns:wsdl=3D"http://schemas.xmlsoap.org/wsdl/" =
  xmlns:wsdlsoap=3D"http://schemas.xmlsoap.org/wsdl/soap/" =
  xmlns:xsd=3D"http://www.w3.org/2001/XMLSchema"> =
<!--WSDL created by Apache Axis version: = 1.2RC2 Built=20 on Nov 16, 2004 (12:19:44 EST)-->
<wsdl:types>
    <schema targetNamespace=3D"http://timecode.services.hrs.harris.com/" =
        = xmlns=3D"http://www.w3.org/2001/XMLSchema"> =
        = <complexType=20 name=3D"ImmutableFrameTime">
          &nb= sp;=20 <sequence>
          &nb= sp;    =20 <element name=3D"frameCount"=20 = type=3D"xsd:long"/>        &n= bsp;  =20
          &nb= sp;    =20 <element name=3D"frameRate" type=3D"xsd:double" /> =
          &nb= sp;=20 </sequence>   
       =20 </complexType>
        =
        = <complexType=20 name=3D"TimeCodeImpl">
          =20 <sequence>
          &nb= sp;   =20 <element name=3D"frameTime" nillable=3D"true"=20 type=3D"timecode:ImmutableFrameTime"/>
          =20 </sequence>   
       =20 </complexType>
          = ;   =20
    = </schema>=20
    <schema=20 targetNamespace=3D"http://media.services.hrs.harris.com/" =
        = xmlns=3D"http://www.w3.org/2001/XMLSchema"> =
        = <complexType=20 name=3D"Media">
          &nb= sp;=20 <sequence>        =
          &nb= sp;    =20 <element name=3D"id" type=3D"xsd:long"/>
          &nb= sp;    =20 <element name=3D"storageFile" = type=3D"storage:StorageFile"/>=20
          &nb= sp;    =20 <element name=3D"som" = type=3D"timecode:ImmutableFrameTime"/>=20
          &nb= sp;    =20 <element name=3D"resolution" type=3D"xsd:int"/> =
          &nb= sp;=20 </sequence>
       =20 </complexType>
   =20 </schema>

    <schema=20 elementFormDefault=3D"qualified" targetNamespace=3D"http://content.services.hrs.harris.com/" =
        = xmlns=3D"http://www.w3.org/2001/XMLSchema"> =
        = <complexType=20 name=3D"MultiSegment">
          &nb= sp;=20 <sequence>
          &nb= sp;    =20 <element name=3D"id" type=3D"xsd:long"/>
          &nb= sp;    =20 <element name=3D"name" type=3D"xsd:string"/>
          &nb= sp;    =20 <element name=3D"description" nillable=3D"true"=20 = type=3D"xsd:string"/>        =    =20
          &nb= sp;    =20 <element name=3D"som" nillable=3D"true"=20 type=3D"timecode:ImmutableFrameTime"/>
          &nb= sp;    =20 <element name=3D"duration" nillable=3D"true"=20 = type=3D"timecode:ImmutableFrameTime"/>     &= nbsp;         =20
          &nb= sp;  =20   = <element=20 name=3D"parentContainer" = type=3D"content:ContentContainer"/>
          &nb= sp;    =20 <element name=3D"segmentIndex" nillable=3D"true" = type=3D"xsd:int"/>=20
          &nb= sp;    =20 <element=20 name=3D"contentMetadata" = type=3D"content:ProgramContent"/>
          &nb= sp;=20 = </sequence>         &= nbsp;     =20
       =20 </complexType>
        =
        = <complexType=20 name=3D"ContentContainer">
          &nb= sp;=20 <sequence>
          &nb= sp;     <element = name=3D"contentMetadata"=20 type=3D"content:ProgramContent"/>
          &nb= sp;    =20 <element name=3D"id" type=3D"xsd:long"/>
          &nb= sp;    =20 <element name=3D"name" type=3D"xsd:string"/>
          &nb= sp;    =20 <element name=3D"description" nillable=3D"true" = type=3D"xsd:string"/>=20
          &nb= sp;    =20 <!--element name=3D"mediaList" nillable=3D"true" = type=3D"impl:ArrayOf_Media"=20 /-->
          &nb= sp;    =20 <element name=3D"multiSegments" nillable=3D"true"=20 type=3D"impl:ArrayOf_MultiSegment"=20 = />           &= nbsp;   =20
          &nb= sp;    =20 <element=20 name=3D"directOriginator" = type=3D"content:ContentContainer"/>          &nb= sp;        =20
          &nb= sp;=20 = </sequence>         &= nbsp;     =20
       =20 </complexType>

       =20 <complexType name=3D"ProgramContent">
          &nb= sp;=20 <sequence>
          &nb= sp;    =20 <element name=3D"id" type=3D"xsd:long"/>
          &nb= sp;    =20 <element name=3D"title" nillable=3D"true" type=3D"soapenc:string"= />=20
          &nb= sp;    =20 <element name=3D"description" nillable=3D"true" = type=3D"xsd:string"/>=20
          &nb= sp;    =20 <element name=3D"estimatedDuration" nillable=3D"true"=20 type=3D"timecode:ImmutableFrameTime"/>
          &nb= sp;    =20 <element name=3D"houseId" nillable=3D"true" = type=3D"xsd:string"/>=20
          &nb= sp;    =20 <element name=3D"episodeNumber" nillable=3D"true" deafult=3D""=20 type=3D"xsd:string"/>
          &nb= sp;    =20 <element name=3D"umid" nillable=3D"true" type=3D"xsd:string"=20 default=3D""/>
          &nb= sp;    =20 <element name=3D"episodeTitle" nillable=3D"true" = type=3D"xsd:string"=20 default=3D""/>
          &nb= sp;     <element = name=3D"contentRealizations"=20 nillable=3D"true" = type=3D"impl:ArrayOf_content_ContentContainer"/>=20
          &nb= sp;    =20 <element name=3D"numberProgramSegments" nillable=3D"true" = default=3D"1"=20 type=3D"xsd:int"/>
          &nb= sp;=20 </sequence>
       =20 </complexType>
   =20 </schema>
   =20 <schema targetNamespace=3D"http://device.services.hrs.harris.com/" =
        = xmlns=3D"http://www.w3.org/2001/XMLSchema"> =
        = <complexType=20 name=3D"DeviceVendor">
          &nb= sp;=20 <sequence>        =
          &nb= sp;    =20 <element name=3D"name" type=3D"xsd:string"/>
          &nb= sp;    =20 <element name=3D"storageHandlerId" = type=3D"xsd:string"/>
          &nb= sp;=20 </sequence>   
        = </complexType>=20
    = </schema>=20
    <schema=20 elementFormDefault=3D"qualified" targetNamespace=3D"http://services.hrs.harris.com/" =
        = xmlns=3D"http://www.w3.org/2001/XMLSchema"> =
        = <import=20 namespace=3D"http://schemas.xmlsoap.org/soap/encoding/" = />=20
       =20 <complexType name=3D"ArrayOf_MultiSegment">
          &nb= sp;=20 <sequence>
          &nb= sp;    =20 <element name=3D"segments" maxOccurs=3D"unbounded" = nillable=3D"true"=20 type=3D"content:MultiSegment" />
          &nb= sp;=20 </sequence>
       =20 </complexType>       =20
        <complexType = name=3D"ArrayOf_content_ContentContainer">
          &nb= sp;=20 <sequence>
          &nb= sp;    =20 <element name=3D"containers" maxOccurs=3D"unbounded" = nillable=3D"true"=20 type=3D"content:ContentContainer" />
          &nb= sp;=20 </sequence>
       =20 </complexType>
        <complexType = name=3D"ArrayOf_Media">
          &nb= sp;=20 <sequence>
          &nb= sp;    =20 <element name=3D"medias" maxOccurs=3D"unbounded" = nillable=3D"true"=20 type=3D"media:Media" />
          &nb= sp;=20 </sequence>
       =20 </complexType>
        <complexType = name=3D"ArrayOf_StorageVolume">
          &nb= sp;=20 <sequence>
          &nb= sp;    =20 <element name=3D"storages" maxOccurs=3D"unbounded" = nillable=3D"true"=20 type=3D"storage:StorageVolume" />
          &nb= sp;=20 </sequence>        =
       =20 </complexType>
        <!--The = following four=20 elements have to be defined for doc/literal wrapped--> =
        = <complexType=20 name=3D"createContentInput">
          &nb= sp;=20 <sequence>
          &nb= sp;    =20 <element name=3D"arg1" = type=3D"content:ProgramContent"/>
          &nb= sp;=20 </sequence>
       =20 </complexType>
        <complexType = name=3D"createContentOutput">
          &nb= sp;=20 <sequence>
          &nb= sp;    =20 <element name=3D"status" type=3D"xsd:boolean"/> =
          &nb= sp;=20 </sequence>
       =20 </complexType>
        <element=20 name=3D"createContent" type=3D"impl:createContentInput"/> =
        = <element=20 name=3D"createContentResponse" = type=3D"impl:createContentOutput"/>=20
       =20 <!--The above four elements have to be defined for doc/literal=20 wrapped-->
   =20 </schema>   
    <schema targetNamespace=3D"http://storage.services.hrs.harris.com/" =
        = xmlns=3D"http://www.w3.org/2001/XMLSchema"> =
        = <complexType=20 name=3D"StorageFile">
          &nb= sp;=20 <sequence>        =
          &nb= sp;    =20 <element name=3D"id" type=3D"xsd:long"/>
          &nb= sp;    =20 <element name=3D"pathName" type=3D"xsd:string"/> =
          &nb= sp;    =20 <element name=3D"volume" = type=3D"storage:StorageVolume"/>
          &nb= sp;=20 = </sequence>         &= nbsp;     =20
       =20 </complexType>
        <complexType = name=3D"StorageDevice">
          &nb= sp;=20 <sequence>        =
          &nb= sp;    =20 <element name=3D"id" type=3D"xsd:long"/>
          &nb= sp;    =20 <element name=3D"name" type=3D"xsd:string"/>
          &nb= sp;    =20 <element name=3D"volumes" = type=3D"impl:ArrayOf_StorageVolume"/>=20
          &nb= sp;    =20 <element name=3D"deviceVendorName" = type=3D"xsd:string"/>
          &nb= sp;    =20 <element name=3D"iPAddress" type=3D"xsd:string"/> =
          &nb= sp;    =20 <element name=3D"protocol" type=3D"xsd:string"/> =
          &nb= sp;    =20 <element name=3D"username" type=3D"xsd:string"/> =
          &nb= sp;    =20 <element name=3D"password" type=3D"xsd:string"/> =
          &nb= sp;=20 = </sequence>         &= nbsp;     =20
       =20 </complexType>
        <complexType = name=3D"StorageVolume">
          &nb= sp;=20 <sequence>
          &nb= sp;    =20 <element name=3D"id" type=3D"xsd:long"/>
          &nb= sp;    =20 <element name=3D"storageDevice"=20 = type=3D"storage:StorageDevice"/>      &= nbsp;           &= nbsp;=20
          &nb= sp;=20 </sequence>
       =20 </complexType>
   =20 </schema>
 </wsdl:types>

   <wsdl:message=20 name=3D"createContentRequest">

      = <wsdl:part=20 name=3D"in0" element=3D'impl:createContent'/>

   = </wsdl:message>

   <wsdl:message=20 name=3D"createContentResponse">

      = <wsdl:part=20 name=3D"createContentReturn" = element=3D'impl:createContentResponse'/>=20

   = </wsdl:message>=20
   <wsdl:portType=20 name=3D"ContentServiceWS">

      = <wsdl:operation=20 name=3D"createContent" parameterOrder=3D"in0">

        =20 <wsdl:input message=3D"impl:createContentRequest"=20 name=3D"createContentRequest"/>

        =20 <wsdl:output message=3D"impl:createContentResponse"=20 name=3D"createContentResponse"/>

     =20 </wsdl:operation>

   = </wsdl:portType>=20
  
   <wsdl:binding = name=3D"ContentServiceSoapBinding"=20 type=3D"impl:ContentServiceWS">

     =20 <wsdlsoap:binding transport=3D"http://schemas.xmlsoap.org/soap/http" = style=3D"document"=20 />

      = <wsdl:operation=20 name=3D"createContent">

        =20 <wsdlsoap:operation soapAction=3D""/>

        =20 <wsdl:input name=3D"createContentRequest">

          &nb= sp;=20 <wsdlsoap:body use=3D"literal"/>

        =20 </wsdl:input>

        =20 <wsdl:output name=3D"createContentResponse">

          &nb= sp;=20 <wsdlsoap:body use=3D"literal"/>

        =20 </wsdl:output>

     =20 </wsdl:operation>

   = </wsdl:binding>=20
   <wsdl:service=20 name=3D"HRSWebService">

      = <wsdl:port=20 binding=3D"impl:ContentServiceSoapBinding" = name=3D"ContentServiceWS">=20

        =20 <wsdlsoap:address location=3D"http://localhost:8080/hrsApp/services/ContentServiceWS"/>=20

     =20 </wsdl:port>

   = </wsdl:service>

</wsdl:definitions>=20


------_=_NextPart_001_01C54135.B1A16050--