Re: [SOAP] Array in PEAR::SOAP
| From: | Luis Barrios | Date: | Tue, 18 Jun 2002 21:27:58 +0000 |
| Subject: | Re: [SOAP] Array in PEAR::SOAP | ||
| References: | 1 2 3 4 | Groups: | php.soap |
| Request: | Send a blank email to php-soap+get-133@lists.php.net to get a copy of this message | ||
When do that, I have in the response:
<NewsList xsi:type="SOAP-ENC:Array"
SOAP-ENC:arrayType="xsd:anyType[6]"
SOAP-ENC:offset="[0]">
<news>
.....
and this is not what I want because I think that xsd:anyType[6] it is not
very good...
Luis
"Shane Caraveo" <shane@caraveo.com> wrote in message
news:3D0FA210.8040109@caraveo.com...
> You're giving the wrong type.
>
> $arr = array();
> for( . . . )
> {
> $arr[] = new SOAP_Value("news", "{urn:AldiaService}news", array(
> new SOAP_Value('id', 'int', $...),
> new SOAP_Value('title', 'string', $...),
> new SOAP_Value('audiorm', 'string', $...)
> ));
> }
> return new SOAP_Value("NewsList", "Array", $arr);
>
> Shane
>
> Luis Barrios wrote:
> > Ok, I saw the server_round2_base.php, echoStructArray and a part of the
> > problem was resolved, but I have WSDL, so I have my namespaces (I
think), I
> > made:
> >
> > $arr = array();
> > for( . . . )
> > {
> > $arr[] = new SOAP_Value("news", "SOAPStruct", array(
> > new SOAP_Value('id', 'int', $...),
> > new SOAP_Value('title', 'string', $...),
> > new SOAP_Value('audiorm', 'string', $...)
> > ));
> > }
> > return new SOAP_Value("NewsList", "Array", $arr);
> > // If I use return $arr; I will lost the name 'NewsList'
> >
> > And the WSDL is:
> > <types>
> > <xsd:schema
> > xmlns="http://www.w3.org/2001/XMLSchema"
> > targetNamespace="urn:AldiaService">
> >
> > <xsd:complexType name="news">
> > <xsd:all>
> > <xsd:element name="id" type="xsd:int"/>
> > <xsd:element name="title" type="xsd:string"/>
> > <xsd:element name="audiorm" type="xsd:string"/>
> > </xsd:all>
> > </xsd:complexType>
> >
> > <xsd:complexType name="AldiaListaResultArray">
> > <xsd:complexContent>
> > <xsd:restriction base="soapenc:Array">
> > <xsd:attribute ref="soapenc:arrayType"
> > wsdl:arrayType="typens:news[]"/>
> > </xsd:restriction>
> > </xsd:complexContent>
> > </xsd:complexType>
> >
> > </xsd:schema>
> > </types>
> >
> > <message name="ListarNoticiasResponse">
> > <part name="NewsList"
> > type="typens:AldiaListaResultArray"/>
> > </message>
> >
> > <portType name="AldiaServicePort">
> > <operation name="aldialista">
> > <input message="typens:ListarNoticias"/>
> > <output message="typens:ListarNoticiasResponse"/>
> > </operation>
> > </portType>
> >
> > and with the new changes the Response is:
> >
> > <ns6:aldialistaResponse>
> > <NewsList xsi:type="SOAP-ENC:Array"
> > SOAP-ENC:arrayType="si:SOAPStruct[6]"
> > SOAP-ENC:offset="[0]">
> > <news xsi:type="si:SOAPStruct">
> > <id xsi:type="xsd:int">4980</id>
> > <title xsi:type="xsd:string">....</title>
> > <audiorm xsi:type="xsd:string">...</audiorm>
> > </news>
> > <news xsi:type="si:SOAPStruct">
> > .....
> > I can change the line $arr[] = new SOAP_Value("news", "SOAPStruct",
array(
> > for $arr[] = new SOAP_Value("item", "SOAPStruct", array(
> > What is the best choice,
> > Thanks a lot,
> > Luis
> >
> >
> > "Shane Caraveo" <shane@caraveo.com> wrote in message
> > news:3D0F890B.1020100@caraveo.com...
> >
> >>Luis Barrios wrote:
> >>
> >>>Hi,
> >>>I have a services with PEAR::SOAP, the response is a array of struct
but
> >>
> > I
> >
> >>>think that the response is not correct:
> >>>
> >>><ns6:newslistResponse>
> >>><NewsList xsi:type="SOAP-ENC:Array"
> >>> SOAP-ENC:arrayType="xsd:anyType[6]"
> >>> SOAP-ENC:offset="[0]">
> >>
> >>>I think that SOAP-ENC:arrayType="xsd:anyType[3]" it is not
> >>
> > correct,
> >
> >>>maybe something like
> >>>SOAP-ENC:arrayType="xsd:news[3]"
> >>>and the element <news> something like: <news
> >>>xsi:type="......">
> >>>but I dont know how I can change that in the server-side.
> >>>Please, help me,
> >>>Luis
> >>
> >>There is an example in the server_round2_base.php, echoStructArray.
> >>
> >>'news' is not in the namespace that the xsd prefix represents, so you
> >>cannot have xsd:news. You have to have your own namespace for the type.
> >>
> >>function getNewsList()
> >>{
> >>$newsList = array();
> >>$newsItems = getYourNewsList();
> >>if ($newsItems) {
> >>foreach($newsItems as $item) {
> >> $newsList[] = new
>
> >>>>SOAP_Value('item','{http://yournamespace/}news',$item);
> >>}
> >>return $newsList;
> >>}
> >>
> >>A namespace with be added to the envelope for
> >>http://yournamespace/, and
> >>the arrayType should end up being something like ns1:news[]
> >>
> >>Shane
> >>
> >>
> >
> >
> >
> >
>
>
>