A propósito de Webservices queria deixar aqui o meu contributo para quem precisa de invocar um Webservice a partir do Oracle PLSQL.
Quando precisei de utilizar um webservice na empresa onde trabalho, deparei-me que existe pouca informação na Net a explicar como se deve proceder para chamar um webservice apartir do PLSQL. Após encontrar vários artigos que explicavam como funciona mas, não davam dicas para solucionar os potenciais entraves tipicos na construção do serviço do lado do cliente.
Neste site pode-se encontrar toda a informação necessária para a construção da chamada ao webservice. Chamo a atenção para o facto de ser necessário compilar o package SOAP_API que faz toda a gestão da chamada ao webservice através do package utl_http disponivel a partir da versão 9i da base de dados.
Como complemento ao que está descrito nos artigos acima, queria acrescentar o seguinte:
- Tenham em atenção qual a versão HTTP que é suportada pelo vosso aplication server, visto que no meu caso só funcionou com http 1.0
- Para conseguirem obter texto com mais de 32767 caracteres por linha, devem usar no package soap_api a função read_text e não o read_line, p.e:
...
BEGIN
LOOP
UTL_HTTP.read_text( l_http_response, text_out);
Dbms_Lob.writeappend(l_envelope_ret, LENGTH(text_out), text_out);
end loop;
utl_http.end_response(l_http_response);
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
UTL_HTTP.end_response( l_http_response);
END;
...
Desta forma são retornados excertos de 32767 caracteres de cada iteração do ciclo. No meu caso, tinha que obter um PDF codificado em base 64 do webservice e isto eu muito jeito.
Mais tarde irei postar como fazer a descodificação do pdf base 64 para base 32
- A excepção end_of_body deve ser mantida pois sem ela pode acontecer de o read_text chegar ao fim do ficheiro e dar um erro "End of the body reached" que não impede a correcta execução do serviço
Até já.
Sem comentários:
Enviar um comentário