software‎ > ‎módulos‎ > ‎engine‎ > ‎perguntas frequentes‎ > ‎

Como fazer para consumir um WebService?

postado em 11 de mai de 2010 13:38 por Usuário desconhecido   [ 25 de mai de 2010 11:55 atualizado‎(s)‎ ]


Este artigo mostra como usar a API Enginelet para consumir Web Services. Iremos criar um Enginelet para consumir o Web Service criado no artigo Como fazer para criar e publicar WebServices?.

Conceitos básicos da criação de um Enginelet poderão ser encontrados na página Como fazer para executar código Java no iEngine?.

Requisitos

Java SE Development Kit (JDK) 6 (http://java.sun.com/javase/downloads/index.jsp)
Eclipse Web Tools Platform - WTP (http://download.eclipse.org/webtools/downloads/)

Passo-a-Passo

   1. Use o Apache CXF para gerar os stubs Java a partir do WSDL. No prompt de comando digite:

      wsdl2java -p <pacote de destino dos stubs> -d <diretório de destino dos stubs> <url do wsdl>

      Exemplo: wsdl2java -p br.com.unum.engine.webservice.teste.client -d "c:\MyServiceClient\src" http://127.0.0.1:8081/myservice?wsdl

      Se o servidor de webservices usar a mesma JVM que o cliente de webservice(o que é incomum), sugerimos usar a opção -p do wsdl2java para gera os stubs em outro pacote diferente do pacote default. Isso evita conflito com as classe do servidor.

   2. Crie um novo projeto no eclipse chamado MyServiceClient e coloque os stubs gerados na pasta src do projeto;

   3. Adicione as seguinte javalibs no projeto:
         1. enginelet-2.0.jar;
         2. json-lib-2.2.2-jdk15.jar
         3. commons-lang-2.3.jar
         4. commons-logging-1.1.1.jar
         5. commons-logging-api-1.1.1.jar
         6. ezmorph-1.0.4.jar
         7. commons-collections-3.2.jar
         8. commons-beanutils.jar

   4. Crie um Enginelet chamado br.com.unum.engine.webservice.teste.MyServiceClientEnginelet;

   5. Implemente o Enginelet na seguinte forma:

      package br.com.unum.engine.webservice.teste;

      import net.sf.json.JSONObject;
      import br.com.inteq.engine.enginelet.Enginelet;

      public class MyServiceClientEnginelet extends Enginelet {

          public String handleCommand(String commandName, String[] params) {
              String cpf = params[0];
              MyService_Service servico = new MyService_Service();
              MyService porta = servico.getMyServiceImplPort();
              Entidade entidade = porta.obterEntidadePorCPF(cpf);
              JSONObject jsonObject = JSONObject.fromObject(entidade);
              return jsonObject.toString();
          }
      }


   6. Gere o JAR;

   7. Copie o JAR para o diretório <Pasta do UNUMengine>\javalibs e certifique-se que neste diretório há um arquivo chamado .ignoresync. Caso não exista, crie-o.

   8. Reinicie o iEngine para que a JVM atrelada ao iEngine monte um novo classpath;

   9. Certifique-se que o serviço esteja no ar e no iDBCsql execute o Enginelet que consume o serviço:

      var enginelet = new Enginelet( "br.com.unum.engine.webservice.teste.client.MyServiceClientEnginelet" )
      var json = enginelet.handleCommand( "", "613.908.793-72" )

      var pessoa = eval( "(" + json + ")" )
      pessoa.nome

IMPORTANTE: Algumas distribuições da versão 1.6 da JRE possuem bug. Sugerimos realizar a atualização da sua JRE antes de usa o ambiente Java integrado com o iEngine.