Erro de caractere inválido

26/04/2010

Boa noite,

Prezados, estou com erro "caractere inválido" em um sistema soap, não é em todas as
consultas que apresenta esse erro.


na versão do WSDL é
<?xml version="1.0" encoding="ISO-8859-1"?>

quando importo para o delphi fica da senguite forma NO .PAS
InvRegistry.RegisterInterface(TypeInfo(MacMensageria), 'http://www.xxxx.com.br/XXXXMacMensageria/', 'UTF-8');

Existe uma forma de deixar esses carateres compativel com o delphi?
Existe algum parametro de configuração no Delphi 2010 que arruma-se esse problema?

Help.

Henrique



Henrique Rocha

Henrique Rocha

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

26/04/2010

Olá amigo, teria como mandar o exemplo ? para podermos analisar melhor

Um abraço

Wesley Y
GOSTEI 0
Henrique Rocha

Henrique Rocha

26/04/2010

um trecho que retorna erro é esse:

       <dataVencimentoLimiteCredito>1900-01-01</dataVencimentoLimiteCredito>
               <qtdeParcelasEmAtraso>1</qtdeParcelasEmAtraso>
               <qtdeParcelasPagas>0</qtdeParcelasPagas>
               <qtdeParcelasAVencer>0</qtdeParcelasAVencer>
               <nomeAssessoria>XXXC SERVIyOS DE COBRANyA E TELEMARK</nomeAssessoria>
               <dddAssessoriar>11</dddAssessoria>
               <telAssessoria>33343463</telAssessoria>
               <nomeCredenciadoJsg/>
               <dddCredenciadoJsg>0</dddCredenciadoJsg>
               <telCredenciadoJsg>0</telCredenciadoJsg>
       
 problema do caracter inválido: ONDE OS CARTACTES COM Ç retorno um y

Achei um post com esse problema porém ele usa um documento XML, no meu
caso uso soap.   segue o link
http://www.caiooliveira.com.br/?p=422

Existe alguma diretiva no compilador do delphi 2010 onde eu deixe que ele faça
a conversão automática?

Ou tenho que configurar alguma coisa no Delphi?

Obrigado.

Henrique
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

26/04/2010

Olá amigo,

  Estou pesquisando por aqui, peço que aguarde um pouco, teria como me mandar o link para que eu pudesse fazer um teste de importação aqui ?

Att,

Wesley Y
GOSTEI 0
Henrique Rocha

Henrique Rocha

26/04/2010

Infelizmente não posso, pois é um arquivo.wsdl de um cliente, e tenho que
manter confidencialidade.

Mas é um wdsl soup. segue um trecho do arquivo:

<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.XXXX.com.br/XXXXMacMensageria/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="XXXXMacMensageria" targetNamespace="http://www.XXXX.com.br/XXXXMacMensageria/">     <wsdl:types>     <xsd:schema xmlns:mrm="http://www.XXXX.com.br/XXXXMacMensageria/" targetNamespace="http://www.XXXX.com.br/XXXXMacMensageria/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.XXXX.com.br/XXXXMacMensageria/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">       <xsd:element name="consultarInformacoesCobrancaResponse" type="mrm:ConsultarInformacoesCobrancaResponse"/>       <xsd:element name="consultarInformacoesCobrancaRequest" type="mrm:ConsultarInformacoesCobrancaRequest"/>       <xsd:complexType name="ConsultarInformacoesCobrancaRequest">         <xsd:sequence>             <xsd:element name="codigoAssessoriaCyber" type="xsd:int"                         minOccurs="1" maxOccurs="1">                         <xsd:annotation>                                    <xsd:documentation>                                                Código da assessoria no cyber                                    </xsd:documentation>                         </xsd:annotation>             </xsd:element>             <xsd:element name="contaCorrente" type="xsd:long"                         minOccurs="1" maxOccurs="1" />             <xsd:element name="codigoIdentificacaoOperador"                         minOccurs="1" maxOccurs="1" type="xsd:string">                         <xsd:annotation>                                    <xsd:documentation>                                                Código do operador que está realizando a                                                operação                                    </xsd:documentation>                         </xsd:annotation>             </xsd:element>             <xsd:element name="tipoPessoa" minOccurs="1" maxOccurs="1"                         type="xsd:string">                         <xsd:annotation>                                    <xsd:documentation>                                                Tipo de pessoa do CPF/CNPJ Informado. "F" para                                                pessoa física, "J" para pessoa jurídica                                    </xsd:documentation>                         </xsd:annotation>             </xsd:element>             <xsd:element name="cpfCnpj" minOccurs="1" maxOccurs="1"                         type="xsd:long">                         <xsd:annotation>                                    <xsd:documentation>                                                CPF/CNPJ do cliente a ser pesquisado                                    </xsd:documentation>                         </xsd:annotation>             </xsd:element>
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

