WEBCODELOG

free codes, enjoy

Annotations e XFire um jeito simples de criar Web Services

without comments

Eu já falei um pouco de Web Services por aqui, mas ainda tem muita coisa a ser discutida e experimentada sobre este assunto.

Existem diversas formas de distribuir serviços na internet e a o número de ferramentas para tornar isto cada vez mais fácil aumentam constantemente. Pesquisando sobre conceitos e maneiras práticas para desenvolvimento encontrei no Blog dos Desenvolvedores da Caelum um jeito simples para criação de Web Services utilizando a especificação JSR-181 e JSR-224, achei interessantíssimo e não perdi tempo em fazer os testes.

A especificação permite que você crie serviços utilizando apenas Annotations.

import javax.jws.WebMethod;
import javax.jws.WebService;
import tucano.bean.Pessoa;

@WebService
public class PessoaWS {
private Pessoa[] list = new Pessoa[5];

public PessoaWS() {
list[0] = new Pessoa("M", "Luciano", "Silva");
list[1] = new Pessoa("F", "Priscila", "Carmo");
list[2] = new Pessoa("F", "Maria", "Conceição");
list[3] = new Pessoa("F", "Lucia", "Felix");
list[4] = new Pessoa("M", "Cristino", "José");
}

@WebMethod
public Pessoa[] listAll(){
return list;
}
}

Perceba que este Web Service foi criado de maneira extremamente simples apenas para demonstração, porém, o método retorna um tipo de dado complexo, isto para sair da monotonia.

Ainda o que os caras da Caelum, vamos fazer a publicação/ativação do serviço utilizando o XFire projeto relacionado ao Apache CXF

<!-- // X-Fire //--->
<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>services.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<!-- // //--->

Se você for seguir o site do projeto X-Fire, irá perceber que é sugerido a criação do arquivo no caminho META-INF/xfire/services.xml, isto não deu muito certo comigo, tentei diversas configurações e até percebi que é um bug em aberto para o projeto.

Para resolver o problema opite por colocar o arquivo de configuração services.xml na raíz do source [src/services.xml].

<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>PessoaService</name>
<namespace>http://xfire.codehaus.org/PessoaService</namespace>
<serviceClass>tucano.ws.PessoaWS</serviceClass>
</service>
</beans>

Básicamente a configuração se resume em um nome para o Serviço e a Classe que implementa-o. Após fazer deploy do projeto no seu container JEE você poderá acessar o serviço da seguinte maneira http://localhost/<CONTEXTO>/services/<SERVICE_NAME>?wsdl, então, http://localhost/Tucano/services/PessoaService?wsdl.

Você pode fazer o download dos fontes aqui.

É prático, fácil e rápido, vale ser estudado e em alguns casos sugerido como solução, mesmo assim eu estou cansado de ver configurações em arquivo XMLs fora do contexto, não sou muito adepto a esta solução, de qualquer maneira tá dado o recado. =)

Bookmark and Share

Written by Luciano

agosto 16th, 2008 at 8:11 pm

Leave a Reply