Problema ao conectar webservice cep

Discussão em 'Progress 4GL' iniciado por cauepor, Outubro 4, 2012.

  1. cauepor

    cauepor Sem Pontuação

    Galera, seguinte, faz algum tempo que mexo com progress porém nunca utilizei muito os objetos de conexão, e estou tendo problema para implementar uma consulta a um web service publico ex: "http://cep.republicavirtual.com.br/web_cep.php?cep=79102030" , eu gostaria de conecar no webservice e receber toda a consulta deste cep em um arquivo xml, ai vem o problema, eu utilizei alguns scripts que já li aqui no fórum mas o problema esta na hora de conectar no webservice. Eu coloquei uma mensagem caso a conexao nao ocorra e sempre a conexao falha.

    Utilizei o bprowsdldoc em cima do endereco ( http://cep.republicavirtual.com.br/web_ ... p=79102030, http://cep.republicavirtual.com.br/web_cep.php?cep, http://cep.republicavirtual.com.br/web_cep.php) e todos retornam o mesmo erro: "cannot get 'iso-8859-1' transcoder from the transcoder repository", então não sei mais o que fazer, segue abaixo o código que adaptei e tentei utilizar:

    Código:
    DEFINE VARIABLE pcXml               AS HANDLE    NO-UNDO.
    DEFINE VARIABLE hWebService         AS HANDLE    NO-UNDO.
    DEFINE VARIABLE hManterEstadoRemote AS HANDLE    NO-UNDO.
    DEFINE VARIABLE lOk                 AS LOGICAL   NO-UNDO.
    DEFINE VARIABLE lcReturn            AS LONGCHAR  NO-UNDO.
    
    CREATE SERVER hWebService.
    
    lOk = hWebService:CONNECT("-WSDL 'http://cep.republicavirtual.com.br/web_cep.php?cep=79102030'") NO-ERROR.
    
    IF NOT lOk THEN DO:
        
        DELETE OBJECT hWebService NO-ERROR.
    
        MESSAGE "Serviço indisponível!"
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
        
    END.
    
    RUN ManterEstadoRemote SET hManterEstadoRemote ON hWebService NO-ERROR.
    IF NOT VALID-HANDLE (hManterEstadoRemote) THEN DO:
        hWebService:DISCONNECT () NO-ERROR.
        DELETE OBJECT hWebService NO-ERROR.
    
        MESSAGE "Erro ao estabelecer PortType."
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
        
    END.
    
    RUN consultar IN hManterEstadoRemote(INPUT pcXml, OUTPUT lcReturn) NO-ERROR.
    
    OUTPUT TO c:\spool\valor.xml.
    EXPORT lcReturn.
    OUTPUT CLOSE.
    
    IF VALID-HANDLE(ERROR-STATUS:ERROR-OBJECT-DETAIL) THEN DO:
        lcReturn = STRING(ERROR-STATUS).
        DELETE PROCEDURE hManterEstadoRemote NO-ERROR.
        hWebService:DISCONNECT () NO-ERROR.
        DELETE OBJECT hWebService NO-ERROR.
        
        MESSAGE STRING(lcReturn)
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
        
    END.
    
    IF ERROR-STATUS:ERROR THEN DO:
        DELETE PROCEDURE hManterEstadoRemote NO-ERROR.
        hWebService:DISCONNECT () NO-ERROR.
        DELETE OBJECT hWebService NO-ERROR.
        RETURN "ERROR-STATUS:ERROR:~n[" + ERROR-STATUS:GET-MESSAGE(1) + "].".
    END.
    
    DELETE PROCEDURE hManterEstadoRemote NO-ERROR.
    hWebService:DISCONNECT () NO-ERROR.
    DELETE OBJECT hWebService NO-ERROR.
    
  2. costa

    costa Sem Pontuação

    Boa Noite

    Cauper, tambem não conheço muito de webservice (comecei a mexer recentemente), mas me parece que esse endereço não tem um retorno em wsdl, como é usado no progress com webservice. Esse endereço simplesmente retorna um XML para voce.
    Andei dando uma fuçada e encontrei esse: http://www.byjg.com.br/site/webservice.php/ws/cep?WSDL não sei se está funcionando, nem se é gratis, mas quando coloquei no bprowsdldoc, ele gerou toda a documentação correta, mostrando as procedures.
    Só não testei se os dados estão lá. tente dar uma olhada.

    Amanhã tento fazer um teste, vlw.
  3. cauepor

    cauepor Sem Pontuação

    Costa, a "documentacao" que o proenv gerou foi um index.html com apenas isto de codigo:


    Código:
    <html>
    <head>
    <meta http-equiv='refresh' content='0;url=service_urn_CEPService_CEPService.html'>
    </head>
    </html>

    A que você gerou foi só isso mesmo? eu utilizei a sintaxe "bprowsdldoc http://www.byjg.com.br/site/webservice.php/ws/cep?WSDL" e dei enter, só fiz isso mesmo, tem algum dos parametros que tem de ser utilizado no bprowsdldoc pra gerar algo mais completo? Eu pensei que ele ia gerar umas procedures de exemplo e talz...
  4. LeandroSantos

    LeandroSantos Membro Participativo

    Fiz a consulta, mas utilizei um X-DOCUMENT, segue exemplo:
    Código:
    def var hXDOC     as handle no-undo.
    def var hRoot     as handle no-undo.
    def var hBuff     as handle no-undo.
    def var hField    as handle no-undo.
    def var vCEP      as char format "99999-999".
    
    def temp-table tt-Resposta
       field uf                as char  format "XX"
       field cidade            as char  format "X(25)"
       field bairro            as char  format "X(25)"
       field tipo_logradouro   as char  format "X(10)"
       field logradouro        as char  format "X(50)"
       field resultado         as char  format "X(5)"
       field resultado_txt     as char  format "X(25)".
    
    update vCEP.
    
    create tt-Resposta.
    assign
       hBuff = buffer tt-Resposta:handle.
    create x-document hXDOC.
    hXDOC:load("file","http://cep.republicavirtual.com.br/web_cep.php?cep=" + vCEP + "&formato=xml", false).
    create x-noderef hRoot.
    hXDoc:get-document-element(hRoot).
    run obtemnode (input hRoot).
    
    disp 
       tt-resposta 
       with frame f1 1 col.
    
    /* hXDOC:save("file","L:\CEPRetorno.xml"). */
    
    if valid-handle (hXDoc) then
       delete object hXDoc.
    if valid-handle (hRoot) then
       delete object hRoot.
    
    
    procedure obtemnode.
       def input parameter vh as handle.
       def var hc     as handle.
       def var loop   as int.
      
       create x-noderef hc.
      
       do loop = 1 to vh:num-children.
          vh:get-child(hc,loop).
          if hc:subtype = "text"
          then do:
             assign
                hField = hBuff:buffer-field(vh:name)
                no-error.
             if valid-handle(hField) then
                assign
                   hField:buffer-value = hc:node-value.
          end.
          run obtemnode (input hc:handle).
       end.
    end.
  5. cauepor

    cauepor Sem Pontuação

    Caraca LeandroSantos, muuuuuuuito obrigado, consegui entender a logica quase 100%, tenho de me acostumar a usar mais esses objetos no progress...hj programo muito estruturado em cima dele devido a facil manutencao...vlw mesmo, isso resolveu meu problema, podem fechar o topico, duvida resolvida!!
  6. DFResmer

    DFResmer Membro Participativo

    Testei esta opção no progress versão 8.2 e não dá certo....
    Dá erro em algumas aplicações.

    Att,

    Diogo

Compartilhe esta Página