26/04/2010

Olá amigo,

   Seguinte andei pesquisando aqui e achei um material explicativo sobre o problema.


Ao consumir em Delphi win32 Webservices escritos em Delphi .Net 1.1(e noutras plataformas também), podem ocorrer erros relacionados com caracteres acentuados e cedilhados.

Por exemplo ao tentar enviar este tipo de caracteres, estes podem não ser interpretados e aparecer no seu lugar outros símbolos (??##). Ocorre porque no SOAP interface criado a partir do WSDLImporter não fica especificado o Encoding correcto e ao ser criado SOAP Envelope este converte os caracteres noutro simbolo.

Para o fazer devemos explicitamente declarar o uso de um encoding no Header do SOAP Envelope. No HTTPRio:

HTTPRIO.HTTPWebNode.UseUTF8InHeader := True ;

Tente incluir esta clausula para ver se resolvemos o problema, me avisa que senão resolver damos outro jeito.



Um abraço


Wesley Y

GOSTEI 0
Henrique Rocha

Henrique Rocha

26/04/2010

Boa tarde!

incluir a clausula mas o erro persiste, veja o codigo abaixo se esta correto.

segue a função:

function GetMacMensageria(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): MacMensageria;
const
  defWSDL = 'XXXXXMacMensageria.wsdl';
  defURL  = 'https://XXX.XX.X.XXX:XXXXX/MacMensageria';
  defSvc  = 'XXXXmacMensageria';
  defPrt  = 'MacMensageriaSOAP';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defURL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
    RIO.HTTPWebNode.UseUTF8InHeader := True ;
  try
    Result := (RIO as MacMensageria);
    RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;


achei outra solução mas não sei como usar segue o link...
http://www.galhano.com/firebirdpt/?p=100


No aguardo,
obrigado.
Henrique




GOSTEI 0
Wesley Yamazack

Wesley Yamazack

26/04/2010

Olá amigo, estou pesquisando tentando achar uma soluçao peço desculpas , mas poderia aguardar mais um pouco ?

Att,

Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

26/04/2010

Olá amigo,

  Andei pesquisando e consultando outras fontes, isso esta me parecendo problema de Unicode, você teria que ver com quem fez o WebService, como os dados tem que trafegar, se é por UTF8 ou algum outro tipo. Descobrindo isso você conseguira ter ideia de como trafegar mas para isso tem que descobrir o padrão primeiro.

Att,

Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

26/04/2010

Olá amigo, consegui ver a documentação para saber como fazer a comunicação correta?

Att,
Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

26/04/2010

Olá amigo, e ai consegui algum progresso na documentação ?Descobriu se é UTF8 ou algum outro ?

Um abraço

Wesley Y
GOSTEI 0
Devmedia

Devmedia

26/04/2010

Henrique, por falta de retorno estamos encerrando o seu chamado. Caso vc ainda tenha dúvidas, por favor, volte a postar aqui mesmo nesse chamado que o consultor voltará a lhe atender e o chamado será reaberto.
GOSTEI 0
POSTAR