Boa tarde pessoal,
Estou com um problema em um RESTful para retornar uma pesquisa que estou fazendo,
na hora de retornar o list<Cliente> do metodo ele dá o seguinte erro:
Nov 30, 2012 11:13:21 AM com.sun.jersey.spi.container.ContainerResponse logException
Grave: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.ArrayList, and Java type class java.util.ArrayList, and MIME media type application/json; charset=UTF-8 was not found
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:285)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1451)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1363)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1353)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.ArrayList, and Java type class java.util.ArrayList, and MIME media type application/json; charset=UTF-8 was not found
... 24 more
fiz várias pesquisas e nenhuma delas me levaram a lugar algum, segue os códigos:
Classe RESTful que chama o método de pesquisa:
@Path("/cpf")
public class PesquisaPorCpf {
protected Response buildResponse(List<Cliente> cliente){
return Response.ok(cliente).header("Access-Control-Allow-Origin", "*").build();
}
@Path("{cpf}")
@GET
@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
public Response getCliente(@PathParam("cpf") String cpf) {
PesquisarBeneficiarioPorCpf pesquisarPorCpf = new PesquisarBeneficiarioPorCpf();
return this.buildResponse(pesquisarPorCpf.pesquisarCliente(cpf));
}
}
Metodo de pesquisa no banco:
@SuppressWarnings("unchecked")
public List<Cliente> pesquisarCliente(String cpf) {
Query queryHibernate = null;
List<Cliente> clientes = null;
String jpql = " SELECT at from Cliente at JOIN at.origem og WHERE at.cpf =:cpf ORDER BY at.nome";
try{
sessao = HibernateUtil.getSessionFactory().openSession();
queryHibernate = sessao.createQuery(jpql);
queryHibernate.setParameter("cpf", cpf);
queryHibernate.setCacheable(true);
Long inicio = System.currentTimeMillis();
clientes = (List<Cliente>) queryHibernate.list();
Long fim = System.currentTimeMillis();
System.out.println("Tempo total: "+ (fim - inicio)+" ms");
System.out.println(HibernateUtil.getSessionFactory().getStatistics());
}catch(HibernateException ex){
System.out.println("Ocorreu um erro no SQL. \nveja o erro no log abaixo: \n" + ex);
throw new ExceptionInInitializerError(ex);
}
return clientes;
}
Entity da tabela do banco:
@Entity
@Cacheable
@Table(name="central_clientes")
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(insertable=false, updatable=false )
private Long codigo;
private String nome;
private String cpf;
private String endereco;
private String bairro;
private String cidade;
@Column(name="estado")
private String uf;
@ManyToOne
@JoinColumn(name="origem", nullable = false)
private Origem origem;
public Long getCodigo() {
return codigo;
}
public void setCodigo(Long codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getUf() {
return uf;
}
public void setUf(String uf) {
this.uf = uf;
}
public Origem getOrigem() {
return origem;
}
public void setOrigem(Origem origem) {
this.origem = origem;
}
}
segue imagen dos jar´s usados:
agradeço desde já a todos.

