Vejamos a seguir nesta publicação, como consumir um webServices SOAP no Magic xpa 4.x usando o Apache AXIS2
São várias as opções que temos disponíveis no Magic xpa 4.x para o consumo de webServices SOAP, a partir de um WSDL existente:
- Invoke WS Lite
- WCF Client
- HTTP Post Operation
- Apache AXIS2
Neste post, vamos abordar e exemplificar a opção 4: Consumo de WS SOAP com o Apache AXIS2.
(em outras publicações falaremos das demais opções)
Esta (AXIS2) é uma opção multi plataforma: serve tanto para o SO Windows, quanto para o SO Linux.
Mas antes, vamos abordar as “pré-condições” para utilização deste recurso.
Pré-Requisitos
Java 8
Vem por default na instalação do Magic xpa 4.7. Mas se sua versão for inferior a esta por exemplo, pode ser necessário instá-lo (caso já não esteja) manualmente na máquina.
É um pré-requisito do Magic xpa Studio e também do Magic xpa Runtime.
A sua pasta de instalação deve estar informada no MAGIC.INI, na seção [MAGIC_JAVA]:
Além disso, é conveniente sempre ter uma variável de ambiente chamada JAVA_HOME apontando para a pasta de localização do JDK 8 (de preferência o de 32Bits):
e ter estas pastas adicionadas no início do PATH do SO:
SET PATH=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;<restante do PATH>
Apache AXIS 2
Este possivelmente precise ser instalado à parte, caso já não o tenha (para atender outros sistemas por exemplo) ou o instalador (Setup) do Magic xpa não o tenha disponibilizado junto ao produto principal.
AXIS2 = https://axis.apache.org/axis2/java/core/
É um pré-requisito do Magic xpa Studio somente.
Uma vez instalado, deve ser criada uma variável de ambiente (Windows) de nome AXIS2_HOME, apontando para sua pasta home de instalação:
Além disso, a pasta (referência): lib\* desta instalação deve também estar informada no MAGIC.INI, na seção [MAGIC_JAVA], chave CLASSPATH:
Apache ANT
Este possivelmente precise ser instalado à parte, caso já não o tenha (para atender outros sistemas por exemplo) ou o instalador (Setup) do Magic xpa não o tenha disponibilizado junto ao produto principal.
ANT = https://ant.apache.org/
É um pré-requisito do Magic xpa Studio somente.
Uma vez instalado, deve ser criada uma variável de ambiente (Windows) de nome ANT_HOME, apontando para sua pasta home de instalação:
Além disso, a pasta (referência): lib\* desta instalação deve também estar informada no MAGIC.INI, na seção [MAGIC_JAVA], chave CLASSPATH:
Consumindo o Serviço Web – Gerando a classe “Proxy”
Resolvidas as questões dos pré-requisitos, o próximo passo é ter a posse do WSDL do(s) serviço(s) que necessitamos acessar e codificar sua chamada no Magic xpa.
Neste exemplo vamos utilizar o https://www.dataaccess.com/webservicesserver/TextCasing.wso?WSDL, método InvertStringCase:
*Nota: Este WS simples recebe um texto como argumento e inverte suas letras maiúsculas em minúsculas, e vice-versa.
Devemos acessar o CRR do nosso projeto a adicionar uma novo componente do tipo “Apache Axis2“:
Em seguida, executamos o ZOOM (F5) neste novo componente e informamos ao assistente o WSDL do serviço (que pode ser uma URL ou um arquivo em disco):
Ao clicar “OK”, o Magic xpa Studio vai invocar o Apache AXIS2 (%AXIS2_HOME%\bin\wsdl2java.bat [ … ] ), gerando um arquivo JAR com o código Java que faz o consumo deste webService.
Este módulo cliente de consumo é colocado na pasta %EngineDir%\JavaClientModules:
E passa a ser a referência interna no componente que acabamos de criar no CRR:
*Nota: Esta pasta %EngineDir%\JavaClientModules precisa ser levada para o ambiente do Magic xpa Runtime, que vai executar este projeto.
Consumindo o Serviço Web – Programando a chamada do Serviço
Tendo gerado a classe Java de consumo, o passo final é a codificação no programa Magic xpa da chamada deste serviço.
Como é um componente Apache AXIS2 (Java), isso é feito através de variáveis do tipo JAVA nos programas.
Geralmente (mas não é regra imutável), uma chamada vai requerer 3 classes:
- Stub = É a classe geral do serviço que foi decodificado e convertido em código Java. Ela abrange todos os métodos listados no WSDL.
- Request = É a classe que define o objeto com os “parâmetros de entrada” (caso existam) do método que será invocado.
- Response = É a classe que define o objeto com o “retorno” (caso exista) do método que será invocado.
Para nosso método de exemplo (InvertStringCase), essas classes foram geradas como:
- Stub = com.dataaccess.www.webservicesserver.TextCasingStub
- Request = com.dataaccess.www.webservicesserver.TextCasingStub.InvertStringCase
- Response = com.dataaccess.www.webservicesserver.TextCasingStub.InvertStringCaseResponse
Estes são justamente os tipos de dados das variáveis JAVA do nosso programa Magic xpa:
Tendo as variáveis definidas, em algum ponto do programa (ex: Task Prefix) é necessário instanciá-las (criar seus objetos), através da chamada dos seus construtores (exceto ‘Response’):
Java.com.dataaccess.www.webservicesserver.TextCasingStub() Java.com.dataaccess.www.webservicesserver.TextCasingStub.InvertStringCase()
Como este método (InvertStringCase) recebe um argumento (uma ‘string’), devemos preenchê-lo na classe Request:
B.setSAString( RTrim( <Virtual ALPHA> ) ) *Nota: Este formato acima não é uma regra geral. Vai variar de serviço para serviço, método para método, a forma como devem ser preenchidos os argumentos de entrada.
Na sequência, é feita a chamada do método (com o objeto ‘Request‘ como argumento), e ele retorna uma instância (objeto) da classe ‘Response‘:
<Objeto STUB>.invertStringCase( <Objeto REQST> )
E para finalizar, se deu tudo certo (não houver um Java Exception), podemos extrair o resultado da classe ‘Response‘ retornada:
<Objeto RESPONSE>.getInvertStringCaseResult()
No exemplo, passamos como argumento a string ‘magic software brasil‘ e o retorno do webService é este:
Baixe deste endereço um projeto exemplo com o Magic xpa 4.7, usando o Apache AXIS2.
Para receber os artigos do Blog Magic Brasil em primeira mão no seu email, registre-se aqui