WebServices com o XFire

Postado em 25. mar, 2007 por em Java

Nessa segunda feira o Fábio Kung estava me contando de algumas vantagens que enxergava no XFire para criar webservices, e eu logo comentei que preferia o JBossWS porque bastava eu colocar um jar no diretório de deploy, conforme já blogamos anteriormente.

Uma das vantagens que ele citou é do Jetty embutido que existe no XFire, que facilita em muito o desenvolvimento, sem a necessidade de fazer deploys ou reiniciar o JBoss. Considere o bean, o mesmo do post sobre o JBossWS, que quero expor como um webservice:

@WebService
public class AgenteDeReservaBean {
  @WebMethod
  public boolean reserva(@WebParam(name = "nome") String nome,
              @WebParam(name = "voo") String voo) {

    // logica de negocios, ou delegacao para o BO
    return false
  }
}

Agora, para verificar o WSDL gerado e fazer o deploy do serviço e até mesmo invocá-lo, basta seguir o seguinte código:

public class LigaJettyDoXFire {
   public static void main(String[] args) throws Exception {
       XFire xfire = XFireFactory.newInstance().getXFire();

       AnnotationServiceFactory factory =
              new AnnotationServiceFactory(xfire.getTransportManager());
       Service service = factory.create(AgenteDeReserva.class);
       xfire.getServiceRegistry().register(service);

       XFireHttpServer server = new XFireHttpServer(xfire);
       server.start();
   }
}

Através do XFireHttpServer o XFire inicia um jetty embutido rodando na porta 8081. Acessando localhost nessa porta você terá uma lista dos serviços registrados que foram expostos pelo XFire. A velocidade de inicialização do servidor é simplesmente impressionante. Essa dica do Fábio já aplicamos em um projeto nessa mesma semana, e diminuiu bastante o tempo gasto para desenvolvimento e testes.

O Fábio também me mostrou o recurso do XFire fazer uma invocação dinâmica, sem necessidade de stubs. Ainda não fiz nenhum teste, até porque não sei como ele vai serializar em XML uma array de objetos para que eles estejam conforme os complex types utilizados no WSDL. Agora é só torcer para que o gsoap não tenha problemas para gerar os stubs, pois quem vai consumir esse serviços são pequenos dispositivos que rodam código escrito em C.

É impressionante como diversas ferramentas e frameworks clássicos da Apache, como nesse caso o Axis, perdem cada vez mais espaço para os projetos concorrentes pertencentes aos outros grupos, tais como o opensymphony, codehaus e JBoss. Apache que se cuide…

Paulo Silveira

Mais sobre o autor

Tags: ,

9 Respostas para “WebServices com o XFire”

  1. Rafael de F. Ferreira

    25. mar, 2007

    Eu tenho a impressão que, no fim, quase todo mundo acaba indo para a Apache. Veja o WebWork que virou o Apache Struts 2.

    Neste caso, tem o Apache CXF, que é a união do XFire (codehus/servicemix) com o Celtix (objectweb/iona)…

  2. Rafael de F. Ferreira

    25. mar, 2007

    Uma correção no meu comentário anterior: escrevi bobagem, o XFire não tem a ver com Servicemix. Eu queria dizer LogicBlaze, mas pelo jeito também não tem nada a ver…

    De qq forma, o fato do XFire ter migrado para a Apache via CXF é importante.

  3. krico

    26. mar, 2007

    Pô pelo que você descreveu este XFire parece ser super straight-forward!

    O que eu gostava do JBossWS era poder fazer um stateless SessionBean que ao mesmo tempo era um WS e assim não tinha duplicação de código. Alem de poder usar praticamente a mesma interface pro “cliente” que ta numa rede externa (que fala WS) e pro cliente que tem acesso “privilegiado” e pode falar RMI.

    Pelo teu post não consegui sacar se isto é possível com o XFire, mas imagino que ele não seja um J2EE container né?

  4. Paulo Silveira

    26. mar, 2007

    Krico, realmente tem essa desvantagem de nao expor um EJB diretamente, o que o JBoss tem. Mas aqui queremos matar um problema menor…

    E de qualquer forma, com o wsdl montado, nada te impede de depois migrar a sua implementacao para um EJB, sem nem mesmo precisar delegar as invocações, e sim configurando o JBossWS para receber aquela requiscao no seu SLSB.

    Rafael, sobre o XFire ir para o Apache eu nem sabia… Pra mim é uma ma noticia. Agora vai comecar aquele ciclo de desenvolvimento lento, como o velocity e o struts. :(

  5. Diego Pires Plentz

    27. mar, 2007

    Mais sobre a ida do XFire pra Apache em http://cwiki.apache.org/confluence/display/CXF/Index. O Gui não tem notícias mais quentes? :)

  6. Fernando Boaglio

    03. abr, 2007

    Pelo jeito o Fábio continua sendo um rato de Jetty! =) Realmente em ambiente de desenv, ao olhar um Jetty subir em 4 segundos onde o Tomcat leva 30, é impossível não trocar :P

  7. Rafael de F. Ferreira

    10. abr, 2007

    Novidade: IONA comprou a LogicBlaze.

Trackbacks/Pingbacks

  1. » WebServices sem servidor de aplicação no java 6 » blog.caelum.com.br - julho 11, 2007

    [...] ou Jetty, é preciso usar um framework para criar um WebService. Já foi mencionado o Xfire nesse mesmo blog (que agora faz parte do projeto CFX), mas existem outros como o AXIS da Apache ou Metro do [...]

  2. WebServices sem servidor de aplicação no java 6 | blog.caelum.com.br - janeiro 21, 2011

    [...] ou Jetty, é preciso usar um framework para criar um WebService. Já foi mencionado o Xfire nesse mesmo blog (que agora faz parte do projeto CXF), mas existem outros como o AXIS da Apache ou Metro do [...]

Deixar uma Resposta