Web Services Com o Erp Microsiga Protheus

March 31, 2018 | Author: Samuel Oliveira | Category: Web Service, Hypertext Transfer Protocol, Server (Computing), World Wide Web, Technology


Comments



Description

Web Services com o ERP Microsiga ProtheusConteúdo da TOTVS Developer Network revisado em 21/05/2012 que abrange as versões 10 e 11 Organizado por Armando Lima. O ERP Microsiga Protheus, a partir da versão AP7, possui ferramentas nativas e integradas com a LIB de infraestrutura do ERP, para desenvolvimento de aplicações 'Cliente' e 'Server', utilizando a tecnologia dos Web Services. Para melhor compreensão do assunto, os tópicos relacionados a ambos foram didaticamente separados em Aplicações Server e Aplicações Client, respectivamente. Nos tópicos Guia de referência dos comandos AdvPL, da linguagem AdvPL, e Funções de WebServices, do Framework Microsiga Protheus, são abordadas respectivamente as diretivas e funções da LIB de infraestrutura do ERP disponibilizadas para o desenvolvimento de ambas as aplicações Cliente e Server. No tópico Exemplos AdvPL, são apresentados os exemplos de uso das funções e comandos. Web Services 'Server' 01. Web Services 'Server' - Configuração Um Web Services em AdvPL utiliza-se de working threads para atender as solicitações de processamento através do protocolo HTTP. Para isso, existem duas maneiras de habilitar um Web Services: Através da criação da seção [WebServices], no arquivo de configuração (appserver.ini), do TOTVS | Application Server. Configuração manual de um ambiente working threads extended (WEBEX), no arquivo de configuração (appserver.ini), do TOTVS | Application Server. A diferença entre ambas é que a segunda opção permite especificar mais detalhes do ambiente de execução do serviço, configurar os serviços de Web Sites simultaneamente e o atendimento diferenciado do processamento para mais de um host e diretórios virtuais. Importante: Se estiver utilizando o produto Microsiga Protheus 8.11, deve-se utilizar o assistente de configuração do servidor Microsiga Protheus - MP8WIZARD, para instalar e configurar o ambiente de Web Services. A seguir, observe um exemplo de como configurar o servidor TOTVS | Application Server para Web Services, utilizando a seção [WebServices]. Observação: Esta configuração exige que a seção [HTTP] não esteja configurada no TOTVS | Application Server. Pois, essa configuração irá internamente habilitar o serviço de HTTP e configurar o processo de resposta para o Web Services. Exemplo (Configurações do arquivo appserver.ini) [WebServices] Enable=1 (Obrigatório) - Indica se o service está habilitado (1) ou não (0). Environment=EnvTeste (Obrigatório) - Indica qual environment do Server que irá atender as requisições. Conout=0 (Opcional) - Permite a exibição de informações dos status internos do serviço (padrão=0:desabilitado). Utilizado APENAS para depuração, em casos específicos, pois prejudica significativamente a performance do(s) serviço(s). Trace=0 (Opcional) - Habilita a gravação de um arquivo de log (wsstrace.log), contendo as informações sobre todas as chamadas e status do Web Service (padrão=0). PrepareIn=01,01 (Obrigatório) - Permite especificar qual a empresa e filial do ERP serão utilizados para a montagem do ambiente de processamento das requisições. NameSpace=http://localhost (Opcional) - Permite especificar o nome do namespace 'padrão', utilizado pelo(s) serviço(s) compilado(s) sem a definição de 'NameSpace'. (Padrão=host atualmente utilizado). URLLocation=http://localhost (Opcional) - Permite especificar a URL responsável pelo atendimento às solicitações de processamento do(s) serviço(s) (padrão=host atualmente utilizado). No entanto, é possível configurar o Web Service manualmente. Para isso, deve-se inicialmente habilitar o serviço de HTTP, do servidor Microsiga Protheus, configurar um processo WEBEX apontando para funções internas de processamento dos Web Services e configurar um host através do qual as requisições de processamento serão atendidas. Exemplo (Configuração do protocolo) [HTTP] Enable=1 (Obrigatório) - Indica se o service está habilitado (1) ou não (0). Port=80 (Obrigatório) - Indica qual a porta que será utilizada pelo service. Path=c:\P10\Http Configuração do host da estação localDefaultpage=wsindex.apw (Obrigatório) - Indica a página inicial que será exibida após a configuração do service. Essa página apresenta todos os WebServices habilitados e não habilitados.Ela só é exibida se todas as configurações foram efetuadas com sucesso. ResponseJob=WSTeste Configuração do job para atender aos Web Services. Type=WEBEX (Obrigatório) - Tipo do job para Web Services deve ser WEBEX. OnStart=__WSSTART (Obrigatório) - Configuração fixa para Web Services. OnConnect=__WSCONNECT (Obrigatório) - Configuração fixa para Web Services. Environment=ENVTeste Especifique qual ambiente (environment) do servidor Microsiga Protheus que irá atender aos Web Services. Instances=2.5 (Obrigatório) - Indica qual a quantidade mínima (padrão) e máxima de processos (Threads) que serão colocados na memória para atender às solicitações de processamento do(s) serviço(s) publicado(s). Conout=0 (Opcional) - Permite a exibição de informações dos status internos do serviço (padrão=0:desabilitado). Utilizado APENAS para depuração, em casos específicos, pois prejudica significativamente a performance do(s) serviço(s). Trace=1 (Opcional) - Habilita a gravação de um arquivo de log (wsstrace.log), contendo as informações sobre todas as chamadas e status do Web Services (padrão=0). PrepareIn=01,01 (Obrigatório) - Permite especificar qual empresa e filial, do ERP, serão utilizados para a montagem do ambiente de processamento das requisições. NameSpace=http://localhost/ (Opcional) - Permite especificar o nome do namespace 'padrão', utilizado pelo(s) serviço(s) compilado(s) sem a definição de 'NameSpace'. (padrão=host atualmente utilizado). URLLocation=http://localhost/ (Opcional) - Permite especificar a URL responsável pelo atendimento às solicitações de processamento do(s) serviço(s) (padrão=host atualmente utilizado). Observação: Note que a porta utilizada no exemplo acima foi a 80, a porta mais genérica de todas. Por isso não foi necessário incluí-la nos URL’s de localhost. Se fosse utilizada a porta 81, então a URL seria localhost:81. Release 12/08/2010 Foram criados mais dois parâmetros de registro de log de profiler de execução de processos, para auxiliar na identificação de ocorrências de performance no processamento de requisições, parâmetro PROFILE (padrão=0) e PROFILETIMER (padrão=2). Tais parâmetros são considerados a partir da atualização da LIB/Framework AdvPL, AdvPL WSDL Server 1.100812, e da atualização do TOTVS | Application Server com build igual ou superior a 7.00.090818P. Para registro detalhado das chamadas de função por requisição, deve-se atualizar o TOTVS | Application Server para a build igual ou superior a 7.00.100812P. Ao habilitar o parâmetro PROFILE=1, na configuração do job de Web Services, a partir da próxima requisição recebida para processamento por qualquer working thread deste job, caso a mesma permaneça em processamento mais tempo em segundos do que o configurado no parâmetro PROFILETIMER (padrão=2), será criada uma pasta chamada WSPROFILER, a partir do RootPath do ambiente em execução, e dentro dela será criado um arquivo dinamicamente, contendo todos os detalhes de processo chamado e registro de resumo de chamada de funções executadas por este processo. WSINDEX - Índice de Serviços Uma vez habilitada a configuração para Web Services, obtemos acesso a uma interface HTTP de consulta ao índice de serviços publicados. Para tal, basta reiniciar o servidor TOTVS | Application Server após a configuração ser realizada, abrir um Web Browser (por exemplo, Internet Explorer), e acessar o link http://<servidor>/wsindex.apw. No caso do exemplo de configuração acima, informe o endereço http://localhost/wsindex.apw e observe a interface de consulta ao índice dos serviços. Se estiver utilizando o sistema Microsiga Protheus 10, a tela apresentada será semelhante ao exemplo abaixo: Observe que, na janela acima, são apresentados todos os serviços compilados e disponibilizados no repositório de objetos em uso no ambiente configurado. Através dessa janela, é possível obter mais detalhes de cada um dos serviços compilados. Pois, cada serviço ativo é um link para uma página que apresentará todos os métodos do serviço com um link do servidor TOTVS | Application Server que fornecerá a descrição do serviço (WSDL). Observe, a seguir, um exemplo com os detalhes do serviço CFGTABLE. . é possível obter a descrição do serviço WSDL ao clicar no link disponível em "Descrição do Serviço (WSDL)". Ao clicar neste link. Além disso.uma nova janela será apresentada exibindo o documento WSDL do serviço. cada método do serviço disponibilizado também é um link para uma página onde são apresentados os exemplos de pacotes SOAP que esse método especificamente espera para recepção de parâmetros e o modelo de retorno do serviço.Através desta janela. o pacote de retorno do serviço e seu respectivo status são retornados no browse. antes de iniciar a codificação. onde são abordados em detalhes a infraestrutura envolvida com os Web Services. no TOTVS | Application Server. chamada WSService(). Após determinar essas informações. a interface de consulta habilita a funcionalidade de teste do Web Services. o fonte-client AdvPL do serviço. que constituirá o serviço. seu funcionamento e particularidades de comportamento da classe de Web Services. . é expressamente recomendado que sejam lidos todos os artigos do tópico Aplicações Server. deve-se codificar uma classe especial da linguagem AdvPL.Caso. 02. Ao clicar nesse botão. será montada uma tela HTML para que os parâmetros do serviço sejam preenchidos. apresentado no final da tela o botão testar. através da interface HTTP. Após o preencher os parâmetros solicitados e submetê-los. seja gerado e esteja compilado no repositório atual. deve-se inicialmente determinar os métodos aos quais o serviço se destina para então determinar os parâmetros e retorno de cada métodos. Criando um Web Services 'Server' com o sistema Microsiga Protheus Uma vez configurado e habilitado os Web Services. No entanto. como também atenção a alguns pontos e particularidades. parâmetros e retorno Cada parâmetro e retorno de todos os métodos de um serviço. de qualquer serviço ou método de qualquer cliente. Nomenclatura das propriedades. com efeitos imprevisíveis. começando pela nomenclatura do serviço. devem ser declarados como uma propriedade da classe do serviço. foram criadas na linguagem AdvPL instruções especiais de declaração de classes. pois isto pode causar impacto no funcionamento de todos os Web Services compilados e ativos neste servidor. Nomenclatura de estruturas O nome dado a uma estrutura obedece as mesmas regras da nomenclatura de serviços. Nomenclatura dos serviços O nome de uma classe para Web Service. Para dar nome a estes. que suportam nome longos no nome da classe. da linguagem AdvPL. estruturas. Características operacionais do ambiente É muito importante estar atento ao desenvolver os métodos de Web Services. devido às características operacionais do ambiente de Working Threads utilizado pelo Web Service. de modo que não pode-se compilar duas estruturas de mesmo nome no mesmo repositório. aguardando uma nova requisição de processamento. métodos e propriedades. Para isso. o ambiente será mantido no ar. Ou seja. . os caracteres numéricos compreendidos entre 0 e 9. Deste modo. Um serviço não pode ter o nome de uma palavra reservada. Uma estrutura constitui um agrupamento de dados. ao desenvolver um serviço. não deve-se deixar abertas as queries utilizadas no método.ch. específicas para Web Services. Ao executar um método do Web Service. Além disso. criado como um comando especial (WSSTRUCT) em AdvPL. são válidas as mesmas regras da nomenclatura de serviços. realizadas para o processamento de um método específico.03. não podendo haver um dado com o mesmo nome de um serviço ou estrutura já declarados anteriormente. quando for necessário agrupar um conjunto de dados básicos e/ou outras estruturas em um único tipo de informação. podendo também ser utilizado o caracter "_" (underline). Regras para codificação de um Web Service Visão Geral Para codificação de um Web Service. no início do código fonte. que será utilizada como parâmetro e/ou retorno em um ou mais métodos do serviço. A utilização destes comandos exige a declaração da #include totvswebsrv. não pode haver uma estrutura com o mesmo nome de um serviço declarado. deve-se criar de uma estrutura para um serviço. deve ser iniciada por um caractere alfabético e deve conter apenas os caracteres alfabéticos compreendidos entre A e Z. ou ter o nome igual a um tipo básico de informação. métodos e propriedades. é importante estar atento ao fato de uma estrutura não estar diretamente ligada ao serviço em questão. filtros setados em tabelas principais ou configurações específicas não-padrão do ambiente. Dado AdvPL do tipo data. São considerados e suportados. de modo que a mesma estrutura pode ser utilizada para mais de um serviço compilado no repositório. por exemplo ima imagem JPEG. Deve-se atentar ao limite de string do AdvPL.Tipos complexos Uma estrutura (também conhecida por complex type).04. o WSDL gerado pelo Server informará o uso deste tipo de informação. Estruturas . constitui um comando especial da linguagem AdvPL. GIF. deve-se criar uma estrutura quando tiver a necessidade de agrupar mais de uma informação. Dado AdvPL do tipo booleano (lógico). contemplado pelo tipo de dado "C" Caractere do AdvPL. criado especificamente para Web Services. os dados cadastrais de um cliente. como sendo uma constante. os seguintes tipos básicos: Tipo String Date Integer Float Boolean Base64Binary Descrição Dado AdvPL do tipo string. escrita desta maneira. No entanto. de CHR(0) à CHR(255). de 1 MB . do TOTVS | Application Server. Lembre-se que o Web Service foi criado originalmente para requisições curtas. deve-se especificar o tipo de informação de cada parâmetro e retorno.'Server' Ao escrever um Web Service 'Server'. Logo. é recomendado que seja dado um nome à mesma que tenha a ver com o serviço ao qual ela pertença. por exemplo. deve-se criar uma estrutura para agrupar esses dados. como o FTP por exemplo. acentuação. que permite conteúdo binário. existem protocolos mais interessantes. onde usamos um tipo Base64Binary. em conformidade com a especificação SOAP. quando da declaração dos parâmetros e retorno. ocasionando erro de sintaxe da compilação do Web Service. O Tipo de dado Base64Binary é tratado automaticamente e de forma transparente no AdvPL. etc. conteúdos binários. Observação: Ao declarar uma propriedade como sendo do tipo string. aceitando todos os caracteres da tabela ASCII. é interpretada pelo pré-compilador. A palavra STRING. leves e rápidas. a aplicação AdvPL já receberá o conteúdo binario equivalente. Um conteúdo em String. vale ressaltar que. sem a necessidade explícita de conversão. que não devem estar sujeitas a tratamento de encoding. pelo TOTVS | Application Server. ou outra sequência de bytes binária. uma string binária com mais de 760 Kb não será suportada para conversão em Base64Binary e vice-versa. chamado WSSTRUCT. quando criamos uma classe Server de Web Services. e quando um programa Client enviar um conteúdo esperado na requisição XML com este tipo de informação. a declaração de uma estrutura não amarra a mesma ao serviço em questão. Isto signfica que. Desta forma. 05. . Isto se aplica também às interfaces CLIENT de Web Services : O conteúdo codificado em Base64Binary recebido e enviado via protocolo/requisições XML. Se existe a necessidade de trafego de grandes quantidades de dados binários de uma vez. Caso a estrutura criada seja específica para o serviço em questão. utilizada nos pacotes XML de troca de dados. já chega devidamente convertido para conteúdo binário nas propriedades do Client em AdvPL. Ao criar um serviço que deverá receber como parâmetro um grupo de informações definidas como. Dado AdvPL do tipo string binária. pois não é possível compilar mais de uma estrutura de mesmo nome no repositório. Tipos básicos de dados . não pode-se especificar a palavra string em letras maiúsculas. ao ser convertido para BASE64 pode ficar até 25 % maior. por exemplo. O tipo Base64Binary é utilizado quando da necessidade de trafegar. Dado AdvPL do tipo numérico (pode conter números inteiros e não-inteiros). Dado AdvPL do tipo numérico (apenas números inteiros). incluíndo tipos básicos e/ou outras estruturas. montagem e desmontagem de pacotes. que realiza a comunicação.T.). indica à LIB que. o pacote SOAP de retorno do método será montado pela LIB e devolvido. de tipo básico e/ou estruturas. Neste caso. o mesmo pode receber um ou mais parâmetros. informando que este serviço não é disponível aos domingos 4 Return . as propriedades declaradas como parâmetros do método são alimentadas e o método executado. sendo isto válido tanto para os parâmetros do método como para a propriedade de retorno. Endif // e retorna .F. Ao escrever um método de um Web Service. Não faz parte da especificação de Web Services a criação de um método que não possua retorno. Dada a existência de uma LIB de infra-estrutura. ou seja. Para isso. Caso o retorno efetivo do método seja falso (. por alguma razão tratada no código-fonte do método. declaramos a mesma na estrutura da classe do serviço.'Este serviço não funciona aos Domingos.F. Codificando o método em AdvPL Como visto anteriormente. damos a ela um nome para identificação. automaticamente. Retorno Um método de Web Service deve.06. Métodos 'Server' em AdvPL . consequentemente. Por tratarem-se de propriedades. // E retorna . Neste caso..T. Logo. ao client que solicitou a chamada de processamento. 5 ::Horario := time() // alimenta a propriedade de retorno 6 Return . obrigatoriamente. validação.') // Seta um soap_fault. Parâmetros Ao declarar o fonte de um método. indicando que o serviço não foi processado com sucesso. o código-fonte AdvPL deverá interagir com essas propriedades. e o mesmo receber uma solicitação de processamento. tanto os parâmetros quanto o retorno de um método de Web Service deve ser declarado com um dado da classe (através da instrução WSDATA). antes do retorno.Características Definição Um método de um Web Service consiste em uma ação que será disponibilizada no serviço.F. indica à LIB que o método foi executado com sucesso e.). prefixando-as com '::' (dois pontos seguidos) ou 'self:'. não foi possível a execução do método. deve-se especificar. através da função SetSoapFault(). têr uma propriedade de retorno.T. bem como seus parâmetros e respectivo retorno. e inclusive pode não receber parâmetro algum. Exemplo 1 WSMETHOD GetDate WSRECEIVE NULLPARAM WSSEND Horario WSSERVICE ServerTimeIf 2 dow(date())=1 3 SetSoapFault('Método não disponível'. O retorno efetivo do método deve ser um valor booleano: Se verdadeiro (. Ao codificar um método de Web Service existem sempre dois retornos: A propriedade de retorno do método e o retorno efetivo do método ao final do processamento. nenhum parâmetro. a causa da impossibilidade de processamento. indicando processamento do método com sucesso . a propriedade de retorno foi alimentada. devemos especificar que o parâmetro recebido será NULLPARAM. ). Caso o retorno efetivo seja falso (.T. deve-se utilizar a função SetSoapFaut(). inconsistência de retorno. deve ser retornado ao mesmo um pacote SOAP. quando da ocorrência de tal. Utilização do SOAP FAULT Quando desenvolvemos um serviço. a LIB retornará ao client solicitante um pacote de SOAP Fault. e condizentes com o esperado. desde advertência de carga dos serviços. Os tratamentos aplicados às ocorrências reproduzidas no momento da carga do ambiente de Web Services estão relacionados no tópico Falhas de Carga dos Serviços. caso o método retorne verdadeiro (. SOAP FAULTS padrão do servidor TOTVS | Application Server de Web Services A camada de comunicação da infraestrutura de Web Service realiza. com a seguinte ocorrência de erro: <SERVICO> : <METODO> RETURN .). WITH SOAP FAULT EXCEPTION NOT EMPTY. automaticamente. antes de realizar o processamento proposto. já se encarrega de validar o formato do pacote e conteúdos obrigatórios. Dado que.F.log na estação servidora. até as ocorrências de inconsistência de parâmetros de chamada do serviço. conhecido por SOAP FAULT.). ocorrências de erro fatal de processamento na aplicação e ocorrências de processamento que não constituam um erro fatal.F. porém a função SetSoapFault() tenha sido chamada durante a execução do método. porém devem retornar um pacote de ocorrência de erro. é conhecido por 'SOAP FAULT'. a função SetSoapFault() deve ser chamada para que a LIB gere um pacote com o motivo do erro para o client que solicitou o método. 08. indicando que houve um erro no processamento do serviço. validar se o conteúdo dos parâmetros está dentro da faixa de dados esperada. os tratamentos de protocolo. 07.Atenção: Sempre que o retorno efetivo do método é verdadeiro (. A rotina de tratamento de erro fatal de execução do Web Service. Caso não seja preenchida. uma ocorrência de falha não-fatal de um determinado processamento. gera automaticamente um 'SOAP FAULT' com a descrição resumida da ocorrência ao client solicitante. formato do pacote SOAP e parâmetros obrigatórios. em um serviço 'Server'. A ocorrência gerada é: <SERVICO> : <METODO> RETURN . a rotina de tratamento de erro da aplicação Web Services 'Server' prevê o tratamento de ocorrências. e temos a necessidade de retornar ao client solicitante do processamento. Para inserir as exceções de execução com SOAP FAULT. Além disso. que indica a causa da falha. Caso exista alguma inconsistência na chamada do serviço e .T.T. Este pacote. um Web Service escrito em AdvPL deve.). a camada da LIB. falhas de inicialização de ambiente. é devolvido à estação client solicitante do processamento um Soap:Fault. e registrar um error.F. Sempre que o retorno efetivo do método é falso (. a propriedade de retorno deve ser preenchida. e a discriminação da utilização do Soap Fault está descrita no tópico Utilização do Soap Fault. responsável pela interpretação do pacote SOAP recebido pelo serviço. e a função SetSoapFault() não tenha sido chamada. para então realizar o processamento e retornar ao client solicitante. será gerado também uma ocorrência de erro. Tratamento de erro dos Web Services Dada a infraestrutura envolvida no processamento dos Web Services. WITH SOAP FAULT EXCEPTION EMPTY. passando por erros que invalidam um determinado serviço compilado. . no formato hh:mm:ss. e nele escrever o serviço. 09. contendo as definições dos comando AdvPL e demais constantes. exista alguma propriedade de retorno obrigatório do serviço que não esteja alimentada de forma correta. mas exige que o Web Service sempre possua um retorno. o exemplo proposto tem o objetivo de montar um Web Service que retorne o horário no servidor Protheus. será criado um serviço com apenas (inicialmente) um método. o servidor TOTVS | Application Server devolve automaticamente ao client solicitante um SOAP FAULT. Linha 5 .incorra em alguma destas exceções. ao qual damos o nome de SERVERTIME. daremos a ele o nome de SERVERTIME. é definido o início da classe do serviço principal. Para isso. e são armazenadas no arquivo error.CH.T.Dentro da estrutura deste serviço. Linha 4 .log do ambiente utilizado. Essas ocorrências de SOAP FAULT são apresentadas no console. do TOTVS | Application Server. indicando o que aconteceu. é informado que um dos métodos do serviço chama-se GetServerTime. Essa numeração é utilizada mais abaixo. ela terá um retorno: O horário atual. deve-se utilizar o TOTVS | Development Studio.Com esta instrução. e será do tipo string. Linha 7 . Caso. é informado que um dos parâmetros utilizados chama-se horário.É especificada a include TOTVSWebSrv. Porém. Codificando o serviço Para codificar um serviço. E.CH’ WSSERVICE SERVERTIME WSDATA Horario as String WSMETHOD GetServerTime ENDWSSERVICE WSMETHOD GetServerTime WSRECEIVE NULLPARAM WSSEND Horario WSSERVICE SERVERTIME ::Horario := TIME() Return . ao método de buscar o horário no servidor. A operação de buscar o horário atual no servidor não necessita de nenhum parâmetro para execução. a estrutura do serviço é fechada com esta instrução. Linha 6 . indicando que ocorreu um erro interno no servidor de Web Services. Linha 2 . Serviço de exemplo SERVERTIME Inicialmente. A especificação de um WebService permite que um serviço seja declarado de modo a não receber nenhum parâmetro. e criar um novo arquivo de programa.É especificada a utilização da include TOTVS.Como não são mais necessárias mais propriedades ou métodos neste serviço. daremos o nome de GETSERVERTIME. Ele é obrigatório para o desenvolvimento de Web Services. que contém as definições de comandos e constantes utilizados nas declarações de estruturas e métodos do Web Services. não devendo ser digitada. Linha 1 . A este serviço. 1 2 3 4 5 6 7 8 9 10 11 #INCLUDE ‘TOTVS.Dentro da estrutura deste serviço. o serviço solicitado não é chamado e o servidor TOTVS | Application Server devolve automaticamente ao cliente solicitante um SOAP FAULT. onde o código fonte exemplo é detalhado linha a linha. SOAP FAULTS padrão após processamento do serviço A camada de comunicação de infraestrutura de Web Services válida também a montagem do pacote de retorno. A numeração disposta à esquerda do código fonte é meramente ilustrativa.CH’ #INCLUDE ‘TOTVSWEBSRV.CH. Falha de carga dos serviços Neste tópico. Linha 11 . Isso significa que o serviço em questão está sendo executado em ambiente local. então você consegue acessa a página de índices pelo endereço http://localhost/wsindex.Aqui é declarado o fonte do método GetServerTime. Testando o serviço Ao acessar a página de índice. e é informado que seu retorno será o dado Horario (declarado na classe do serviço como uma propriedade.Linha 9 .Server.O método GetServerTime é finalizado nesta linha. e constatar a existência do serviço. na carga dos Web Services. do tipo string). esta ocorrência é reproduzida quando um parâmetro [XXX] foi utilizado como parâmetro de entrada direto de um Web Services. Neste processo. existem ocorrências relacionadas à montagem do ambiente. alimentar os parâmetros e testar o serviço. 10. os serviços compilados são validados e um ambiente é montado por thread para o atendimento de solicitações de processamento. indicando que o serviço foi executado com sucesso. A partir da versão Protheus 8 Server. existe a necessidade de criar uma função para instanciar a classe client gerada. Após compilado o serviço. Observação: Não é suportado receber diretamente um array como parâmetro de um método de Web Services 'Server'.apw . podemos gerar um código-fonte client desta classe e compilá-lo no mesmo repositório do ambiente utilizado pelo Web Service 'Server'. Observe que. Porém. deve-se obter o link através do qual o WSDL deste serviço está sendo fornecido. abordaremos as mensagens de ocorrências relacionadas à carga dos serviços. o mesmo foi declarado com tratamento de "Array Of". XXX : Erro de Estrutura : ARRAY OF em parâmetro de entrada direto não suportado Durante a etapa de validação dos serviços. . e utilizarmos de uma ferramenta para gerar um client que possibilite o uso deste serviço. que a própria interface de índice de serviços permitirá o teste do mesmo. o retorno da função AdvPL Time(). O processo de geração do client será apresentado no Tópico Aplicações Client. utilizar o TOTVS | Development Studio para gerar o código-fonte client para testar o serviço. deve-se acessar novamente a página de índice de serviços (wsindex. que retorna a hora atual no servidor no formato HH:MM:SS. porém.T.apw) e verificar se o novo serviço compilado encontra-se lá. Mas já que estamos falando de Aplicações Web Service . Crie uma estrutura intermediária para encapsular o parâmetro que deve ter tratamento de array. de Web Services.É atribuído na propriedade ::Horario da classe deste serviço. inclusive. (verdadeiro). vamos concluir todos os conceitos referentes ao mesmo para depois darmos sequência as configurações. É possível. que não receberá parâmetro nenhum (mas para efeitos de declaração. deve-se utilizar "::" para alimentarmos a propriedade da classe atual. e ocorrências que podem invalidar apenas um serviço em caso de inconsistência da declaração do mesmo. Linha 10 . deve ser informado que ele receberá o parâmetro NULLPARAM). Solução Verifique e corrija o código-fonte. que podem impossibilitar a operação dos Web Services como um todo. onde será possível implementar o consumo desse serviço configurado. Se você seguiu as configurações desse documento. retornando . Durante a inicialização do engine. Solução Verifique e corrija o código-fonte para declarar o parâmetro YYY como uma propriedade da classe XXX. esta ocorrência é reproduzida quando o nome de uma determinada estrutura [XXX] foi especificada com um nome igual a um tipo básico de informação. esta ocorrência é reproduzida quando um determinado método [XXX] foi especificado com uma estrutura [YYY]. porém a declaração da estrutura não foi localizada. na carga dos Web Services. esta ocorrência é reproduzida quando uma propriedade da classe server foi especificada como sendo uma estrutura. Solução Verifique e corrija o código-fonte. [XXX] : [YYY] : Erro de Método : Estrutura de Retorno não encontrada Durante a etapa de validação dos serviços. esta ocorrência é reproduzida quando um determinado método [XXX] foi declarado para receber uma estrutura [YYY] e retornar a mesma estrutura [YYY]. Solução Verifique e corrija o código-fonte para proceder com a declaração da referida estrutura. na carga dos Web Services. na carga dos Web Services. na carga dos Web Services. cuja declaração não foi encontrada como uma propriedade no código-fonte construtor do serviço. Solução Verifique e corrija o código-fonte para declarar a propriedade YYY como uma propriedade da classe XXX. esta ocorrência é reproduzida quando um determinado método [XXX] foi especificado com algum parâmetro de entrada [YYY]. Observação: Esta ocorrência invalida apenas o serviço que utiliza a determinada estrutura. [XXX] : [YYY] : Erro de Método : Estrutura de Entrada não encontrada Durante a etapa de validação dos serviços. cuja declaração não foi encontrada como uma propriedade no código-fonte construtor do serviço. Isto não não é suportado pelos Web Services do sistema Microsiga Protheus. Erro de Método : Método [XXX] do Serviço [YYY] não declarado no serviço . no código-fonte.Erro de Estrutura: Estrutura Indefinida Durante a etapa de validação dos serviços. [XXX] : [YYY] : Erro de Método : Estrutura de Retorno não pode ser recebida como parâmetro Durante a etapa de validação dos serviços. [XXX] Erro de Estrutura : Nome de Estrutura Inválido . a declaração do tipo da estrutura. do tipo não básico. na carga dos Web Services.Tipo básico conflitante Durante a etapa de validação dos serviços. Solução Verifique e corrija. Solução Verifique e corrija. a declaração das estruturas envolvidas. abordaremos as mensagens de ocorrências relacionadas à erro fatal. ou a estrutura <A> têm uma propriedade do tipo <B>. a URL específica para o acesso aos serviços. através da chave URLLOCATION. [XXX] Erro de Método : Nome de Método Inválido . na carga dos Web Services. no código-fonte.Durante a etapa de validação dos serviços. AUTOMATIC URLLOCATION FAILED Ao configurar um Web Service 'Server'. referente ao serviço [YYY]. WSDL Server ONLOAD ERROR . e <B> por sua vez tem uma propriedade do tipo <A>. Os detalhes sobre a ocorrência fatal são exibidas no console. a declaração do nome do método. esta ocorrência é reproduzida quando um determinado método [XXX]. refere-se à falhas de carga do engine de Web Services como um todo e ocorrências de falha de processamento quando da chamada para execução dos serviços. em cada mensagens discriminaremos um resumo da ocorrência. declaramos a estrutura <A>. do ambiente em uso. do TOTVS | Application Server.Para isso. Por exemplo. 11. Solução Verifique e corrija o código-fonte para proceder com a declaração do método no construtor do serviço. quando algum erro fatal ocorre na carga dos Web Services. esta ocorrência é reproduzida quando o nome de um determinado método [XXX] foi especificado com um nome igual a um tipo básico de informação. no código-fonte. esta ocorrência é reproduzida quando temos uma cadeia de estruturas. Esta ocorrência invalida apenas o serviço que utiliza a determinada estrutura. Redundância de Estruturas Durante a etapa de validação dos serviços. Ocorrências de erro fatal e tratamento de erro Neste tópico. . porém não foi declarado no construtor do Web Service.Falha Interna na Carga do Web Service Esta ocorrência é apresentada na tela de índice dos Web Services (wsindex. compostas por tipos básicos e outras estruturas. na carga dos Web Services.apw).Tipo básico conflitante Durante a etapa de validação dos serviços.log. sua possível causa e possíveis soluções. que tem dentro dela uma outra propriedade que é do tipo <A>. deve-se especificar. Esta ocorrência invalida apenas o serviço que utiliza o determinado método. foi codificado. Solução Verifique e corrija.As ocorrências de erro fatal. na carga dos Web Services. e gravados no arquivo error. e a declaração das estruturas entre redundância. BUILD [XXX] USING WEBSERVICES HTTPS NOT SUPPORTED Quando da carga inicial dos Web Services 'Server'.031209'. o processamento é abortado ao subir as Working Threads do servidor. porém. Solução . o Web Service não é processado. Desta forma. a mesma continha um valor do tipo AdvPL [Z]. o arrray não continha nenhum elemento. '/' (barra) e '-' (hífen). Quando da identificação da propriedade [X] de retorno obrigatório do método. são considerados válidos apenas os caracteres alfanuméricos e caracteres ':' (dois pontos). em conjunto com o Microsoft (R) Information Service. do arquivo de configuração do TOTVS | Application Server. a mesma deveria ser alimentada com um conteúdo AdvPL do tipo [Y]. Caso. na camada da LIB. quando da geração do pacote 'SOAP' de retorno ao client solicitante do serviço. possua caracteres acentuados ou espaços. seja especificado que o acesso será realizado via HTTPS e a build atual do TOTVS | Application Server utilizado ainda não suporta a utilização do Web Service sob o protocolo HTTPS. Observação: Esta validação foi implementada na infraestrutura de Web Services. diferente de '/'. Uma URL é considerada inválida caso a mesma não seja iniciada com 'http://'. quando da geração do pacote 'SOAP' de retorno ao client solicitante do serviço. REQUIRED Return property [X] Type [Y] Unexpected Valtype [Z] Esta ocorrência de erro é reproduzida quando do término do processamento de um método de um Web Services. seja finalizada com um caractere não alfanumérico. a partir da versão de infraestrutura 'ADVPL WSDL Server 1. a mesma deveria ser um array AdvPL. na seção Environment. ao invés deste. Quando da identificação da propriedade obrigatória [X] de retorno do método. com esta ocorrência de erro fatal. e o processamento é abortado com a ocorrência de erro acima. contendo no mínimo um elemento. Esta operação não é possível quando o header HTTP do pacote permite informar uma operação diferente de 'Get' ou 'POST'. a LIB de Web Services identifica automaticamente sob qual host o serviço foi acessado. caso especificada a configuração da chave URLLOCATION.' (ponto). 'https://'.Quando não definimos esta URL. Solução Verifique o método solicitado e certifique-se que a propriedade de retorno esteja sendo alimentada. ou o servidor do sistema esta executando também em uma versão ISAPI. porém a mesma não seja especificada com uma sintaxe válida. a configuração da chave URLLocation é criticada pela LIB. indicando em [XXX] a URL informada e em [YYY] o nome do arquivo de configuração do TOTVS | Application Server. INVALID URLLOCATION [XXX] ON [YYY] Quando da configuração do TOTVS | Application Server para Web Services. na camada da LIB. '. REQUIRED Return property [X] AS ARRAY OF [Y] IS EMPTY Esta ocorrência de erro é reproduzida quando do término do processamento de um método de um Web Service. porém. Caso não seja possível identificar o host sob o qual a chamada foi realizada. Quando do final da execução do serviço. porém. até o momento. em conformidade com a declaração da propriedade da classe de serviço. são executadas consistências de pré e pós-processamento. No entanto.Verifique o método solicitado e certifique-se que a propriedade de retorno esteja alimentada com um conteúdo do tipo [Y]. a mesma continha um valor do tipo AdvPL [Z]. Solução Verifique o método solicitado e certifique-se que a propriedade de retorno esteja alimentada com um conteúdo do tipo [Y]. a mesma continha um valor do tipo AdvPL [Z]. ela indica que ocorreu uma falha não tratada ou uma impossibilidade de geração do pacote de retorno. Quando da identificação da propriedade [X] de retorno do método. ao invés deste. na camada da LIB. Solução Verifique o método solicitado e certifique-se que a propriedade de retorno seja alimentada com a respectiva estrutura. Quando da identificação da propriedade [X] de retorno do método. a mesma deveria ser uma estrutura (Tipo AdvPL 'O' Objeto) AdvPL. quando da geração do pacote SOAP de retorno ao client solicitante do serviço. Solução Verifique o método solicitado e certifique-se que a propriedade de retorno esteja alimentada com um array. porém. ao invés da propriedade ser um do tipo A (array). é reproduzida quando do término do processamento de um método de um Web Services. Return property [X] AS OBJECT Type [Y] Unexpected Valtype [Z] Esta ocorrência de erro é reproduzida quando do término do processamento de um método de um Web Service. a mesma deveria ser alimentada com um conteúdo AdvPL do tipo [Y]. Return property [X] Type [Y] Unexpected Valtype [Z] Esta ocorrência de erro é reproduzida quando do término do processamento de um método de um Web Service. esta ocorrência não foi reproduzida sob nenhuma condição. contendo elementos do tipo [Y]. é verificado se o tratamento efetuado gerou um pacote com a mensagem de retorno. Todas as consistências internas realizadas têm uma mensagem de retorno. Quando da identificação da propriedade [X] de retorno do método. a mesma deveria ser um array AdvPL. porém. quando da geração do pacote 'SOAP' de retorno ao client solicitante do serviço. em conformidade com a declaração da propriedade no serviço. Caso esta ocorrência seja reproduzida. em conformidade com a declaração da propriedade no serviço. a propriedade de retorno continha um valor do tipo AdvPL [Z]. independentemente de ocorrer um processamento com sucesso ou com falha (SOAP Fault). UNKNOW ERROR : EMPTY HTTP RETURN Quando do processamento de uma requisição de um método de Web Services 'Server'. Return property [X] AS ARRAY Type [Y] Unexpected Valtype [Z] Esta ocorrência de erro. do tipo [Y]. . na camada da LIB. quando da geração do pacote 'SOAP' de retorno ao client solicitante do serviço. na camada da LIB. ch' User Function TstService Local oService . MsgStop('Execução OK') // Método executado com sucesso. o processamento é abortado com a ocorrência acima. devemos identificar e tratar a ocorrência cSvcError := GetWSCError() // Resumo do erro cSoapFCode := GetWSCError(2) // Soap Fault Code cSoapFDescr := GetWSCError(3) // Soap Fault Description If !empty(cSoapFCode) // Caso a ocorrência de erro esteja com o fault_code preenchido . provavelmente local ou interna.) de retorno efetivo do método. quando do término da execução de um método de uma classe 'Server' de Web Services. A LIB espera um valor booleano (.cSoapFCode) Else // Caso a ocorrência não tenha o soap_code preenchido. cSoapFCode . (verdadeiro) ou . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include 'Protheus. . MsgStop(cSoapFDescr. desenvolvido em AdvPL. Exemplo de uso da função GetWSCError Neste exemplo.F. ela está relacionada a uma outra falha. cSvcError . será ilustrado o tratamento de erro sugerido para uma chamada de um método através de um programa 'Client'. a mesma teve relação com a chamada do serviço. Solução Verifique o código-fonte do método do serviço e certifique-se que o retorno efetivo do método seja sempre .cSoapFDescr ClienteoService := WSTeste():New() // Cria uma instância do serviço If oService:Hello() // Realiza a chamada do método Hello() do serviço. Exemplos AdvPL A seguir são apresentados diversos códigos-fonte que exemplificam o uso das funções: GetWSCError GetWSCVer GetWSSVer SetSoapFault. identificando o serviço chamado em [SVC]. o método [METHOD] e o tipo de retorno efetivo retornando em [X].T. (falso).'FALHA INTERNA DE EXECUCAO DO SERVIÇO') Endif 16 17 18 19 EndifoService := NIL 20 21 Return . ou .F.ch' #include 'ApWebSrv.F. Caso o retorno efetivo não seja booleano. MsgStop(cSvcError.[SVC] : [METHOD] as [X] : Tipo Inesperado de Retorno do Método Esta ocorrência de erro é reproduzida.T. Else // Caso o método retorne . caso um parâmetro não atenda a faixa de dados necessária.. mas sim por alguma razão ligada ao ambiente do servidor. indicando que não estava disponível um recurso no servidor para o processamento requisitado. o Fault-Code de um Soap-Fault é 'SOAPFAULT_SENDER'.SOAPFAULT_RECEIVER) Return . e indica ao client que o pacote deve ser remontado para que o serviço seja executado. o serviço retorna ao Client solicitante um Soap-Fault.) If ::Indice > 1024 SetSoapFault('Argumento Inválido'.Exemplo de uso da função GetWSCVer Neste exemplo. obtemos a versão da Lib 'Cliente' de Web Services compilada no repositório atual.) // ********* Exemplo 02 ********* //(. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // ********* Exemplo 01 ********* //(.. . Por padrão.. No exemplo 02.) If !File('\extras\modelo. pois o pacote não foi processado não por ter algum conteúdo inválido.. partindo de um método de um Web Services 'Server'.') Return . o que indica que o serviço não foi processado por alguma razão ligada ao pacote de dados enviados.''. 1 User Function ShowVersions() 2 Local cCliVers := GetWSCVer() 3 MsgStop(cCliVers) 4 Return Exemplo de uso da função GetWSSVer Neste exemplo.'O índice não pode ser maior que 1024. 1 User Function ShowVersions() 2 Local cSrvVers := GetWSSVer() 3 MsgStop(cSrvVers) 4 Return Exemplo de uso da função SetSoapFault Neste exemplo de uso da função.cfg') SetSoapFault('Serviço Indisponível'.. indicando a ocorrência de erro.f. obtemos a versão da Lib 'Server' de Web Services compilada no repositório atual. retornamos um Soap-Fault. apresentamos dois exemplos de código-fonte para demonstrar sua utilização.f. Endif //(.. retornamos que o Fault Code é 'SOAPFAULT_RECEIVER'.) Observações: No exemplo 01. Endif //(. Neste... uma classe client para a comunicação e utilização do mesmo. Neste caso. criar um novo código-fonte e acessar no menu Ferramentas + Gerar Cliente WebServices. o processo de busca da URL informada é disparado pelo TOTVS | Development Studio. Para tal. se ainda necessária. em formato SOAP (a versão 1. realizar a chamada e tratar o pacote de retorno do serviço e suas respectivas exceções. é necessário obter o endereço internet (URL) do WSDL desejado. O TOTVS | Application Server possui ferramentas e infraestrutura incorporadas que permitem esta integração. para cada serviço que se tenha necessidade de gerar um código-fonte client. até a geração ou funcionamento incompletos. e que de forma alguma este código-fonte gerado. mas a operação é realizada através do TOTVS | Application Server. Geração do client em AdvPL No TOTVS | Development Studio. Geração de fonte client para WSDL’s disponibilizados em arquivo Existem fornecedores de serviços para Web Services que fornecem os arquivos contendo as definições (WSDL) para a geração dos clients. pois caso este fonte tenha que ser gerado novamente por qualquer razão. No entanto.1 da especificação SOAP foi utilizada como base para implementação do toolkit de Web Services do Microsiga Protheus). Em casos especiais.Web Services 'Client' Aplicações Protheus 'Client' de Web Services Definição de client Quando um Web Service 'Server' é criado e disponibilizado. é o servidor TOTVS | Application Server que buscará o documento WSDL solicitado. junto é disponibilizada a definição do serviço. deve-se tomar muita atenção e documentar o código-fonte. Logo.. De modo que. em AdvPL.. argumentos. no menu Ferramentas. Para isso. deverá ser realizado novamente no código regerado manualmente. É importante salientar que. o client do Web Services do TOTVS | Application Server têm seu foco e recursos direcionados apenas a serviços que possuam interface de comunicação que realize POST de pacotes de dados XML. pelo assistente. é necessário montar um programa client que seja capaz de montar um 'envelope' SOAP com os dados necessários ao processamento do serviço. a opção para que. usar um WSDL fornecido com versão a partir de 1. através de um link para a obtenção do documento WSDL de um serviço. caso necessário atender alguma necessidade específica da aplicação Server de Web Services não contemplada de modo nativo pela implementação de Web Services do TOTVS | Application Server. Como a especificação SOAP 1.1 foi utilizada como base para a implementação da interface Client de Web Services. porém. encontra-se disponível. recomenda-se que cada código-fonte client seja gerado em um arquivo independente e exclusivo para este fim. O TOTVS | Development Studio suporta a geração de fonte client em arquivo. Embora existam Web Services que podem ser acessados via HTTP direto.. estruturas e retornos (WSDL). o TOTVS | Application Server gere automaticamente. Para utilizar um Web Service. apenas passando parâmetros via URL.2 pode não ser suportado na íntegra. pode ser necessária alguma alteração no código-fonte client gerado. a alteração realizada é perdida e. a estação servidora utilizada no ambiente deve ter acesso ao endereço solicitado. Requisitos básicos para geração do client em AdvPL O processo de geração do código-fonte é disparado através do TOTVS | Development Studio. a máquina onde o serviço do TOTVS | Application Server está sendo executado deve ter acesso à URL informada. gerando ocorrências desde falha na geração do fonte client em AdvPL. deve-se disponibilizar o arquivo em uma pasta a partir do RootPath do ambiente (environment) configurado no TOTVS | . seja alterado. A maioria das definições WSDL. mas sim o conteúdo do mesmo. e compilar um e apenas um arquivo contendo o WSDL principal com todos os imports para a geração do fonte client ser feita com sucesso. desde que o TOTVS | Application Server seja configurado para uso do certificado. Não há padrão definido para tal.1º Passo 1º Passo . Geração de client em AdvPL . Geração de fonte client para WSDL’s publicados com autenticação e/ou conexão segura ( HTTPS ) A engine de conexão client HTTP do TOTVS | Application Server suporta conexão com URL’s com HTTPS. enviados por e-mail. contendo o nome do serviço na URL e um sufixo ?WSDL ou . e ele seja copiado para uma pasta chamada "WSDL". acessá-lo em disco. e/ou seja uma conexão HTTPS que exija um uso de certificado client específico.apw?WSDL. como se o certificado fosse utilizado para conexão entre remote e server ( vide configuração da seção [SSLCONFIGURE] do TOTVS | Application Server). é possível gerar pelo TOTVS | Development Studio. Mas. que fica a partir do RootPath do ambiente em uso no TOTVS | Development Studio. após um cadastro no site e autorização da empresa para uso do serviço por ele provido. copiar para uma pasta a partir do RootPath do TOTVS | Application Server.Determinar como obter o WSDL do serviço desejado. Basta conseguir acessar o conteúdo do WSDL no Web Browser. é possível acessar a URL onde o WSDL está publicado através de um Web Browser (Navegador da Web). a definição é obtida diretamente via HTTP. o path do arquivo. a geração é um pouco mais complicada. pois existe a necessidade de fazer download de todos os imports necessários. e ao acessar o WSDL. fazer a autenticação através do Browser. Caso o Web Service possua dependências (imports) que estejam publicados. Este mesmo procedimento também pode ser aplicado quando o WSDL está publicado em um endereço HTTPS que requer uso de certificado client. a URL informada no TOTVS | Development Studio para gerar o código-fonte client deve ser "\wsdl\meuservico. será apresentado no browse um documento XML correspondente a definição do serviço. inclusive para a geração de fonte client de Web Services. dos serviços disponíveis na WEB. em geral apontando para o servidor onde o serviço está publicado. Por exemplo. e proceder com a geração do fonte client pelo TOTVS | Development Studio.WSDL na URL. O WSDL de alguns serviços restritos como. sempre iniciado com "\" (barra inversa) . No caso da autenticação. o serviço de busca na base de dados do Google. Exemplo Neste exemplo. Basta configurar o certificado no TOTVS | Application Server. Ele deve conter um arquivo XML no formato WSDL. Ainda quanto à geração de clients onde o WSDL está publicado com conexão segura (HTTPS) que exija o uso de um certificado client especifico. por exemplo. caso o arquivo contendo o WSDL chama-se "meuservico. são acessados através de uma URL. seguido do path e nome do arquivo no servidor a ser utilizado para a geração. de modo que cada servidor poder disponibilizar (ou não) o WSDL de uma maneira diferente. e informar na caixa de diálogo da URL para a geração do código-fonte. e fazer a geração a partir do arquivo em disco. salvá-lo em arquivo. caso este link seja acessado através de um Web Browser (exemplo: Internet Explorer).txt" . Existem apenas restrições quando a URL dos Web Services exigir autenticação (usuário e senha) para baixar o WSDL. informando a URL. subir o serviço. e fazer a geração do client pelo TOTVS | Development Studio informando o arquivo em disco. através do link http://localhost/SERVERTIME. são disponibilizados em arquivo ASCII.Development Studio.txt". . O TOTVS | Development Studio não vai criticar a extensão do arquivo. O código-fonte gerado através do assistente de criação de fonte deve preferencialmente ser gerado e compilado em um arquivo exclusivo.. destinado único e exclusivamente a este código.. Finalizando conexão com o server. pois as mesmas serão perdidas caso o código-fonte seja gerado novamente. acesso o menu Ferramentas + Gerar Cliente WebService. especificamente para conter as classes deste serviço. Ao ser gerado um código-fonte client para um Web Service. não deve ser inserida e/ou alterada nenhuma das definições geradas pelo assistente.Geração de client em AdvPL .apw?WSDL. este código-fonte conterá as definições dos métodos do serviço.Gerar o código-fonte AdvPL. Procedimento Para geração do código-fonte client.PRX.2º Passo 2º Passo . do client. aguarde. Após a confirmação. a(s) estrutura (s) utilizada (s) e a(s) classe(s) intermediária(s) de uso interno para montagem e desmontagem da(s) estrutura(s). por tratar-se de uma classe AdvPL gerada a partir da definição de um serviço. visando o encapsulamento de todos os tratamentos de envio e recebimento de dados através de pacotes SOAP. caso o procedimento ocorra com sucesso. . será apresentada uma tela (tipo pop-up). informe a URL de onde o servidor irá obter a definição do Web Service. usando o assistente do TOTVS Development Studio.. Obtendo descrição do WebService. Ao clicar nesta opção. Para isso. em AdvPL. E. Por favor. na janela de mensagens do TOTVS | Development Studio. será apresentado um texto semelhante ao abaixo: Estabelecendo conexão com o server.. no TOTVS | Development Studio. No nosso exemplo... OK.. é necessário criar um novo arquivo .. http//localhost/SERVERTIME. para utilizar este serviço. No campo URL do WebService. '_GETSERVERTIMERESPONSE:_GETSERVERTIMERESULT:TEXT'. que recebe os parâmetros de chamada.. contendo os encapsulamentos necessários para tratamento de exceções. WSMETHOD GETSERVERTIME WSSEND NULLPARAM WSRECEIVE cGETSERVERTIMERESULT WSCLIENT WSSERVERTIME Local cSoap := ''.) ::cGETSERVERTIMERESULT := xGetInfo ( oXmlRet. cSoap. gerada para realizar a interface com a classe original publicada no Server. 'DOCUMENT'.T.*/ // Definição do método..'http://localhost/'. executa o serviço e alimenta as propriedades de retorno do método.*/ WSCLIENT WSSERVERTIME WSMETHOD NEW WSMETHOD GETSERVERTIME WSDATA _URL AS String WSDATA cGETSERVERTIMERESULT AS string ENDWSCLIENT WSMETHOD NEW WSCLIENT WSSERVERTIME ::_URL := NIL ::cGETSERVERTIMERESULT := '' Return Self /*-----------------------------------------------------------------------------WSDL Method GETSERVERTIME of Service WSSERVERTIME ----------------------------------------------------------------------------. O código-fonte acima constitui uma classe em AdvPL.CH' /*============================================================================== WSDL Location http://localhost/SERVERTIME.E. na janela do novo arquivo criado.CH' #INCLUDE 'APWEBSRV.021217 Alterações neste arquivo podem causar funcionamento incorreto e serão perdidas caso o código-fonte seja gerado novamente. ============================================================================= */ /*-----------------------------------------------------------------------------WSDL Service WSSERVERTIME ----------------------------------------------------------------------------.apw?WSDL Gerado em 12/30/02 17:21:29 Observações Código-fonte gerado por ADVPL WSDL Client 1. oXmlRet BEGIN WSMETHOD DEFAULT ::_URL := 'http://localhost/SERVERTIME. . as linhas em negrito no código-fonte acima. deverá ser criado um código-fonte semelhante ao apresentado abaixo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #INCLUDE 'PROTHEUS. 'http://localhost/GETSERVERTIME'. Vale observar que. mas acrescentadas a este documento para fins didáticos. já realizando os tratamentos adequados para realizar a comunicação via HTTP com o servidor onde o serviço está publicado. não foram inseridas pelo assistente do TOTVS | Development Studio.apw' cSoap += '<GETSERVERTIME xmlns="http://localhost/">' cSoap += '</GETSERVERTIME>' oXmlRet := SvcSoapCall( Self. '') END WSMETHOD oXmlRet := NIL Return . ou falso (. entre outras. Neste passo. demorou muito para responder (time-out). por exemplo.O cabeçalho do código-fonte contém informações sobre a localização do WSDL utilizado para a geração do códigofonte. que não envia parâmetro algum. E. Linha 9 .Declaração de uma variável local para conter o objeto do Web Service client.O método GetServerTime é executado a partir do objeto do serviço oSrv.). Logo abaixo. sem passar qualquer parâmetro. em caso de falha de execução. Linha 14 . e retorna o horário atual do server em :: cGETSERVERTIMERESULT.Inicia-se a definição da User Function para utilizar o Web Service.T. Linha 6 .O programa de teste é finalizado com um Return. é necessário criar um novo código-fonte. o retorno esperado é alimentado na propriedade cGetServerTimeResult do objeto do serviço. Linha 3 .Criar um código-fonte que utilize a classe para utilização do Web Service. Para recuperar os detalhes da ocorrência de erro.CH que contém as definições dos comandos AdvPL e demais constantes.Caso o serviço tenha sido executado com sucesso.3º Passo 3º Passo . com todos os tratamentos necessários embutidos. O retorno de um método do client pode ser verdadeiro (. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #INCLUDE ‘TOTVS.Declaração da include TOTVS. a declaração do método de busca de Horário (WSMETHOD GETSERVERTIME). obtida através da sintaxe <NOME_DO_SERVIÇO>():New(). ocorreu alguma falha na chamada do serviço.F.Utilizando-se do serviço. em seguida.F. Linha 8 .CH’ User Function TestClient() Local oSvc := NIL oSvc := WSSERVERTIME():New() If oSvc:GETSERVERTIME() alert('Horário no Servidor : ' + oSvc:cGETSERVERTIMERESULT) Else alert('Erro de Execução : ' + GetWSCError()) Endif Return Linha 1 . com o método new() para inicialização das propriedades AdvPL da classe . Linha 11 . se for executado com sucesso. a variável oSvc é alimentada com um nova instância do Web Service client. como. data e hora de geração e versão do engine de Web Services utilizado. utilize a função GetWSCError() para retornar uma string com o resumo da ocorrência. a declaração de uma classe ?client? de Web Services (WSCLIENT WSSERVERTIME). o servidor não estava no ar.Caso contrário (retorno falso (. Geração de client em AdvPL . Linha 4 .).)). no TOTVS | Development Studio. e montar uma função para utilizar a classe de Web Service client e obter o horário no servidor. . sendo: . é possível verificarmos que.5º Passo 5º Passo . é possível simular uma ocorrência de falha no client ao desabilitar o servidor HTTP do TOTVS | Application Server (configurar a chave Enable=0. Caso o Web Service esteja no ar. façam-se necessárias determinadas informações internas as rotinas de execução do serviço no client AdvPL.4º Passo 4º Passo . Essa função recebe um número como parâmetro. do arquivo de configuração do TOTVS | Application Server). vimos um exemplo completo de um client funcionando perfeitamente. informações que são apresentadas no console do TOTVS | Application Server (caso habilitado). o servidor de Web Service e o client estão no sistema. Para isso. compilados no mesmo Repositório de Objetos. Para fins didáticos.Geração de client em AdvPL . o sistema apresentará uma tela semelhante ao exemplo abaixo: Geração de client em AdvPL . Com isso. Abra uma nova instância do TOTVS | SmartClient e execute a função U_TestClient. e reiniciar o TOTVS | Application Server e executar o programa client novamente. foi criada a função WSDLDbgLevel() que permite definir em tempo de execução. Exemplo No ambiente montado para teste. o resultado esperado é uma janela com o horário do servidor.Executar o programa de teste. durante o desenvolvimento e testes do client do serviço. na seção [HTTP]. funcionando e o código-fonte client devidamente compilado e sem erros. Até o 4º passo. um nível de detalhamento de informações adicionais relacionadas ao Web Service. Agora.Obtendo informações de debug. POST RETURN --------------------------------<?xml version='1. do código-fonte do 3º Passo.w3. 1º Exemplo ------------------------------------------------------------------------------SvcSoapCall to http://automan:8000/webservice/SERVERTIME. que a instrução WSDLDbgLevel(2) é acrescentada para ativar o nível mais complexo de informações adicionais e é possível observar no console. Deve ser obtido um echo no console do TOTVS | Application Server semelhante ao exemplo abaixo: Iniciando Thread (siga0984. do TOTVS | Application Server.xmlsoap. as mensagens apresentadas durante a execução do código-fonte de testes do ?client?.org/soap/en velope/'> <soap:Body> <GETSERVERTIME xmlns='http://automan:8000/webservice/'> </GETSERVERTIME> </soap:Body> </soap:Envelope> ------------------------------------------------------------------------------- 3º Exemplo --------------------------------.org/soap/envelope/'><soap:Body><GETSERVERTIMERESPONSE xmlns='http://automan:8000/webservice/'><GETSERVERTIMERESULT>10:37:10</GETSERVE RTIMERESULT></GETSERVERTIMERESPONSE></soap:Body></soap:Envelope> ------------------------------------------------------------------------------- Fim Thread (siga0984.org/2001/XMLSchema' xmlns:soap='http://schemas.org/2001/XMLSchema' xmlns:so ap='http://schemas.. AUTOMAN). AUTOMAN) BytesIn 73 BytesOut 75 .xmlsoap.0' encoding='utf-8'?> <soap:Envelope xmlns:xsi='http://www.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.w3.org/2001/XMLSchema-instance' xmlns:xsd=' http://www.. Além disso. observe na linha 7.SOAPSEND ----------------------------------<?xml version='1.apw / DOCUMENT NameSpace http://automan:8000/webservice/ SoapAction http://automan:8000/webservice/GETSERVERTIME Called from GETSERVERTIME ( 137) Called from U_TESTCLIENT ( 10) 2º Exemplo ---------------------------------.Valor 0 (padrão) 1 2 Descrição Sem informações adicionais. Apenas strings SOAP de retorno do TOTVS | Application Server. String SOAP de envio e retorno.or g/2001/XMLSchema-instance' xmlns:xsd='http://www.w3. No segundo exemplo (SOAPSEND) informa o conteúdo do pacote Soap que foi enviado (postado) ao Servidor. existe um código de erro correspondente. informando a URL chamada. o gerador de código procura a declaração dos BINDINGS no WSDL. o método chamado retorna . com um ou mais métodos. e o código-fonte client não é gerado. A maioria das ocorrências está relacionada à geração do Código-fonte do ?client? AdvPL utilizado-se o TOTVS | Development Studio. o processo de geração de fonte é abortado com a ocorrência de erro acima. relacionado à execução do ?client? Web Services. onde foi especificado um 'enumeration' (lista de parâmetros válidos pré-determinada). Caso sejam identificados mais de um serviço no mesmo WSDL. o NameSpace e o SoapAction utilizados. o processo é abortado. a rotina considera o WSDL incompleto. utilizando um tipo de dado diferente dos declarados acima. quando da geração de um código-fonte de WebServices 'Client'. no momento da geração do código-fonte. Ocorrências de erro [WSDL não suportado. . um WSDL deve conter um e apenas um serviço declarado. e no terceiro exemplo (POST RETURN) informa o conteúdo do pacote Soap devolvido pelo Server referente a esta solicitação. Todas as ocorrências de exceção tratadas peço Web Services ?client? AdvPL estão relacionadas no Tópico Web Services ?client? ? Códigos de Erro. utilizando o TOTVS | Development Studio. listados abaixo : STRING FLOAT DOUBLE DECIMAL INT INTEGER LONG UNSIGNEDINT UNSIGNEDLONG Caso o WSDL contenha um 'enumeration'. o estilo SOAP de troca de dados (document). Caso esta declaração não esteja presente. Para cada exceção prevista no ?client?. quando da geração de um código-fonte de WebServices 'Client'. respectivamente. Quando ocorre um erro qualquer. WSCERR003 / [XXX / YYY] Enumeration não suportado Esta ocorrência de erro é reproduzida.No primeiro exemplo são as mensagens informativas a respeito da chamada do Web Service. são suportados os seguintes tipos básicos de parâmetros..F. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. onde o 'enumeration' não suportado é identificado em <XXX> e <YYY>. a partir de uma definição de serviço (WSDL). e o erro pode ser recuperado através da função GetWSCerror(). WSCERR001 / Não há SOAP:BINDINGS para a geração do Serviço. o WSDL é considerado inválido. Quando encontrada uma estrutura básica (SimpleType). vista anteriormente . e aborta o processo de geração de código com esta mensagem. todos eles prefixados com WSCERR . Existe mais de um serviço declarado. Por definição. utilizando o TOTVS | Development Studio. uma vez identificado o serviço. No processo de geração. correspondendo ao nome do parâmetro e tipo utilizado.] Esta ocorrência de erro é reproduzida. Durante a geração do código-fonte para ‘client’ AdvPL. os parâmetros e mensagens especificadas no WSDL são identificados internamente como parâmetros de entrada. Quando deste processamento. Esta ocorrência de erro é reproduzida.( ocorrência <X> = B ). não reproduzida até o momento. algum parâmetro não seja enquadrado nestas definições. quando da geração de um código-fonte de WebServices 'Client'. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. um parâmetro de retorno do WSDL seja identificado como 'retorno nulo'. quando da geração de um código-fonte de WebServices 'Client'. No processo de geração. utilizando o TOTVS | Development Studio. WSCERR006 / WSDL inválido ou não suportado. uma estrutura contenha um determinado elemento. o WSDL é considerado inválido. Quando deste processamento. No processo de geração. ou entrada e saída. utilizando o TOTVS | Development Studio. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. e o processo de geração é abortado com a mensagem acima. que aponte para outra estrutura. Quando deste processamento. Esta ocorrência de erro é reproduzida. até que todas as estruturas utilizadas sejam processadas. após a análise inicial de parâmetros. e o processo de geração é abortado com a mensagem acima. e esta não seja encontrada no WSDL ( ocorrência <X> = A ). até que todas as estruturas utilizadas sejam processadas. Quando deste processamento. No processo de geração. Caso. WSCERR007 / WSDL inválido ou não suportado. o WSDL é considerado inválido. o WSDL é considerado inválido.WSCERR004 / NÃO IMPLEMENTADO ( 001<X> / <N> / WSDLTYPE_NAME ) Esta ocorrência de erro é reproduzida. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. o WSDL é considerado inválido. Quando do processamento de um WSDL. até que todas as estruturas utilizadas sejam processadas. Esta ocorrência de erro é reproduzida. e o processo de geração é abortado com a mensagem acima. WSCERR009 / INTERNAL ERROR (X) Esta é uma ocorrência de erro interna do 'engine' de geração de código-fonte AdvPL. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. um parâmetro de primeiro nível (message) do WSDL for especificado sem nome. e o processo de geração é abortado com a mensagem acima. . utilizando o TOTVS | Development Studio. No processo de geração. ou seja encontrada . WSCERR008 / Retorno NULLPARAM inválido. utilizando o TOTVS | Development Studio. até que todas as estruturas utilizadas sejam processadas. quando da geração de um código-fonte de WebServices 'Client'.porém registrada não como uma estrutura (complextype). um parâmetro de primeiro nível (message) do WSDL for especificado sem definição de tipo. parâmetro de saída. identificando a estrutura pendente em <WSDLTYPE_NAME>. o processamento de geração é abortado com a ocorrência acima. quando da geração de um código-fonte de WebService 'Client'. WSCERR012 / INTERNAL ERROR (X) Esta é uma ocorrência de erro interna do 'engine' de geração de código-fonte AdvPL. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. utilizando o TOTVS | Development Studio. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. No processo de geração. algum parâmetro não seja enquadrado nestas definições. o WSDL é considerado inválido. porém esta ocorrência (011) refere-se à uma subestrutura do serviço . um parâmetro de tipo básico não se encontre entre os tipos básicos suportados pelo engine 'Client' de WebServices do ERP. Quando deste processamento. parâmetro de saída. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. Observação: Esta ocorrência é semelhante à ocorrência WSCERR008. após a análise inicial de parâmetros. um parâmetro de retorno do WSDL seja identificado como 'retorno nulo'. o nome da estrutura incompleta. a geração do código-fonte é abortada com esta ocorrência. até que todas as estruturas utilizadas sejam processadas. utilizando o TOTVS | Development Studio. Observação: Esta ocorrência é semelhante à WSCERR009. Esta ocorrência de erro é reproduzida. Caso. até que todas as estruturas utilizadas sejam processadas. utilizando o TOTVS | Development Studio. os parâmetros e mensagens especificadas no WSDL são identificados internamente como parâmetros de entrada. não reproduzida até o momento. Esta ocorrência de erro é reproduzida. indicando em SOAP_TYPE o tipo não suportado. WSCERR014 / INVALID NULLPARAM INIT Esta ocorrência de erro é reproduzida. quando da geração de um código-fonte de WebServices 'Client'. até que todas as estruturas utilizadas sejam processadas. Quando deste processamento. Quando deste processamento. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. WSCERR011 / Retorno NULLPARAM inválido. o processamento de geração é abortado com a ocorrência acima. ou entrada e saída. informando em [STRUCT_TYPE]. . Quando do processamento de um WSDL. porém esta indica uma falha em outro ponto da rotina interna de análise. No processo de geração. utilizando o TOTVS | Development Studio. e o processo de geração é abortado com a mensagem acima. e a primeira (008) refere-se à um parâmetro/estrutura de primeiro nível do serviço. até que todas as estruturas utilizadas sejam processadas. quando da geração de um código-fonte de WebServices 'Client'. caso uma estrutura complexa não contenha a especificação de seus elementos internos e a mesma não contenha nenhuma referência ao SCHEMA ou à outra estrutura. No processo de geração. No processo de geração. e o processo de geração é abortado com a mensagem acima. quando da geração de um código-fonte de WebServices 'Client'. WSCERR013 / [SOAP_TYPE] UNEXPECTED TYPE. o WSDL é considerado inválido. quando da geração de um código-fonte de WebServices 'Client'.WSCERR010 / [STRUCT_TYPE] Estrutura / Tipo incompleto Esta ocorrência de erro é reproduzida. utilizando o TOTVS | Development Studio. o processamento do pacote de retorno é abortado com esta ocorrência. WSCERR015 / Node [XXX] as [YYY] on SOAP Response not found. no momento que o client está desmontando o pacote SOAP retornado pelo serviço. ou DNF não disponível Servidor fora do ar Verifique a URL digitada. . o processamento é abortado com esta ocorrência. Dentre as possíveis causas para esta ocorrência. ou pela declaração de uma propriedade do tipo 'NULLPARAM'.F. Esta ocorrência é reproduzida. Para gerar um fonte 'Client' de WebServices. e não foi possível buscar o link solicitado. Esta ocorrência poderia ser causada por uma falha na validação inicial do WSDL. a geração do código-fonte é abortada com esta ocorrência de erro. correspondente ao retorno esperado do tipo [YYY] não for encontrado no pacote.Quando deste processamento. Caso a rotina de geração de código-fonte receba a instrução de inicializar a propriedade reservada 'NULLPARAM'. Esta ocorrência é capturada pelo próprio código-fonte do método. utilizando o protocolo HTTP ou HTTPS. utilizando o TOTVS | Development Studio. que utilize o protocolo HTTPS. quando da utilização de um código-fonte Client de WebServices. o processamento é abortado com a ocorrência acima. e realize a requisição da mesma através de um Web Browser. porém a build do ERP atual não suporta o tratamento de Web Services em HTTPS. podemos considerar: Sintaxe da URL inválida Servidor inválido. utilizando o protocolo HTTPS. a build do ERP deve ser atualizado. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). WSCERR016 / Requisição HTTPS não suportada neste Build. sendo que o método 'Client' chamado retornará . quando da geração de um código-fonte de WebServices 'Client'. para certificar-se que a mesma é válida e que a definição WSDL está realmente publicada e acessível sob o link informado. Quando informada uma URL para buscar a definição do serviço (WSDL). quando da geração de um código-fonte de WebServices 'Client'. utilizando o protocolo HTTP ou HTTPS. e até o momento não foi reproduzida. e não foi possível buscar o link solicitado. o processamento é abortado com a ocorrência acima. utilizando o TOTVS | Development Studio. (falso). WSCERR017 / HTTP[S] Requisição retornou [NIL] Esta ocorrência de erro é reproduzida. Caso o serviço utilize um soap-style RPC. Quando informada uma URL para buscar a definição do serviço (WSDL). WSCERR018 / HTTP[S] Requisição retornou [EMPTY] Esta ocorrência de erro é reproduzida. quando da geração de um código-fonte de WebServices 'Client'. Quando informada uma URL para buscar a definição do serviço (WSDL). e o node [XXX]. inexistente. [XXX] Esta ocorrência de erro é reproduzida. para cada propriedade da estrutura do serviço são montadas as rotinas de inicialização de cada uma delas. após o documento WSDL ser recuperado. o processamento é abortado com a ocorrência acima. porém houve uma impossibilidade de acesso ao arquivo. utilizando o TOTVS | Development Studio. quando da geração de um código-fonte de WebServices 'Client'. o WSDL é considerado inválido e a geração do fonte é cancelada. Verifique a URL digitada. Esta ocorrência de erro é reproduzida. após o documento WSDL ser recuperado. Falta de permissão de acesso ao arquivo solicitado. WSCERR019 / (XXX) Arquivo não encontrado. porém o arquivo não foi encontrado. WSCERR022 / [INFO] WSDL Parsing [PARSER_ERROR] Esta ocorrência de erro é reproduzida. apontando para um arquivo no disco. WSCERR020 / ( XXX / FERROR YYY ) Falha de Abertura. podemos considerar: Arquivo aberto em modo exclusivo por outra estação. no documento XML. Quando informada uma URL para buscar a definição do serviço (WSDL). e realize a requisição da mesma através de um Web Browser. a requisição foi feita com sucesso. Dentre as possíveis causas para esta ocorrência. . Verifique as propriedades e direitos do arquivo solicitado e repita a operação. considerada pelo parser interno de xml do sistema como erro no documento XML. quando da geração de um código-fonte de WebServices 'Client'. e em [INFO] é especificado o documento/operação que apresentou a inconsistência. Arquivo não existente ou inválido. para certificar-se que a mesma é válida e que a definição WSDL está realmente publicada e acessível sob o link informado. apontando para um arquivo no disco. porém o servidor recebeu como retorno um pacote HTTP incompleto ou inválido.Diferentemente da ocorrência WSCERR017. utilizando o TOTVS | Development Studio. WSCERR021 / [INFO] WSDL Parsing [PARSER_WARNING] Esta ocorrência de erro é reproduzida. Esta ocorrência de erro é reproduzida. utilizando o TOTVS | Development Studio. quando da geração de um código-fonte de WebServices 'Client'. com esta ocorrência. Falha de permissão/direito de abertura do arquivo. e em [INFO] é especificado o documento/operação que apresentou a inconsistência. Quando informada uma URL para buscar a definição do serviço (WSDL). Em PARSER_WARNING é discriminada a mensagem de advertência do parser interno. o WSDL é considerado inválido e a geração do fonte é cancelada. Dentre as possíveis causas para esta ocorrência. caso seja detectada alguma inconsistência. utilizando o TOTVS | Development Studio. Quando informada uma URL para buscar a definição do serviço (WSDL). caso seja detectada alguma inconsistência. Quando informada uma URL para buscar a definição do serviço (WSDL). considerada pelo parser interno de xml do sistema como uma advertência (warning). esta ocorrência foi reproduzida quando o servidor de WebServices que fornece o documento WSDL foi localizado. Em [PARSER_ERROR] é discriminada a ocorrência de erro do parser interno. quando da geração de um código-fonte de WebServices 'Client'. podemos considerar: Diretório não existente ou inválido. com esta ocorrência. . e a mesma não seja encontrada no WSDL. Esta ocorrência de erro é reproduzida. é verificado se o documento WSDL contém a definição do NameSpace de destino (TargetNameSpace) utilizado. quando da geração de um código-fonte de WebServices 'Client'. caso tenha passado pela etapa de validação XML. e o processo de geração é abortado com a mensagem acima. utilizando o TOTVS | Development Studio. o documento é considerado inválido e a geração do código-fonte é cancelada com esta ocorrência. até que todas as estruturas utilizadas sejam processadas. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. porém não seja encontrado no WSDL. No processo de geração. caso uma seção de mensagens (message) seja especificado para uma operação. Ao informar uma URL para buscar a definição do serviço (WSDL). ao gerar um código-fonte de Web Services Client. e o processo de geração é abortado com a mensagem acima. Esta ocorrência de erro é reproduzida. após o documento WSDL ser recuperado. utilizando o TOTVS | Development Studio. utilizando o TOTVS | Development Studio. o documento WSDL não especificou alguma mensagem de parâmetro ou retorno na seção <portType> da lista de métodos do WSDL. o mesmo é considerado inválido. o WSDL é considerado inválido. Desta forma. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. quando da geração de um código-fonte de WebServices 'Client'. WSCERR026 / TARGETNAMESPACE não definido no WSDL. é possível verificar a especificação do documento/operação que apresentou a inconsistência. No cabeçalho da mensagem [xxx]. o mesmo é considerado inválido. quando da geração de um código-fonte de WebServices 'Client'. WSCERR025 / [BIND_INFO] Binding não Encontrado. identificando a mensagem não encontrada em [MSG_INFO]. WSCERR027 / [OPER_INFO] BIND:OPERATION não encontrado. quando da geração de um código-fonte de WebServices 'Client'. até que todas as estruturas utilizadas sejam processadas. até que todas as estruturas utilizadas sejam processadas. onde o documento retornado constitui um XML sintaticamente válido. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. No processo de geração. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. Esta ocorrência de erro é reproduzida. Caso a informação [MSG_INFO] estiver vazia. Quando deste processamento. utilizando o TOTVS | Development Studio. No processo de geração.WSCERR023 / [xxx] FALHA INESPERADA AO IMPORTAR WSDL Esta ocorrência é reproduzida. No processo de geração. WSCERR024 / [MSG_INFO] MESSAGE não encontrada. utilizando o TOTVS | Development Studio. até que todas as estruturas utilizadas sejam processadas. o parser não identifica nenhuma estrutura referente a um documento WSDL. Quando é iniciado este processamento. Caso este não seja localizado. Esta ocorrência de erro é reproduzida. caso uma seção de amarração (binding) não seja localizado para uma operação especificada no WSDL. e o processo de geração é abortado com a mensagem acima. identificando a mensagem não encontrada em [BIND_INFO]. Quando deste processamento. e o processo de geração é abortado com a mensagem acima. Esta ocorrência de erro é reproduzida. Esta ocorrência de erro é reproduzida. e o processo de geração é abortado com a mensagem acima. Quando deste processamento. até que todas as estruturas utilizadas sejam processadas. Caso ele não seja encontrado. utilizando o TOTVS | Development Studio. Esta ocorrência de erro é reproduzida. caso uma determinada estrutura seja identificada como sendo externa ao WSDL atual. quando da geração de um código-fonte de WebServices 'Client'. quando da geração de um código-fonte de WebServices 'Client'. caso uma operação/método do WebService não seja encontrada na seção de amarração (binding). são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. WSCERR032 / [SHORT_NS] NAMESPACE não encontrado. WSCERR031 / [SCTUCT_NAME] Tipo sem NAMESPACE. até que todas as estruturas utilizadas sejam processadas. identificando o namespace não encontrado em [SHORT_NS]. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. utilizando o TOTVS | Development Studio. o WSDL é considerado inválido. identificando a operação não encontrada em [OPER_INFO]. identificando a estrutura incompleta em [STRUCT_NAME]. utilizando o TOTVS | Development Studio. Quando do processamento de estruturas pendentes. . quando da geração de um código-fonte de WebServices 'Client'. e o processo de geração é abortado com a mensagem acima. quando da geração de um código-fonte de WebServices 'Client'. WSCERR029 / [PORT_INFO] PortType não contém operações. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. o documento WSDL é considerado inválido. No processo de geração. e o processo de geração é abortado com a mensagem acima. o namespace da mesma deve estar declarado no header do WSDL. WSCERR028 / [PORT_INFO] PortType não Encontrado em aPort. identificando a porta sem definição em [PORT_INFO]. Quando deste processamento. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. até que todas as estruturas utilizadas sejam processadas. identificando a porta não encontrada em [PORT_INFO]. o documento WSDL é considerado inválido.Quando deste processamento. identificadas como sendo externas ao WSDL atual. No processo de geração. se a estrutura estiver declarada no WSDL sem o referido namespace. No processo de geração. referenciada por um IMPORT ou REF. até que todas as estruturas utilizadas sejam processadas. Quando deste processamento. caso uma operação/método do WebService não contenha a definição das operações na seção de portas do serviço (PortType). o WSDL é considerado inválido. No processo de geração. caso uma operação/método do WebService não seja encontrada na seção de portas do WSDL ( PortType ). utilizando o TOTVS | Development Studio. o documento WSDL é considerado inválido. especificadas por um IMPORT ou REF. Esta ocorrência de erro é reproduzida. e o processo de geração é abortado com a mensagem acima. > do WSDL. identificando o namespace não encontrado em [LONG_NAMESPACE] . até que todas as estruturas utilizadas sejam processadas. Quando da validação de estruturas complexas. e o processo de geração é abortado com a mensagem acima. Complementar ao erro WSCERR033. Complementar ao erro WSCERR032.. o WSDL não é suportado. utilizando o TOTVS | Development Studio. Esta ocorrência de erro é reproduzida. quando da geração de um código-fonte de WebServices 'Client'. quando da geração de um código-fonte de WebServices 'Client'. até que todas as estruturas utilizadas sejam processadas. WSCERR037 / [TYPE] Estrutura Interna Inesperada. e não seja uma referência externa ao WSDL. caso o parâmetro/estrutura pendente não seja encontrado. WSCERR034 / [INFO_NS] NAMESPACE sem LOCATION informado. Esta ocorrência de erro é reproduzida. No reprocessamento. especificadas por um IMPORT ou REF. o WSDL é considerado inválido. até que todas as estruturas utilizadas sejam processadas. Quando do processamento de estruturas pendentes. o WSDL é considerado inválido. até que todas as estruturas utilizadas sejam processadas. o . e mesmo assim não foi possível identificá-la. quando da geração de um código-fonte de WebServices 'Client'. até que todas as estruturas utilizadas sejam processadas. Quando da validação de estruturas complexas. No processo de geração. e o processo de geração é abortado com a mensagem acima. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. No processo de geração. e o processo de geração é abortado com a mensagem acima. Neste caso. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. Esta ocorrência de erro é reproduzida. utilizando o TOTVS | Development Studio. porém a URL para processamento do mesmo não seja especificada através de um Import no WSDL . e todo o WSDL é reprocessado. Caso seja especificado qualquer outro tipo de referência. No processo de geração. ela deve ser uma referência ao próprio SCHEMA. e o processo de geração é abortado com a mensagem acima. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. utilizando o TOTVS | Development Studio. Neste caso. quando da geração de um código-fonte de WebServices 'Client'. caso a mesma não possua tipo definido. identificando a estrutura pendente em [TYPE]. o namespace da mesma é identificado e importado. No processo de geração. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. utilizando o TOTVS | Development Studio. este é reproduzido quando o namespace identificado para o parâmetro seja externo ao WSDL. No processo de geração. o documento é considerado inválido. utilizando o TOTVS | Development Studio. WSCERR036 / Definição não suportada. quando da geração de um código-fonte de WebServices 'Client'. Esta ocorrência de erro é reproduzida. WSCERR035 / [TYPE] Tipo indefinido. são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. caso a mesma tenha passado por todas as interpretações cabíveis a uma estrutura. este é reproduzido quando a declaração da URL/Location do NameSpace externo não esteja declarado no <IMPORT.. identificadas como sendo externas ao WSDL atual. identificando o namespace incompleto em [INFO_NS].WSCERR033 / [LONG_NS] NameSpace sem Import declarado Esta ocorrência de erro é reproduzida. Esta ocorrência é capturada pelo próprio código-fonte do método. caso não seja passado um objeto AdvPL de tipo válido (Objeto XML ou Array). mostrando a mensagem acima. identificando o tipo de parâmetro recebido em [X]. No processo de geração. isto é. identificando o parâmetro de origem da mesma em [PARAM]. . são analisados todos os parâmetros e estruturas utilizadas pelos métodos do serviço. para determinar os dados recebidos por um retorno de um Web Service que retorna uma referência ao Schema. para a interpretação de um objeto de retorno XML em formato DataSet. mostrando a mensagem acima. e o processo de geração é abortado com a mensagem acima. Durante a desmontagem do pacote de retorno de um Web Service. o processamento é abortado com a mensagem acima. no momento que o client está desmontando o pacote SOAP retornado pelo serviço. (falso).WSDL é considerado inválido. utilizando o TOTVS | Development Studio. WSCERR040 / Unexpected SCHEMA Type [X] Quando da utilização da função XMLDataSchema. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). e não seja passado a função um Objeto AdvPL de Tipo Válido (Objeto Xml ou Array). sendo que o método 'Client' chamado retornará . WSCERR039 / Unexpected DumpType [X] Quando da utilização da função XMLDataSet. porém não foi possível localizar ou identificar adequadamente a estrutura. quando da utilização de um código-fonte Client de WebServices. identificando em [NOTNIL_MESSAGE] o parâmetro/propriedade que não veio preenchida. até que todas as estruturas utilizadas sejam processadas. WSCERR041 / [NOTNIL_MESSAGE] Esta ocorrência é reproduzida. quando da geração de um código-fonte de WebServices 'Client'. identificando o tipo de parâmetro recebido em [X]. Quando da validação de estruturas complexas. Verifique o código-fonte da aplicação e certifique-se de sempre passar um Objeto XML ou Array para a função XMLDataSet(). este erro significa que : OU o WSDL fornecido não é válido. Verifique o código-fonte da aplicação e certifique-se de sempre passar um Objeto XML ou Array para a função XMLDataSchema(). caso algum parâmetro obrigatório do serviço não esteja presente no pacote de retorno. identificando a estrutura em [TYPE]. o processamento é abortado. e o processo de geração é abortado com a mensagem acima. o processamento é abortado.F. Em termos práticos. caso uma estrutura e/ou parâmetro/retorno tenha passado por todas as interpretações cabíveis de uma estrutura. não soube lidar com ela para gerar um fonte client AdvPL. OU a engine de parser WSDL do Protheus não reconheceu a estrutura como válida. o WSDL é considerado inválido. WSCERR038 / [PARAM] WSDL inválido ou não suportado. Esta ocorrência de erro é reproduzida. F. No momento de postar o pacote SOAP de parâmetros para um Web Service. e certifique-se que. e a URL de destino é especificada em [URL_POST]. sendo que o método 'Client' chamado retornará . o pacote é enviado a URL discriminada no serviço. a mesma não esteja vazia. Após montado o pacote de envio para a solicitação de processamento do serviço. Esta ocorrência é capturada pelo próprio código-fonte do método. Verifique o código-fonte. Após montado o pacote de envio para a solicitação de processamento do serviço. e certifique-se que o mesmo não foi alterado automaticamente pelo engine client de webservices. Verifique o código-fonte. Caso a mesma seja alterada manualmente. que contém a URL para postagem do pacote ao servidor. de acordo com as informações para postagem obtidas no WSDL utilizado para a geração do fonte client. WSCERR045 / Retorno VAZIO de POST : URL <URL> [HEADER_RET] Esta ocorrência é reproduzida. no momento da geração do fonte client. antes do envio do pacote SOAP com o(s) parâmetro(s) da ação/método solicitado. Esta ocorrência é reproduzida. indicando em [SOAP_STYLE] o soap style inválido informado. antes da postagem dos dados. . e não deve ser alterada. quando da utilização de um código-fonte Client de WebServices. Esta propriedade já é alimentada automaticamente pelo engine client de webservices. o pacote é postado no servidor indicado na URL especificada no serviço.F. Esta ocorrência é capturada pelo próprio código-fonte do método. WSCERR044 / Não foi possível POST : URL [URP_POST] Esta ocorrência é reproduzida.WSCERR042 / URL LOCATION não especificada. antes do envio do pacote SOAP com o(s) parâmetro(s) dá ação/método solicitado. Caso a mesma esteja vazia. Esta ocorrência é capturada pelo próprio código-fonte do método. Esta ocorrência é reproduzida. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). WSCERR043 / [SOAP_STYLE] SOAPSTYLE Desconhecido. e não esteja num formato válido. quando da utilização de um código-fonte Client de WebServices. ao enviar o pacote SOAP com o(s) parâmetro(s) da ação/método solicitado. (falso). é verificado o formato do pacote SOAP a ser enviado ao client. ao enviar o pacote SOAP com o(s) parâmetro(s) dá ação/método solicitado. sendo que o método 'Client' chamado retornará . quando da utilização de um código-fonte Client de WebServices. o processamento é abortado com a mensagem acima. caso a propriedade _URL esteja sendo redefinida. No momento de postar o pacote SOAP de parâmetros para um Web Service. sendo que o método 'Client' chamado retornará . de acordo com as informações para postagens obtidas no WSDL utilizado para a geração do código-fonte client. (falso). ou não esteja no ar.F. Caso o servidor de destino do pacote não seja localizado no DNS. Esta propriedade é definida em fonte. é verificada a propriedade reservada _URL do objeto do Serviço. o processamento é abortado com a mensagem acima. o processamento é abortado com a mensagem acima. (falso). e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). quando da utilização de um código-fonte Client de WebServices. antes da postagem dos dados. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). como um erro de sintaxe no XML. e.F. Após montado e enviado o pacote de envio para a solicitação de processamento do serviço. e em <URL> o servidor de WebServices que retornou o pacote. sendo que o método 'Client' chamado retornará . informando em <URL> o endereço do servidor onde o dado foi postado. o pacote SOAP de retorno é considerado inválido. Ao analisar o pacote SOAP retornado pelo serviço. informando em [FAULT_CODE] o código da exceção SOAP. considerada pelo parser interno de xml do sistema como uma advertência (warning). para a alimentação dos parâmetros AdvPL. sendo que o método 'Client' chamado retornará . Após montado e enviado o pacote de envio para a solicitação de processamento do serviço. em HEADER_RET é informado o conteúdo do Header de Retorno do HTTP. Caso seja detectada alguma inconsistência. Esta ocorrência é capturada pelo próprio código-fonte do método. quando da utilização de um código-fonte Client de WebServices. se disponível. ao processar o pacote SOAP recebido como retorno da ação/método solicitado. WSCERR048 / SOAP FAULT [FAULT_CODE] ( POST em <URL> ) : [FAULT_STRING] Esta ocorrência é reproduzida. Caso seja detectada alguma inconsistência. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). quando da utilização de um código-fonte Client de WebServices. Esta ocorrência é capturada pelo próprio código-fonte do método. (falso). o pacote SOAP retornado pelo serviço é analisado para a alimentação dos parâmetros AdvPL. o pacote SOAP retornado pelo serviço é analisado para a alimentação dos parâmetros AdvPL. em <URL> o servidor de WebService que retornou o pacote. caso o pacote de retorno contenha uma exceção do tipo SOAP FAULT.Diferentemente da ocorrência WSCERR014. WSCERR047 / XML Error [XML_ERROR] ( POST em <URL> ) Esta ocorrência é reproduzida. Esta ocorrência é capturada pelo próprio código-fonte do método. e o processamento é abortado com esta ocorrência.F. informando em XML_WARNING a mensagem de advertência do parser interno. informando em XML_ERROR a mensagem de erro do parser interno. e o processamento é abortado com esta ocorrência. . Esta ocorrência é capturada pelo próprio código-fonte do método. WSCERR046 / XML Warning [XML_WARNING] ( POST em <URL> ) Esta ocorrência é reproduzida. nestes casos o processamento é abortado com a ocorrência acima. O processamento é abortado com esta ocorrência. isto indica que houve uma falha de processamento do serviço no servidor. esta ocorrência pode ser reproduzida quando o servidor de WebServices que atendeu à requisição foi localizado.F. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). (falso). quando da utilização de um código-fonte Client de WebServices. sendo que o método 'Client' chamado retornará . ao processar o pacote SOAP recebido como retorno da ação/método solicitado. ao processar o pacote SOAP recebido como retorno da ação/método solicitado. referenciado no header do pacote HTTP. e em <URL> o servidor de WebServices que retornou o pacote. sendo que o método 'Client' chamado retornará . pois ela oferece a possibilidade de recuperar os elementos principais de retorno de um pacote SOAP_FAULT isoladamente.F. porém o servidor do sistema recebeu como retorno um pacote HTTP incompleto ou inválido. e em FAULT_STRING mais detalhes sobre a ocorrência. o pacote SOAP de retorno é considerado inválido. (falso). Veja mais detalhes na função GetWSCError(). a requisição foi feita com sucesso. (falso). considerada pelo parser interno de xml do sistema. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). no documento XML. ou ocorreu um erro interno no servidor. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). Ao analisar o pacote SOAP retornado pelo serviço. WSCERR050 / SOAP RESPONSE REF <NODE_REF> (RPC) NOT FOUND. e o node de resposta aponte para um outro node via referência.T. ao processar o pacote SOAP recebido como retorno da ação/método solicitado. o retorno deve estar dentro do XML. caso o serviço utilize um soapStyle = RPC.: cSoap += WSSoapValue("NomeDaTag". ao processar o pacote SOAP recebido como retorno da ação/método solicitado. e o node de retorno não aponte para nenhuma referência. . e a descrição da ocorrência deve ser recuperada através da função GetWSCError().. .. Esta ocorrência é reproduzida. Esta ocorrência é capturada pelo próprio código-fonte do método. Ao analisar o pacote SOAP retornado pelo serviço. e o node de resposta não seja encontrado no pacote.... no . o pacote é considerado inválido e o processamento é abortado com a mensagem acima.F. Ao analisar o pacote SOAP retornado pelo serviço.. para a alimentação dos parâmetros AdvPL.. e este novo node não seja encontrado no pacote. quando da utilização de um código-fonte Client de WebServices. caso o serviço utilize um soapStyle = RPC. sendo que o método 'Client' chamado retornará . demais parâmetros .. para a alimentação dos parâmetros AdvPL. caso o serviço utilize um SoapStyle = RPC. e o processamento é abortado com a mensagem acima.. Esta ocorrência é capturada pelo próprio código-fonte do método. Expected elements are <{}NomeDaTag> ] Explicação: O Servidor espera que a tag "NomeDaTag" contenha o atributo "xmlns". ainda que vazio: <NomeDaTag xmlns=""> . local:"NomeDaTag"). quando da utilização de um código-fonte Client de WebServices. Esta ocorrência é reproduzida..F. (falso).. para a alimentação dos parâmetros AdvPL. Esta ocorrência é reproduzida. Solução Altere a chamada da função "WSSoapValue" no client gerado pelo IDE de modo que o último parâmetro da função seja .) WSCERR049 / SOAP RESPONSE (RPC) NOT FOUND.. ao processar o pacote SOAP recebido como retorno da ação/método solicitado. (falso). o pacote de resposta é considerado inválido. WSCERR051 / SOAP RESPONSE RETURN (RPC) NOT FOUND. mostrando o identificador de referência não encontrado em <NODE_REF>. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). sendo que o método 'Client' chamado retornará .Alternativas para solução do erro WSCERR048 Ocorrências de erro e a solução possível para elas: Erro: WSCERR048 / SOAP FAULT soap:Client ( POST em http://localhost/webservice/NomeDoServicoWS) : [Unmarshalling Error: unexpected element (uri:"http://localhost/"..T.. quando da utilização de um código-fonte Client de WebServices. (falso). caso o serviço utilize um soapStyle = RPC. e o processamento é abortado com a mensagem acima. WSCERR053 / WSRPCGetNode (Object) not found. (falso). Esta ocorrência é capturada pelo próprio código-fonte do método. A infraestrutura Client de WebServices do sistema não suporta a geração de fontes-client de serviços que não utilizem pacotes XML .F. sendo que o método 'Client' chamado retornará . Caso não exista nenhuma amarração no serviço. o processo de geração do códigofonte ‘client’ é abortado. o processamento é abortado com a mensagem acima. utilizando o TOTVS | Development Studio. obtida no WSDL. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). WSCERR052 / Enumeration FAILED on [STRUCT_TYPE] Esta ocorrência é reproduzida. uma vez identificado o serviço. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). Esta ocorrência é reproduzida. Ao analisar o pacote SOAP retornado pelo serviço. antes do envio do pacote SOAP com o(s) parâmetro(s) da ação/método solicitado. sendo que o método 'Client' chamado retornará . quando da utilização de um código-fonte Client de WebServices. e certifique-se que o parâmetro especificado está alimentado de forma correta. e o processamento é abortado com a mensagem acima. ao processar o pacote SOAP recebido como retorno da ação/método solicitado. o gerador de código procura a declaração das amarrações do serviço (BINDINGS) no WSDL. retornando esta ocorrência. (falso). Esta ocorrência é capturada pelo próprio código-fonte do método. o mesmo é considerado inválido. . Durante a geração do código-fonte. Dentre as amarrações encontradas. para a alimentação dos parâmetros AdvPL. caso o node correspondente a estrutura não seja localizado no pacote de retorno. sendo que o método 'Client' chamado retornará . no momento de análise de um retorno de uma estrutura complexa. apenas são processadas aquelas que especificam o transporte de dados para o serviço no formato SOAP.SOAP para a troca de informações. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). quando da utilização de um código-fonte Client de WebServices. Caso um parâmetro contiver uma definição de “enumeration”. WSCERR054 / Binding SOAP não localizado no WSDL. quando da geração de um código-fonte de WebServices 'Client'. que especifique a utilização do SOAP.F. Esta ocorrência é capturada pelo próprio código-fonte do método.F. Caso o node de retorno não seja encontrado neste nível. Esta ocorrência de erro é reproduzida. identificando o parâmetro envolvido em [STRUCT_TYPE].nível do node de resposta . Verifique o código-fonte client gerado em AdvPL. o pacote de retorno é considerado inválido. os parâmetros do método/ação solicitada do serviço são analisados e validados. para obter a lista de parâmetros válido. Antes da montagem do pacote SOAP. e for alimentado pelo código-fonte ‘client’ com um valor que não conste na lista de parâmetros válidos. F. Isto invalida o pacote soap recebido. quando da utilização de um código-fonte Client de WebServices. WSCERR056 / Invalid XML-Soap Server Response : soap-envelope not found. quando da utilização de um código-fonte Client de WebServices. foi recebido com um tipo AdvPL [X]. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). (falso). sendo que o método 'Client' chamado retornará . Esta ocorrência é capturada pelo próprio código-fonte do método. utilizadas como parâmetros. o retorno é considerado inválido. caso o mesmo não contenha um envelope (soap-Envelope) de resposta. (falso). porém o tipo esperado era [Y]. sendo que o método 'Client' chamado retornará . quando da utilização de um código-fonte Client de WebServices. com o tipo apropriado. Esta ocorrência é reproduzida. Esta ocorrência é reproduzida. ao iniciar o processamento do pacote SOAP recebido como retorno da ação/método solicitado. sendo o processamento abortado com a ocorrência acima. quando da utilização de um código-fonte Client de WebServices. Verifique o código-fonte client gerado em AdvPL. de acordo com sua definição. devem ser alimentadas com os tipos AdvPL apropriados. Ao analisar o pacote SOAP retornado pelo serviço. WSCERR058 / Invalid XML-Soap Server Response : Invalid soap-envelope [SOAP_ENV] object as valtype [X] Esta ocorrência é reproduzida. Caso uma determinada propriedade [PARAM] do objeto 'Client' do serviço esteja alimentada com um tipo de dado Advpl [X]. sendo que o método 'Client' chamado retornará .F. e a descrição da ocorrência deve ser recuperada através da função GetWSCError().F. o processamento é abortado com a ocorrência de erro acima. Esta ocorrência é capturada pelo próprio código-fonte do método. o retorno é considerado inválido. Ao analisar o pacote SOAP retornado pelo serviço. e o processamento é abortado com a mensagem acima. Ao analisar o pacote SOAP retornado pelo serviço. (falso).WSCERR055 / Invalid Property Type (X) for [PARAM] (Y) Esta ocorrência é reproduzida. WSCERR057 / Invalid XML-Soap Server Response : soap-envelope empty. e certifique-se que o parâmetro especificado está sendo alimentado de forma correta. caso não seja possível determinar o prefixo do SOAP Envelope utilizado. Antes da montagem do pacote SOAP. ao iniciar o processamento do pacote SOAP recebido como retorno da ação/método solicitado. Esta ocorrência é capturada pelo próprio código-fonte do método. As propriedades da classe. esperado como um Objeto. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). Esta ocorrência é capturada pelo próprio código-fonte do método. antes do envio do pacote SOAP com o(s) parâmetro(s) da ação/método solicitado. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). ao iniciar o processamento do pacote SOAP recebido como retorno da ação/método solicitado. (falso). e o processamento é abortado com a mensagem acima. os parâmetros do método/ação solicitada do serviço são analisados e validados. . sendo que o método 'Client' chamado retornará .F. caso o soap-envelope determinado [SOAP_ENV]. Esta ocorrência é capturada pelo próprio código-fonte do método. quando da utilização de um código-fonte Client de WebServices. não foi possível determinar o prefixo do corpo (soap-body) utilizado. . e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). WSCERR060 / Invalid XML-Soap Server Response : soap-body envelope empty. (falso). Esta ocorrência é capturada pelo próprio código-fonte do método. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). no SOAP retornado. o que invalida o pacote de retorno. o que invalida o pacote de retorno. sendo que o método 'Client' chamado retornará . Esta ocorrência é reproduzida. sendo o processamento abortado com esta ocorrência de erro. o que invalida o pacote de retorno. sendo que o método 'Client' chamado retornará . sendo o processamento abortado com esta ocorrência de erro. WSCERR062 / Invalid XML-Soap Server Response : Unable to determine Soap Prefix of Envelope [SOAP_ENV] Esta ocorrência é reproduzida.F. esperado como um Objeto. esta ocorrência indica que no SOAP retornado. Semelhante à ocorrência WSCERR057. (falso).WSCERR059 / Invalid XML-Soap Server Response : soap-body not found. quando da utilização de um código-fonte Client de WebServices. Esta ocorrência é capturada pelo próprio código-fonte do método. (falso). sendo o processamento abortado com esta ocorrência de erro. sendo o processamento abortado com esta ocorrência de erro.F. quando da utilização de um código-fonte Client de WebServices. ao iniciar o processamento do pacote SOAP recebido como retorno da ação/método solicitado. o envelope (soap-envelope) determinado [SOAP_ENV]. esta ocorrência indica que pacote SOAP retornado. Semelhante à ocorrência WSCERR058. Esta ocorrência é reproduzida.F. . WSCERR061 / Invalid XML-Soap Server Response : Invalid soap-body [BODY] object as valtype [TYPE] Esta ocorrência é reproduzida. Semelhante à ocorrência WSCERR056. ao iniciar o processamento do pacote SOAP recebido como retorno da ação/método solicitado. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). Esta ocorrência é capturada pelo próprio código-fonte do método. ao iniciar o processamento do pacote SOAP recebido como retorno da ação/método solicitado. quando da utilização de um código-fonte Client de WebServices. Esta ocorrência indica que. foi recebido como um tipo AdvPL [TYPE]. sendo que o método 'Client' chamado retornará . o corpo (soap-body) determinado [BODY]. o que invalida o pacote de retorno. ao iniciar o processamento do pacote SOAP recebido como retorno da ação/método solicitado. sendo que o método 'Client' chamado retornará .F. não está em um formato que seja possível determinar o nome do envelope. (falso). esta ocorrência indica que não foi possível determinar o corpo (soap-body) do pacote SOAP retornado pelo serviço. Esta ocorrência invalida a montagem do pacote de envio. solicitado no endereço <URL>. postado em <URL>. Esta ocorrência é capturada pelo próprio código-fonte do método. . o que invalida o processamento do retorno. quando da geração de um código-fonte de WebServices 'Client'. o parâmetro obrigatório determinado em [NODE]. Esta ocorrência indica que. com uma mensagem do tipo 'Page not Found'. quando da utilização de um código-fonte Client de WebServices. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). o que invalida o processamento de retorno. (falso).F. sendo que o método 'Client' chamado retornará . quando da utilização de um código-fonte Client de WebServices. O client AdvPL sempre espera por um pacote de resposta com um content-type: text/xml como retorno. com o tipo [TYPE]. o pacote SOAP retornado pelo serviço é analisado para a alimentação dos parâmetros AdvPL. sendo que o método 'Client' chamado retornará . WSCERR065 / EMPTY Content-Type return (HEADER) from <URL> Esta ocorrência é reproduzida. quando um determinado WebService não está mais publicado no endereço especificado. após a postagem de um pacote SOAP ao servidor de destino do WebService. Esta ocorrência indica que. WSCERR066 / Invalid INVALID WSDL Content-Type (HTTP_HEAD) from <URL> Esta ocorrência de erro é reproduzida. não possuía a identificação do Content-Type. o header HTTP de retorno do serviço. sendo que o método 'Client' chamado retornará . veio com o conteúdo do header HTTP retornado pelo servidor.WSCERR063 / Argument error : Missing field [NODE] as [TYPE] Esta ocorrência é reproduzida. porém a URL ainda é válida. Esta ocorrência indica que. o servidor devolve uma página HTML. o header HTTP de retorno da requisição do WSDL. (falso). Esta ocorrência é capturada pelo próprio código-fonte do método. Após montado e enviado o pacote de envio para a solicitação de processamento do serviço. ao receber a requisição. Esta ocorrência normalmente é reproduzida. Um Web Service ‘client’ sempre espera por um pacote de retorno com um 'Content-type: text/xml' de um Web Services SERVER. ao processar o pacote SOAP recebido como retorno da ação/método solicitado. Um Web Service ‘client’ sempre espera por um pacote de retorno com um 'Content-type: text/xml' ou 'text/plain'. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). em <URL>.F. Esta ocorrência é capturada pelo próprio código-fonte do método. utilizando o TOTVS | Development Studio. de um Web Services SERVER. abortando o processamento antes do envio do pacote. esta ocorrência indica que. (falso). WSCERR064 / Invalid Content-Type return (HTTP_HEAD) from <URL> Esta ocorrência é reproduzida. quando da utilização de um código-fonte Client de WebServices. não foi alimentado para a chamada da função ‘client’. com esta ocorrência. o que invalida o processamento do retorno. Semelhante à ocorrência WSCERR064. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). De modo que. o conteúdo do header HTTP retornado (HEADER) retornado pelo servidor. indica o uso de content-type diferente de XML.F. ao processar o pacote SOAP recebido como retorno da ação/método solicitado. ao iniciar a montagem do pacote SOAP com os parâmetros para a chamada do serviço. veio identificando um tipo de documento (content-type) diferente de textp/plain ou text/xml. Um documento WSDL deve ser retornado pelo servidor de WebServices. Alternativa para geração do client Caso o WSDL possa ser aberto através de um navegador de internet (Internet Explorer. De modo que. que possua mais de um parâmetro de retorno. Mozilla Firefox. desta vez colocando no campo "URL do WebService" o caminho em que o arquivo se encontra no RootPath. reste mais de um retorno. Esta ocorrência indica que.) . que deveria ser localizado nos parâmetros. WSCERR069 / BYREF [PARAM] WITH NO INPUT ARGUMENT : UNSUPPORTED WEBSERVICE Esta ocorrência de erro é reproduzida. 2. Se o documento WSDL retornado não atender a estes requisitos. após o cruzamento dos retornos do método com os parâmetros. solicitado através do link <URL>.wsdl". o documento retornado pelo servidor de Web Services não se trata de um XML válido para ser analisado. com uma mensagem do tipo 'Page not Found'. Salve o documento em um diretório do RootPath do TOTVS | Application Server. Exemplo: "\arquivo. O documento WSDL deve sempre iniciar com o node da declaração do XML ( <?XML . ao receber a requisição. Caso mesmo assim. o primeiro node deve obrigatoriamente ser a definição do serviço ( <DEFINITIONS ). o servidor devolve uma página HTML. Caso não possua esta informação. antes do envio do pacote SOAP com o(s) parâmetro(s) da ação/método solicitado. informando no header HTTP um tipo de documento (content-type) definido como text/plain ou text/xml. Quando da geração do código-fonte. isto caracteriza um método que trabalha com parâmetros por referência (BYREF). Abra a URL do WSDL no navegador de internet.. quando da geração de um código-fonte de WebServices 'Client'. quando da utilização de um código-fonte Client de Web Services. proceda da seguinte forma: 1. caso o WSDL retornado informe um método de Web Services. o processamento é abortado com a mensagem acima. 3. porém o serviço de HTTP ainda está ativo no servidor solicitado. utilizando o TOTVS | Development Studio. utilizando o TOTVS | Development Studio. .Esta ocorrência normalmente é reproduzida. WSCERR067 / EMPTY WSDL Content-Type (HTTP_HEAD) from <URL> Esta ocorrência de erro é reproduzida. Gere o client novamente a partir do TOTVS | Development Studio. deve restar no máximo um retorno. Neste caso. utilizando o TOTVS | Development Studio. Esta ocorrência indica que.. WSCERR070 / Requisição HTTPS não suportada neste BUILD [PROTHEUS_BUILD] Esta ocorrência é reproduzida. WSCERR068 / NOT XML SOURCE from <URL> Esta ocorrência de erro é reproduzida. sendo o processo de geração abortado com a mensagem de erro acima. quando um determinado WebService não está mais publicado no endereço especificado. informando em [PARAM] o retorno excedente. quando da geração de um código-fonte de WebServices 'Client'. o WSDL é considerado inválido. o header HTTP de retorno do WSDL. veio com o conteúdo do header HTTP sem a informação do tipo de conteúdo do documento (content-type). quando da geração de um código-fonte de WebServices 'Client'. etc). contenha um erro estrutural ou sintático. podemos considerar os status de retorno '403 Forbidden'.F. a build do servidor TOTVS | Application Server deve ser atualizado. porém com um status diferente de 200 (OK) . utilizando o TOTVS | Development Studio. WSCERR072 / HTTP REQUEST ERROR (HEADER) from <URL> Esta ocorrência de erro é reproduzida. quando da utilização de um código-fonte Client de Web Services. Em releases posteriores a este. Esta ocorrência já foi reproduzida anteriormente. . o tratamento dos pacotes de retorno do serviço foi revisado. e em <url> o endereço informado para a solicitação do WSDL. (falso). acessado via URL. e certifique-se que. abra a URL especificada utilizando um Web Browser. e em <url> o endereço informado para a solicitação do WSDL. caso o servidor informado. são realizadas as consistências de cabeçalho de protocolo (header). utilizando o TOTVS | Development Studio. Se e somente se. o processo de geração é abortado com a ocorrência acima. Dentre as possíveis causas. Em primeiro momento. que impossibilitou o retorno do WSDL. acessado via URL. o '500 Internal Server Error'. com um header de retorno que não seja identificado como HTTP.No momento de postar o pacote SOAP de parâmetros para um Web Service. Dentre as prováveis causas. WSCERR073 / Build (BUILD) XML Internal Error Esta ocorrência é reproduzida. ao processar o pacote SOAP recebido como retorno da ação/método solicitado. desde então esta ocorrência não mais foi reproduzida. a mesma não esteja sendo redefinida para um endereço utilizando HTTPS. o conteúdo SOAP retornado pelo serviço. quando da geração de um código-fonte de Web Services 'Client'. este objeto intermediário não é gerado. retornados por proxys que requerem autenticação ou não permitem o acesso à URL especificada. informando em <HEADER> a primeira linha do cabeçalho HTTP retornado. o processo de geração é abortado com a ocorrência acima. e em seguida o pacote SOAP é desmontado por um parser interno do TOTVS | Application Server. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). que não seja detectado pelo parser interno como um erro ou advertência. Quando da geração de códigos-fonte AdvPL. que indica uma ocorrência interna de erro no servidor. onde é verificada a sintaxe do documento XML ( Veja ocorrências WSCERR046 e WSCERR047 ). caso a propriedade _URL esteja sendo redefinida. retorne um pacote HTTP. e a resultante deste processo será um objeto intermediário. com um header de retorno HTTP. Verifique o código-fonte. o que impossibilita a rotina de prosseguir o processamento. Caso a propriedade _URL não esteja sendo redefinida. podemos considerar que a URL informada não corresponde a um servidor HTTP ou de WEB SERVICES. informando em <httphead> o header informado. em builds do TOTVS | Application Server anteriores à Dezembro/2003. sendo que o método 'Client' chamado retornará . e o serviço solicitado exija o envio dos dados através de HTTPS. Quando da geração de códigos-fonte AdvPL. caso o servidor informado. retorne um pacote HTTP. Para certificar-se da ocorrência. Esta ocorrência é capturada pelo próprio código-fonte do método. é verificado se o protocolo em uso é o HTTPS. e se o mesmo já é suportado pela Build atual do servidor TOTVS | Application Server em uso. WSCERR071 / INVALID HTTP HEADER (HTTPHEAD) from <URL> Esta ocorrência de erro é reproduzida. O pacote SOAP retornado pelo serviço é analisado para a alimentação dos parâmetros AdvPL. quando da geração de um código-fonte de WebServices 'Client'. observe os tipos de dados disponibilizados. . ------------------------------------------------------------------------------WSCERRINT / invalid method APXMLDOC45682:SOAPSEND ADVPL WSDL Client 1. utilizando variáveis AdvPL. NIL. através de uma variável dos seguintes tipos: . para Web Service client. "SCHEMA". ERROR_DESCRIPTION Invalid Method É registrada a ocorrência WSCERRINT / invalid method no envio de um pacote SOAP cujo parâmetro da ação/método solicitado provém de um schema. as ocorrências de falha dentro destas rotinas são protegidas por um tratamento de erro exclusivo..F. em algum ponto do processamento do método da classe client. e somente se. . utilizando o tipos básicos de dados reservados para aplicações client.Client É possível gerar código-fonte AdvPL. sendo que o método 'Client' chamado retornará . após a geração do próprio.F.F. Para permitir a manipulação de cada tipo de dado. .) Solução Monte e substitua pelo xml no formato requerido: cSoap += "<reclamanteTable></reclamanteTable>" Tipos de dados suportados . o tratamento de erro for acionado por uma ocorrência inesperada. e a ocorrência é prefixada com o código WSCERRINT (Web Service Client Internal Error). verifique os parâmetros informados ao método chamado. em AdvPL. e a descrição da ocorrência deve ser recuperada através da função GetWSCError(). ::oWSreclamanteTable. A seguir. e mostrada em . Se. que informa detalhes da ocorrência. a descrição da ocorrência de erro é capturada.Esta ocorrência é capturada pelo próprio código-fonte do método.CallStack -------------Called from WSSOAPVALUE (4438) Called from MARCARNOVOSRECLAMANT ( 115) Called from EXEMPLO ( 9) ------------------------------------------------------------------------------- Ocorrência Altere o código-fonte do 'client' Web Service e onde temos: cSoap += WSSoapValue("reclamanteTable". Caso seja reproduzida esta ocorrência. são utilizados os tipos básicos da linguagem AdvPL que tratam simultaneamente mais de um tipo de dado dos pacotes SOAP dos Web Services.090116 / TOTVS Manufatura Everymoment on 20100521 16:04:52 -------------.F. WSCERRINT ERROR_DESCRIPTION Quando executado um método 'client' de Web Service. (falso). . 0 . e certifique-se que o código-fonte da classe 'client' em AdvPL não sofreu nenhuma alteração manual. oWSreclamanteTable . A aplicação 'client' deve ser capaz de se comunicar com a aplicação Server.Simple Objetc Access Protocol ou protocolo simples de acesso a objetos: O SOAP é um padrão aberto. a partir de uma definição WSDL publicada em um servidor HTTP ou disponibilizada em um arquivo . uma lista de tipos de informações 'nativa' . apontando para o servidor que provê o serviço. .WSDL. criado pela Microsoft. Estrutura: É chamada de estrutura.implementada na definição dos WebServices.Web Services Description Language: Trata-se de um documento.. que consiste no agrupamento de outras informações e/ou estruturas. Este documento em geral é fornecido através de uma URL. SOAP . Pode ser usado em combinação com vários outros protocolos comuns da Internet.) BASE64BINARY Variável do tipo 'L' Lógica BOOLEAN Glossário . Web Service 'Client': Aplicação desenvolvida à partir de uma definição (WSDL) publicada e disponibilizada por uma aplicação 'Server'.Web Services Glossário de termos e expressões de Web Services. Fonte Client: Código-fonte AdvPL.. através da geração de uma classe 'Client' em AdvPL. cuja função é definir uma informação.Variável do tipo 'N' Numérica INT INTEGER BYTE FLOAT DOUBLE UNSIGNEDLONG UNSIGNEDINT DECIMAL LONG Variável do tipo 'D' Data DATE Variável do tipo 'C' Character STRING DATETIME CHAR (Corresponde a uma string que contém o número do caractere correspondente à tabela ASCII. WSDL . baseado em XML. Ariba e IBM para padronizar a transferência de dados entre aplicações. gerado pela ferramenta do TOTVS | Development Studio 'Gerar Cliente WebServices. segundo as regras fornecidas pelo Web Services Server através do WSDL. como HTTP e SMTP.'. Tipo básico: São chamados de tipos básicos. uma classe intermediária de dados para Web Services. através do qual um provedor de um serviço provê a discriminação detalhada das funcionalidades de um serviço. utilizando mensagens em XML/SOAP. o ERP é capaz de gerar automaticamente um 'Fonte Client' para estabelecer a conexão e utilização do serviço. Utilizando este documento. em formato de acordo com as definições de Web Services. XML Schema Definition: Arquivo associado a um documento XML que descreve e valida os dados no documento. permitindo a criação de tipos de dados personalizados e regras específicas para os mesmos. Observação: Não deixe de visitar o Totvs Developer Network através do link http://tdn. que são definidas num documento anexo. Sua principal característica é a extensibilidade. para tornar possível o desenvolvimento de uma aplicação 'Client' que irá solicitar a execução da aplicação server e obter o retorno desta. XML .Web Service 'Server': Aplicação desenvolvida para tornar disponível um recurso. Quem emite um documento XML pode criar tags personalizadas.totvs.com para incrementar e atualizar os seus conhecimentos. que tem extensão XSD. processamento ou informação.Extensible Markup Language: O XML é uma linguagem baseada em tags semelhante ao HTML. . XSD . juntamente com sua definição (WSDL).
Copyright © 2024 DOKUMEN.SITE Inc.