Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Bom, cabe a você também decidir qual tipo de serviço sua aplicação
deve prover, tanto o WSDL como o RESTful tem suas vantágens e
desvantágens e é necessário saber qual delas prover para seu cliente e se
preciso prover as duas soluções, com o Apache CXF isso é possível, cheguei a
essa conclusão pois a pouco tempo, participei de um projeto onde inicialmente
províamos acesso a um WebService WSDL para o cliente, porém foi
necessário disponibilizar também o acesso ao RESTful e como utilizávamos o
Apache CXF não tivemos que mudar nada no projeto e nenhúm cliente foi
afetado, pois a interface do projeto continuava a mesma.
Interface:
package com.w ordpress.dchohfi.service;
@Path("/")//caminho onde o serviço REST fica disponibilizado, seguido pelo @Path de cada parametro
@Produces({"application/xml", "application/json"})//tipos de retorno que o nosso REST pode produzir
@WebService//definimos aqui que essa interface é um WebService WSDL
public interface Service {
Implementação:
@Override
public Cliente getCliente(int id) throw s ClienteException {
return clienteDao.getCliente(id);
}
@Override
public Collection<Cliente> getClientes() {
return clienteDao.getClientes();
@Override
public Cliente getCliente(int id) throw s ClienteException {
for (Cliente cliente : clientes) {
if(cliente.getId() == id)
return cliente;
}
throw new ClienteException("Cliente com id "+id+" não encontrado!");
}
ClienteExceptionMapper:
package com.w ordpress.dchohfi.exception;
@Override
public Response toResponse(ClienteException arg0) {
return Response.status(Status.BAD_REQUEST).build();
}
}
Verifique como é simples, você pode dizer qual o Status do Response gerado
pelo método, ainda é possível colocar uma mensagem para mostrar para o
usuário o que aconteceu com a requisição que ele fez. Agora precisamos
configurar o Spring juntando tudo o que fizemos, considere isso como um
pequeno tutorial desse incrivel framework. Leia os comentários dentro do XML
e qualquer dúvida poste um comentário e caso seja necessário farei um breve
tutorial sobre Spring.
Configuração do Spring:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://w w w .springframew ork.org/schema/beans"
xmlns:xsi="http://w w w .w 3.org/2001/XMLSchema-instance"
xmlns:context="http://w w w .springframew ork.org/schema/context"
xmlns:cxf="http://cxf.apache.org/core"
xmlns:jaxw s="http://cxf.apache.org/jaxw s"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="http://w w w .springframew ork.org/schema/beans
http://w w w .springframew ork.org/schema/beans/spring-beans-2.5.xsd
http://w w w .springframew ork.org/schema/context
http://w w w .springframew ork.org/schema/context/spring-context-2.5.xsd
http://cxf.apache.org/core
http://cxf.apache.org/schemas/core.xsd
http://cxf.apache.org/jaxw s
http://cxf.apache.org/schemas/jaxw s.xsd
web.xml
<context-param>
<param-name>w ebAppRootKey</param-name>
<param-value>cxf.rest.example.root</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
Bom, aqui estamos dizendo ao Spring o que fazer com a nossa aplicação e
estamos carregando o Apache CXF para rodar dentro de um servidor de
aplicações escolhido por você, aqui você pode ficar tranquilo pois a
configuração é padrão.
Neste momento temos nossa aplicação funcionando e pronta para
ser colocada para rodar. Lembra do plugin do Jetty dentro do POM do
Maven2? Iremos utilizá-lo agora. Demonstrarei rapidamente como fazer as
configurações para debugar seu projeto dentro do Eclipse.
Faça as seguintes configurações, dentro de Run Configurations no
Eclipse crie um novo Java Application e siga as instruções como nas imagens:
Acredito que com isso você consiga subir seu projeto dentro do
Eclipse e debugar sem problemas sua aplicação, você poderá consumir sua
aplicação REST a partir do link
http://localhost:8080/ServiceSample/rest/cliente/1/ por exemplo, deixo como
dica utilizar um complemento para o FireFox o RESTClient, onde você pode
consumir aplicações RESTful sem problema e analizar com clareza os
resultados obtidos e para consumir WebServices WSDL recomendo o soapUI
que possui diversas funcionalidades para testar e sobrecarregar seu servidor e
verificar o número de acessos simultâneos que ele aguenta.
É importante ressaltar que você pode escolher se deseja prover
acesso aos dois WebServices dentro da aplicação para o cliente, cabe a você
decidir o que é melhor.
Bom, aqui acaba nosso tutorial que acabou ficando maior do que eu
esperava, tomara que eu não tenha me perdido em alguma parte e caso algo
tenha ficado confuso ou passado desapercebido deixe um comentário que
tentarei esclarecer.
Espero que quem leia goste do material e por favor, comente, é
importante. Quero continuar este pequeno projeto adicionando funcionalidades
como integração do Spring com o Hiberante entre outras coisas, para
realmente ter um tutorial completo para uma aplicação robusta.
O nosso DAO generico não precisa saber qual classe ele está relacionando,
ele precisa apenas fazer as operações básicas de um CRUD. Porém com o
suporte ao Hibernate temos algo a mais além das operações básicas. Verifique
que o método findByCriteria pode receber ou não um Array de Criterion onde
podemos fazer buscas mais específicas no banco de dados.
package com.w ordpress.dchohfi.model.dao.hibernate;
@Override
public List<Cliente> findClietsWithPhone() {
return findByCriteria(Expression.isNotNull("telefone"), Expression.ne("telefone", ""));
}
}
@Override
public Cliente getCliente(Long id) throw s ClienteException {
Cliente cliente = this.clienteDao.findById(id);
if (cliente == null)
throw new ClienteException("Nenhum usuario com id" + id + " encontrado!");
return cliente;
}