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>