É comum realizarmos integrações entre sistemas através de Web Services tradicionais. Na minha empresa, em particular, usamos o Apache Axis, uma implementação Java do protocolo SOAP (Simple Access Object Protocol).
Observação: tratando-se de prover serviços de integração, eu, particularmente, escolheria o protocolo REST, mas quando acessamos serviços de terceiros não temos muita escolha, não é?
Irei descrever, em alto nível, os passos que geralmente realizamos para implementar a integração.
Requisitos
Antes de mais nada precisamos do arquivo WSDL (Web Servcie Definition Language), o qual define todos os serviços disponíveis, parâmetros e tipos de dados utilizados.
Algumas vezes recebemos a URL do end point, isto é, o endereço do Web Service. Por exemplo:
http://servidor:8080/app/webservices
Neste caso, obtemos o arquivo WSDL acresentando um parâmetro ao endereço, assim:
http://servidor:8080/app/webservices?wsdl
Gerando o client
O primeiro passo de implementação é gerar as classes de domínio e as interfaces stub usando o plugin do Eclipse WTP. (Siga os links para maiores detalhes)
Os objetos client são gerados com base no WSDL e assim o acesso ao Web Service se dá como uma chamada de método local, usando objetos locais, via RPC (Remote Procedure Call). A conversão dos objetos de e para XML no formato SOAP, além do transporte na rede é feito de forma transparente para o desenvolvedor.
Testando
O testes de integração com serviços de terceiros, pelo menos no nosso caso, não é algo viável de automatizar, pois não termos controle sobre o ambiente, nem acesso direto.
Para verificarmos se o serviços estão sendo acessados corretamente, criamos uma classe de teste com valores fictícios. O modelo do código ficou mais ou menos assim:
ServiceFactory serviceFactory = ServiceFactory.newInstance(); Service service = serviceFactory.createService( new ServicoServiceLocator().getServiceName() ); ServicoSoapStub stub = new ServicoSoapStub( new java.net.URL("http://site.com.br/app/ws"), service ); ClasseRetorno retorno = stub.executarServico( new ParametroServico(...) );
Este link contém mais alguns que você pode usar como modelo para o seu Web Service.
Analisando o conteúdo da mensagem SOAP
Num caso específico, o cliente enviou exemplos de mensagens XML no protocolo SOAP e quisemos verificar se as mensagens geradas pelo Axis a partir do nosso código eram equivalentes em conteúdo.
Para inspecionar o Axis e ver o conteúdo da mensagem, adicionei os jars do log4j, commons-logging e commons-discovery. Também acrescentei na configuração do log (log4j.properties) a seguinte linha:
log4j.logger.httpclient.wire.content=DEBUG
Dessa forma, foram adicionadas mensagens no LOG com todo o conteúdo enviado pelo Axis.