É 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.