terça-feira, 29 de abril de 2008

Coldfusion 8 conversando com Intalio BPMS

Depois de muitas tentativas de fazer o Coldfusion conversar com o BPMS da Intalio, entre elas, usar Proxy de webservices, da WSO2 OxygenTank, (http://wso2.org/projects/esb/java) que na tentativa de filtrar o que estava provocando erros no axis do Coldfusion, acabou não funcionando, pois o problema eram os BUGs do próprio Axis da Apache.

 

Eu ia construir uma série de webservices em C# que funcionassem como Proxy, convertendo as chamadas do Intalio BPMS para o Coldfusion e vice versa. Mas o empreendimento seria grande demais, pois a cada manutenção do de qualquer serviço tanto de um lado como do outro, deveria ser feita manutenção no meio também.

 

Então tomei uma decisão radical: mergulhar no código fonte do Axis (disponível na Apache em http://svn.apache.org/viewcvs.cgi/webservices/axis/trunk/) e tentar corrigir seus problemas perante o Intalio. Eu já sabia que o problema era ele, pois sua tecnologia foi substituída pelo Axis2, mas o Coldfusion continua usando a versão 1.

No site da apache (https://issues.apache.org/jira/browse/AXIS) mostra todos os bugs conhecidos e corrigidos do Axis, e encontrei um relacionado com o problema que tive, relacionado com as declarações <SOAP:FAULT>.

 

Comecei a fazer testes nos fontes do Axis e encontrei vários pontos que provocavam problemas.

O Coldfusion lida com webservices gerando códigos em Java de cada um dos serviços, e essa geração é feita pelo axis usando o comando WSDL2Java.

Ao gerar os fontes em Java para o Coldfusion, o axis falhava na geração de nomes de classes os mesmos não compilavam dentro do CF.

Fui eliminando os problemas um por um e acabei chegando a um ultimo, uma função chamada getAttachments dentro da classe stub.java – sempre que compilava o wsdl para Java conflitava essa função. O problema era a chamada do serviço TaskManagementService do Intalio, que tem uma operação com o mesmo nome, e o axis acabou gerando esse método com o mesmo nome do herdado, provocando um conflito de heranças.

Esse eu também corrigi, e agora estou usando um AXIS personalizado dentro do ColdFusion 8 (funciona no 7 tambem).

 

Se alguém tiver o mesmo problema é só me pedir que eu mando o pacote do Axis para testar.

 

Fernando Francisco de Oliveira

Analista de Suporte - TI

Dental Morelli

 

sexta-feira, 4 de abril de 2008

ColdFusion MX7/8 vs Intalio BPMS - Round II

Mais divergências nas comunicações de serviços :

 

·         O Intalio BPMS usa as ultimas versões dos softwares de serviços da Apache, o Axis2.

·         O Coldfusion MX7 e 8 ainda usam o Axis Versão 1 – Versão 1.2/1.3/1.4

 

Isso faz com que os serviços de webservices gerados no Intalio, gerados pelo Axis2, sejam mal interpretados pelo Coldfusion, não reconhecendo os elementos <soap:fault> existentes nas chamadas das funções que tem manipulação de erros:

TaskManagementServices

 

Isto é devido a um bug no Axis, relativo a manipulação do protocolo Soap 1.2, conforme encontrei no JIRA:
https://issues.apache.org/jira/browse/AXIS-2614

 

Eu baixei os fontes do Axis e corrigi o bug mencionado, mas não solucionou o problema, pois ele passou, mas gerou erros em outras rotinas.

Toda vez que se faz uma chamada de um WebService pelo Coldfusion, que tem o Java como base, ele roda as rotinas para geração de classes (em Java) para acesso aquele serviço, usando as rotinas wsdl2java existentes no framework axis. O resultado do fonte gerado é um código Java que dá erro de semântica ao compilar. Então o processo para ai.

 

Vasculhando os fontes do axis, encontrei dezenas de entradas TODO, justamente em pontos que manipulam o protocolo Soap 1.2, com as mesmas características do ponto onde corrigi.

 

Fiz a tentativa de instalar o Coldfusion 8 dentro do servidor Apache Geronimo, acreditando que desta maneira ele faria uso do novo Axis (o 2), mas foi em vão, pois o Axis ainda vai para dentro da instalação do mesmo.

 

A próxima tentativa será a utilização de um Servidor Proxy de serviços que converta os formatos de protocolo, para tentar compatibilizar os serviços. Aguardem mais noticias: