Tratamento de retorno via UTL_HTTP.

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
lrocha911
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qui, 29 Jul 2010 3:30 pm
Localização: SP

Pessoal não sei se já aconteceu com alguém mas vamos lá.

Aqui na empresa desenvolvemos um pacote para consumo de webservices que basicamente trata todos os tipos e maneiras de fazer o consumo de um WS, porém o que acontece e que na hora de receber alguns dados principalmente os dados com acentuação o meu sistema acaba trocando alguns caracteres e alterando para caracteres especiais.

Segue um exemplo do arquivo que esta voltando

Selecionar tudo

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <ListarNovosResponse xmlns="http://tempuri.org/">
         <ListarNovosResult>
            <CodigoMensagem>0</CodigoMensagem>
            <Mensagem>Pedido [u]não[/u] encontrado</Mensagem>         </ListarNovosResult>
      </ListarNovosResponse>
   </soap:Body>
</soap:Envelope>

O problema e que este metodo nos ate conseguimos abrir via browser e a formatação vem correta o problema esta quando trago isso para o banco, que nesta hora não sei se por conta do meu charset do banco ele traz desformatado.

bom se alguém tiver alguma sugestão do que possa ser agradeço.
cttahara
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qui, 04 Mar 2010 4:28 pm
Localização: SP

Tenta usar:

Selecionar tudo

UTL_HTTP.SET_BODY_CHARSET(utlREQUEST,'UTF-8');
cttahara
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qui, 04 Mar 2010 4:28 pm
Localização: SP

Desculpe, para complementar, pois ficou meio estranho:

Selecionar tudo

utlREQUEST:=UTL_HTTP.BEGIN_REQUEST('http://....','POST',UTL_HTTP.HTTP_VERSION_1_1);
UTL_HTTP.SET_BODY_CHARSET(utlREQUEST,'UTF-8');
UTL_HTTP.SET_HEADER(utlREQUEST,'User-Agent','Mozilla/4.0');
UTL_HTTP.SET_HEADER(utlREQUEST,'Content-Type','text/xml');
lrocha911
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qui, 29 Jul 2010 3:30 pm
Localização: SP

Este caracter eu já ate usava porém como estou fazendo e envio e recebimento de informações de um e-commerce para dentro do ERP acabava acontecendo que eu tinha que mandar as informações para cadastro num padrão ISO-8859-1, então tinha que deixar fixo no meu sistema esta informação.

Porém como eu já tinha uma tabela que controlava todos os parametros dos meus consumos de WS eu deixei mais uma parametro para que quando eu tiver que enviar dados eu uso num padrão ISO e quando tiver que consultar e receber dados recebo num padrão UTF.

Não foi a solução mais bonita do mundo, mas acho que resolve todos os meus problemas.

Valeu pela dica.

Abraço.
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

ola..

ainda com esta dica eu ainda persite o mesmo problema

Selecionar tudo

l_http_request := UTL_HTTP.begin_request(p_url, 'POST',UTL_HTTP.HTTP_VERSION_1_1);
  UTL_HTTP.SET_BODY_CHARSET(l_http_request,'UTF-8');
  UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/xml;');
  UTL_HTTP.set_header(l_http_request, 'Content-Length', LENGTH(l_envelope));
UTL_HTTP.set_header(l_http_request, 'SOAPAction', p_action);
  UTL_HTTP.write_text(l_http_request, l_envelope);
  l_http_response := UTL_HTTP.get_response(l_http_request);
  DBMS_LOB.CREATETEMPORARY(aux1,TRUE);
  loop
    UTL_HTTP.read_text(l_http_response, l_envelope);
    dbms_lob.writeappend(aux1,length(l_envelope),l_envelope);
    exit when length(l_envelope) < 32767;
  end loop;
alguém tem mais alguma dica ou algo q eu posso trocar?
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes