Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

O SOAP (Simple Object Access Protocol) é um protocolo utilizado em trocas de informação entre sistemas, ou seja, um formato padronizado para o envio de estruturas entre diferentes serviços. Esse padrão permite a comunicação entre plataformas totalmente diferentes, como por exemplo, C++, Java e Ruby, sem muito trabalho. No Cronapp, é possível utilizar esse serviço de forma low-code nos blocos de programação, fazendo com que o bloco criado possa ser utilizado em outra aplicação de forma simples, além de agilizar ainda mais o desenvolvimento dos projetos.

Neste tutorial veremos como ativar o serviço de SOAP e gerar o arquivo WSDL, permitindo que outras aplicações utilizem esse serviço. Ao fim do tutorial, criaremos um segundo projeto que requisitará o serviço SOAP disponibilizado pelo primeiro projeto, alimentando o campo Resultado (Figura 1).

Image Removed

Figura 1 - Cálculo realizado via serviço SOAP

Pré-requisito

Antes de começar é necessário ter certeza de que se possui um ambiente preparado para a realização do exemplo. Abaixo estão os principais requisitos necessários.:

  1. Projeto do tipo mobile
-web
  1. ou web criado
. Caso
  1. , caso haja dúvidas de como criar esse tipo de projeto acesse o
link
  1. link criar
novo
  1. projeto
.
  1. ;
  2. Saber criar um bloco de programação, caso haja dúvidas acesse o link bloco de programação;
  3. Saber utilizar as permissões de segurança da IDE, caso haja dúvidas acesse o link permissão de segurança.

Introdução

Neste tutorial veremos como ativar o serviço de SOAP e gerar o arquivo WSDL, permitindo que outras aplicações utilizem esse serviço. No primeiro projeto, iremos criar um bloco de programação que estará habilitado para disponibilizar o serviço SOAP.

Configurando bloco servidor

A funcionalidade de SOAP está disponível somente em bloco de programação do tipo servidor, então crie um bloco servidor e informe tanto um nome para o arquivo quanto para a função (Figura 1.1).


Image Added

Figura 1.1 - Criando nova função

Propriedades do bloco

Após criar a função, clique na engrenagem Configurações dos tipos de regras (seta da Figura 1.2) para abrir a janela de Propriedades do bloco de programação (1 da Figura 1.2). Nessa janela, habilite a opção Disponibilizar como SOAP para disponibilizar o campo Endereço SOAP (2 da Figura 1.2). Além disso, abra a janela do campo de Segurança (destaque 3 da Figura 1.2) e selecione a opção Todos para os campos Permitir ExecutarPermitir Obter e Permitir Editar. Por fim, salve tudo.


Image Added

Figura 1.2 - Habilitando SOAP no bloco

Criando função

Ao voltar para área de edição do bloco, clique sobre a engrenagem do bloco Função (destaque da Figura 1.3) para abrir o popup de adição de parâmetros (1 da Figura 1.3), arrasta dois blocos até entradas (seta da Figura 1.3) e renomeie o campo nome de entrada de um para n1 (sigla para identificar o número 1) e o outro para n2 (sigla para identificar o número 2). Os parâmetros adicionados ficarão disponíveis no menu lateral Variáveis (2 da Figura 1.3).


Image Added

Figura 1.3 - Adicionando parâmetros de entrada à função


Arraste o bloco operações aritméticas, que se encontra na categoria Matemática (1 da Figura 1.4), e o insira no retorno da função (2 da Figura 1.4). Deixa a operação como soma e insira as variáveis n1n2 nos espaços vazios do bloco (destaque 2 da Figura 1.4).


Image Added

Figura 1.4 - Adicionando bloco ao retorno da função


Por fim, salve o bloco.

Passos

Configuração do Bloco de programação

Para ativar esse serviço devemos criar um bloco do tipo servidor, pois essa funcionalidade só estão disponíveis em blocos de programação do tipo servidor. Caso haja alguma dúvida em relação a como criar um bloco de programação, clique aqui

