🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

4 total messages Started by n00rbi Tue, 12 Dec 2006 08:54
PHP / nuSOAP / Typ złożony
#8966
Author: n00rbi
Date: Tue, 12 Dec 2006 08:54
87 lines
3088 bytes
Piszę webservice za pomocą nuSOAP. Mam do przekazania/odebrania 
komunikat w następującym formacie XML

<KOMUNIKAT>
    <DANESTATYSTYCZNE>
       <ILOSC1>111</ILOSC1>
       <ILOSC2>112</ILOSC2>
       <ILOSC3>113</ILOSC3>
       <ILOSC4>114</ILOSC4>		
    </DANESTATYSTYCZNE>
    <DANEADRESOWE>
       <NAZWA>ABC</NAZWA>
       <REGON>9488585885</REGON>
    </DANEADRESOWE>
</KOMUNIKAT>


Po stronie klienta wywołuję więc:

//----------------------------------------
$danest = array('ILOSC1' => 111, 'ILOSC2' => 112, 'ILOSC3' => 113, 
'ILOSC4'=> 114 );
$daneadr = array('NAZWA1' => 'ABC', 'REGON' => '9488585885');
$kom = array ( $danest, $daneadr);
$result = $client->call('UpdateTest', array('KOMUNIKAT' => $kom));
//----------------------------------------



Po stronie serwera mam zdefinowane typy:

//----------------------------------------
$server->wsdl->addComplexType(
     'DANESTATYSTYCZNE',
     'complexType',
     'struct',
     'all',
     '',
     array(
         'ILOSC1' => array('name' => 'ilosc1', 'type' => 'xsd:int'),
         'ILOSC2' => array('name' => 'ilosc2', 'type' => 'xsd:int'),
         'ILOSC3' => array('name' => 'ilosc2', 'type' => 'xsd:int'),
         'ILOSC4' => array('name' => 'ilosc3', 'type' => 'xsd:int')
     )
);

$server->wsdl->addComplexType(
     'DANEADRESATA',
     'complexType',
     'struct',
     'all',
     '',
     array(
         'NAZWA1' => array('name' => 'nazwa1', 'type' => 'xsd:string'),
         'REGON' => array('name' => 'regon', 'type' => 'xsd:string')
     )
);

$server->wsdl->addComplexType(
     'KOMUNIKAT',
     ...
     (???????????????????????)
     ...
};

$server->register('UpdateTest',
     array('KOMUNIKAT' => 'tns:KOMUNIKAT'),
     array('return' => 'tns:Odpowiedz'),
     'urn:test3WSDL',
     'urn:test3WSDL#UpdateTest',
     'rpc',
     'encoded',
     'test'
);

//----------------------------------------

Pytanie:
Jak za pomocą AddComplexType zbudować typ 'KOMUNIKAT' złożony z dwóch 
typów: 'DANESTATYSTYCZNE' i 'DANEADRESATA'?

Nie mogę do tego dojść, próbowałem bezskutecznie, w tutorialach 
znalazłem tylko przykłady z jednym poziomem.
Proszę o wsparcie.

n00rbi
Re: PHP / nuSOAP / Typ złożony
#8967
Author: szomiz
Date: Tue, 12 Dec 2006 10:23
10 lines
1228 bytes
Użytkownik "n00rbi" <norbi666@gazeta.pl> napisał w wiadomości 
news:ellqnm$erf$5@news.task.gda.pl...

A to ono:

> $server->wsdl->addComplexType(

Czegos przez przypadek nie zwraca?

sz. 
Re: PHP / nuSOAP / Typ złożony
#8968
Author: n00rbi
Date: Tue, 12 Dec 2006 10:47
66 lines
2791 bytes
Użytkownik szomiz napisał:

> 
> A to ono:
> 
>>$server->wsdl->addComplexType(
> 
> Czegos przez przypadek nie zwraca?
> 
> sz. 
> 

Żeby stworzyć typ złożony spróbowałem czegoś takiego, ale nie wiem cxzy 
nie błądzę:

$server->wsdl->addComplexType(
     'KOMUNIKAT',
     'complexType',
     'array',
     'all',
     'SOAP-ENC:Array',
     array(
           'DANESTATYSTYCZNE'=> array("ref" => "SOAP-ENC:arrayType", 
'type'=>'tns:DANESTATYSTYCZNE'),
           'DANEADRESATA'=>array("ref" => "SOAP-ENC:arrayType", 
'type'=>'tns:DANEADRESATA')
           ),
     'tns:KOMUNIKAT'										
);


Request wygląda w tym momencie tak:

<?xml version="1.0" encoding="ISO-8859-1"?>
   <SOAP-ENV:Envelope 
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:tns="urn:test3WSDL">
    <SOAP-ENV:Body>
      <tns:UpdateTest xmlns:tns="urn:test3WSDL">
      <KOMUNIKAT xsi:type="tns:KOMUNIKAT">
        <DANESTATYSTYCZNE xmlns="" xsi:nil="true" 
xsi:type=":DANESTATYSTYCZNE"/>
        <DANEADRESATA xmlns="" xsi:nil="true" xsi:type=":DANEADRESATA"/>
      </KOMUNIKAT></tns:UpdateTest>
    </SOAP-ENV:Body>
   </SOAP-ENV:Envelope>

a chciałbym żeby wyglądał tak:

      <KOMUNIKAT xsi:type="tns:KOMUNIKAT">
        <DANESTATYSTYCZNE>
          <ILOSC1>111</ILOSC1>
          <ILOSC2>112</ILOSC2>
          ...
        </DANESTATYSTYCZNE>
        <DANEADRESATA>
          <NAZWA1>...</NAZWA1>
          ...
        </DANEADRESATA>
      </KOMUNIKAT>

siedze nad tym juz troche i nie wiem jak to ugryzc :-/
Re: PHP / nuSOAP / Typ złożony
#8969
Author: szomiz
Date: Tue, 12 Dec 2006 11:29
27 lines
1947 bytes
Użytkownik "n00rbi" <norbi666@gazeta.pl> napisał w wiadomości 
news:elm1cb$r3$1@news.task.gda.pl...

> Żeby stworzyć typ złożony spróbowałem czegoś takiego, ale nie wiem cxzy 
> nie błądzę:

Ja tez nie wiem, ale przeciez od kombinowania nic nie wybuchnie...

> $server->wsdl->addComplexType(
>     'KOMUNIKAT',
>     'complexType',
>     'array',
>     'all',
>     'SOAP-ENC:Array',
>     array(
>           'DANESTATYSTYCZNE'=> array("ref" => "SOAP-ENC:arrayType", 
> 'type'=>'tns:DANESTATYSTYCZNE'),
>           'DANEADRESATA'=>array("ref" => "SOAP-ENC:arrayType", 
> 'type'=>'tns:DANEADRESATA')
>           ),

Sprawdziles _co_ zwraca $server->wsdl->addComplexType ?

Bo w normalnych srodowiskach cos takiego zwraca zazwyczaj obiekt, ktory 
mozna mniej lub bardziej wprost wykorzystac do tworzenia struktury wlasnie.

sz.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads