Re: [SOAP] Array in PEAR::SOAP

From: Date: Tue, 18 Jun 2002 21:11:44 +0000
Subject: Re: [SOAP] Array in PEAR::SOAP
References: 1 2 3  Groups: php.soap 
Request: Send a blank email to php-soap+get-132@lists.php.net to get a copy of this message
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


« previous php.soap (#132) next »