Nesse exemplo, utilizaremos um bloco de programação para retornar à adição de 2 números via SOAP. Após desenvolver o bloco de programação (função "Soma" da figura 2.1), abra a janela de propriedades do bloco de programação e ative a opção Disponibilizar como SOAP (item 1 da Figura 2.1) para habilitar o campo Endereço SOAP (item 2).

Image Removed

Figura 2.1 - Janela de configuração de um bloco (servidor)

Além disso, ative as permissões do bloco de programação no campo Segurança, selecionando a opção todos nos campos Permitir Executar, Permitir Obter e Permitir Inserir. (Figura 2.2)

Image Removed

Figura 2.2 - Permissões de segurança das configurações do bloco de programação servidor

Permissão de acesso ao serviço

As Permissões de segurança afetam diretamente o serviço SOAP, por isso, precisamos é preciso liberar o caminho que será gerado para o serviço. Acesse a funcionalidade Então, no menu do sistema da IDE, acesse ProjetoPermissão de Segurança no menu Projeto e  e clique no botão editar (item 1 seta da Figura 3.12) do permissionável Public.

Image Removed

Figura 3.1 - Acesso a funcionalidade Permissão de segurança do Cronapp

Ao abrir a janela de edição Nisso, será aberta a janela de edição do permissionável, então clique na aba Visões (destaque 1 da Figura 3. 2) e depois no ícone de adicionar "+" (destaque campo de pesquisa, insira o caminho /services/** (2 da Figura 3. 2) para abrir a janela de inserir visões (destaque 3 da Figura 3.2). Insira o caminho"/services/**(destaque 4 da Figura 3.2) e desmarque a opção permitir DELETE. Salve e rode novamente o sistema, caso esteja em execução.

Image Removed

e clique no botão de editar (seta da Figura 2) dessa visão e desmarque a opção permitir DELETE (destaque da Figura 2). Por fim, salve todas as janelas abertas e execute o projeto.


Image Added

Figura 2 - Configurando acesso na permissão de segurançaFigura 3.2 - Liberando acesso a tudo dentro de services

Obtendo o WSDL

Rode o projeto e execute-o, abra o navegador e Ao abrir o navegador, adicione após o endereço gerado "/services/**", ficando assim: https://<url da aplicação>/services/. A página irá exibir todos os serviços SOAP do sistema.

Image Removed

para abrir a janela de Service List que exibe todos os serviços SOAP do sistema. O endereço ficará assim: <Domínio>/services/

Nota
titleImportante

É imprescindível a utilização da barra final ( / ) após a palavra services, do contrário o link WSDL irá redirecionar para um erro. Isso acontece por causa de um erro presente na biblioteca CFX, que é de terceiros, por tanto, o Cronapp, não possui controle sobre ela.


Image Added

Figura 3Figura 4.1 - Lista de serviços SOAP SOAP


Clique Ao clicar no link do serviço Calculo para ser encaminhado do bloco (no caso do tutorial, o SOAPService), será encaminhado para o endpoint do WSDL https://app-19-33-45754.ide.cronapp.io/services/Calculo?wsdl (exemplo do tutorial).(destaque da Figura 3.2).


Image Added

Figura 3.2 - Endpoint do WSDL do bloco criado


Bloco de código
languagexml
firstline1
titleExemplo de XML gerado pelo serviço SOAP
linenumberstrue
collapsetrue
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://CalculoBloco" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="CalculoServiceBlocoService" targetNamespacetargetnamespace="http://CalculoBloco"> 
    <wsdl:types> 
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://CalculoBloco" attributeFormDefaultattributeformdefault="unqualified" elementFormDefaultelementformdefault="unqualified" targetNamespacetargetnamespace="http://CalculoBloco"> 
            <xs:element name="Soma" type="tns:Soma" /> 
            <xs:element name="SomaResponse" type="tns:SomaResponse" /> 
            <xs:complexTypecomplextype name="Soma">
         
        <xs:sequence> 
                    <xs:element minOccursminoccurs="0" name="arg0" type="xs:string" />
           
          <xs:element minOccursminoccurs="0" name="arg1" type="xs:string" /> 
                </xs:sequence> 
            </xs:complexType>
      complextype> 
      <xs:complexTypecomplextype name="SomaResponse"> 
                <xs:sequence>
           
          <xs:element minOccursminoccurs="0" name="return" type="xs:string" /> 
                </xs:sequence> 
            </xs:complexType>
      complextype> 
      <xs:element name="Exception" type="tns:Exception" /> 
            <xs:complexTypecomplextype name="Exception"> 
                <xs:sequence> 
                    <xs:element minOccursminoccurs="0" name="message" type="xs:string" /> 
                </xs:sequence> 
            </xs:complexType>complextype> 
        </xs:schema> 
    </wsdl:types> 
    <wsdl:message name="Exception"> 
        <wsdl:part element="tns:Exception" name="Exception"><> 
    </wsdl:part> 
    </wsdl:message> 
    <wsdl:message name="Soma"> 
        <wsdl:part element="tns:Soma" name="parameters"><> 
    </wsdl:part> 
    </wsdl:message> 
    <wsdl:message name="SomaResponse"> 
        <wsdl:part element="tns:SomaResponse" name="parameters"><> 
    </wsdl:part> 
    </wsdl:message> 
    <wsdl:portTypeporttype name="CalculoBloco"> 
        <wsdl:operation name="Soma"> 
            <wsdl:input message="tns:Soma" name="Soma"></wsdl:input>> 
      </wsdl:input> 
      <wsdl:output message="tns:SomaResponse" name="SomaResponse"></wsdl:output>> 
      </wsdl:output> 
      <wsdl:fault message="tns:Exception" name="Exception"></wsdl:fault>
  > 
      </wsdl:operation>fault> 
    </wsdl:portType>operation> 
  </wsdl:porttype> 
  <wsdl:binding name="CalculoServiceSoapBindingBlocoServiceSoapBinding" type="tns:CalculoBloco"> 
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
        <wsdl:operation name="Soma"> 
            <soap:operation soapActionsoapaction="" style="document" /> 
            <wsdl:input name="Soma">
         
        <soap:body use="literal" /> 
            </wsdl:input> 
            <wsdl:output name="SomaResponse">
         
        <soap:body use="literal" /> 
            </wsdl:output> 
            <wsdl:fault name="Exception">
         
        <soap:fault name="Exception" use="literal" /> 
            </wsdl:fault> 
        </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="CalculoServiceBlocoService"> 
        <wsdl:port binding="tns:CalculoServiceSoapBindingBlocoServiceSoapBinding" name="CalculoPortBlocoPort"> 
            <soap:address location="https://app-1928-33228-4575449170.ide.cronapp.io/services/CalculoBloco" /> 
        </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions>

Consumir o serviço SOAP

Após a requisição do cliente consumidor, o provedor do serviço retornará sua resposta em formato JSON, como podemos ver abaixo. Por isso, será necessário obter o campo "_return" do objeto.

Bloco de código
languagejava
firstline1
titleJSON de retorno do serviço SOAP
linenumberstrue
{
   "somaResponseSomaResponse":{
      "_returnSpecified":true,
      "_return":"25"
   }
}

Teste

Usaremos o próprio Cronapp para testar o serviço, e por isso criamos um novo projeto e importamos o serviço SOAP que geramos nos passos anteriores. Para mais detalhes de como importar e configurar um serviço SOAP de terceiros, acesse o tutorial Consumindo Web Service SOAP.

Para esse teste, usamos o bloco de programação soma, gerado automaticamente pelo Cronapp após importar o serviço SOAP. O bloco soma recebe 2 parâmetros obtidos dos campos de entrada de texto "Primeiro número" e "Segundo número" (Figura 1) que estão em uma página do Projeto de teste.

O bloco soma faz uma requisição ao projeto que provê o serviço e retorna o resultado em formato JSON, como explicado no tópico anterior, por isso estamos usando o bloco Obter campo do Json. Ao final, o campo entrada de texto Resultado (Figura 1) será alimentado com o retorno do serviço (Figura 1). 

Image Removed

Figura 5.1 - Bloco que faz a requisição ao projeto que provê o serviço SOAP

Nessa Nesta página

Índice


Outras informações:

Web Services