Até agora, vimos apenas a criação e a utilização de serviços simples que desempenham tarefas muito simples. Num cenário mais global devíamos pensar na utilização de um namespace quando estamos a criar um serviço e declarar as funcionalidades que queremos expôr dentro desse namespace. Mais tarde será mais fácil integrar serviços.
Atendendo a este requisito o nosso servidor hello teria o seguinte aspeto.
Exemplo 2.8. Servidor usando NameSpaces para registar os métodos
// Register the method to expose $server->register( 'hello', // method name array('name' => 'xsd:string'), // input parameters array('return' => 'xsd:string'), // output parameters 'uri:ws.di.uminho.pt/Hello', // namespace 'uri:ws.di.uminho.pt/Hello/hello', // SOAPAction 'rpc', // style 'encoded' // use ); ...
Por sua vez, o cliente do serviço passaria a invocá-lo da seguinte forma:
Exemplo 2.9. Cliente usando NameSpaces
... // Call the SOAP method $result = $client->call( 'hello', // method name array('name' => 'José Carlos Ramalho'), // input parameters 'uri:ws.di.uminho.pt/Hello', // namespace 'uri:ws.di.uminho.pt/Hello/hello' // SOAPAction ); ...
Este cliente gera o seguinte pedido SOAP:
Exemplo 2.10. Pedido SOAP com NameSpaces
POST /nusoap-0.9.5/Hello/serv-hello-ns.php HTTP/1.0 Host: localhost:8888 User-Agent: NuSOAP/0.9.5 (1.123) Content-Type: text/xml; charset=ISO-8859-1 SOAPAction: "uri:ws.di.uminho.pt/Hello/hello" Content-Length: 522 <?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/"> <SOAP-ENV:Body> <ns9531:hello xmlns:ns9531="uri:ws.di.uminho.pt/Hello"> <name xsi:type="xsd:string">José Carlos Ramalho</name> </ns9531:hello> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Note a utilização dos namespaces e de um elemento específico para o parâmetro na mensagem que é enviada.
A resposta a este pedido vem no formato que se mostra a seguir.
Exemplo 2.11. Resposta com NameSpaces
HTTP/1.1 200 OK Date: Fri, 14 Dec 2012 10:45:53 GMT Server: Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8r DAV/2 PHP/5.3.6 X-Powered-By: PHP/5.3.6 X-SOAP-Server: NuSOAP/0.9.5 (1.123) Content-Length: 529 Connection: close Content-Type: text/xml; charset=ISO-8859-1 <?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/"> <SOAP-ENV:Body> <ns1:helloResponse xmlns:ns1="uri:ws.di.uminho.pt/Hello"> <return xsi:type="xsd:string">Hello, José Carlos Ramalho</return> </ns1:helloResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>