Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 14700

Webservices

$
0
0
Boas.


Pediram-me que fosse feito um webservice de modos a comunicar com uma aplicação externa. Isto é totalmente novo para mim, pelo que me estou a ver um bocado à rasca.

Ora, eu tenho que desenhar o ficheiro 'wsdl' aquando uma inscrição. Sei que para o desenhar, utilizo o server e que para ler utilizo o client.

Neste momento o "ficheiro wsdl", encontra-se da seguinte forma:

Citar

<xsd:complexType name="person">

<xsd:all>

<xsd:element name="id" type="xsd:int" value="1"/>
<xsd:element name="nome" type="xsd:string" value="João"/>
<xsd:element name="nacionalidade" type="xsd:string" value="portuguesa"/>

   </xsd:all>
</xsd:complexType>
Isto é gerado pelo nusoap.server, sem problemas. O meu problema encontra-se agora em ler esta informação, ou seja ler o conteúdo do campo "value", seja pelo 'Soap' ou pelo 'Nusoap'.
Pelo que tenho visto pela net, supostamente eu teria que ter uma função no servidor.

Código (PHP):
$server->register('hello',                                      // method name
        array('person' => 'tns:Person'),                  // input parameters
        array('return' => 'tns:SweepstakesGreeting'),   // output parameters
        'urn:hellowsdl2',                                                // namespace
        'urn:hellowsdl2#hello',                            // soapaction
        'rpc',                                                                  // style
        'encoded',                                                              // use
        'Greet a person entering the sweepstakes'               // documentation
);
// Define the method as a PHP function
function hello($person) {
   return array($person['id'], $person['nome'], $person['nacionalidade']);
}
Mas esta função (hello) pelo que percebo apenas me devolve uma única pessoa..e eu queria ler todos os conteúdos que estão no ficheiro
Porque o documento, no final, vai ficar assim:

Citar

<xsd:complexType name="person 1">

<xsd:all>

<xsd:element name="id" type="xsd:int" value="1"/>
<xsd:element name="nome" type="xsd:string" value="João"/>
<xsd:element name="nacionalidade" type="xsd:string" value="portuguesa"/>

   </xsd:all>
</xsd:complexType>

<xsd:complexType name="person 2">

<xsd:all>

<xsd:element name="id" type="xsd:int" value="1"/>
<xsd:element name="nome" type="xsd:string" value="João"/>
<xsd:element name="nacionalidade" type="xsd:string" value="portuguesa"/>

   </xsd:all>
</xsd:complexType>
Então, no ficheiro cliente tenho algo do género:

Código (PHP):
require_once('nusoap/lib/nusoap.php');
   $namespace = '[url="http://localhost/exemplo/servidor.php?wsdl%27;"]http://localhost/exemplo/servidor.php?wsdl';[/url]
   $client = new nusoap_client($namespace, 'wsdl');
   $result = $client->call('hello', array('person' => 'jaqim'));
   print_r($result);
Que não funciona. E eu compreendo porquê, tenho é tentado adaptar o que vejo na net ao que preciso.

Ideias?

Viewing all articles
Browse latest Browse all 14700