RESTful dando erro de retorno em Json

2 respostas
V

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&lt;Cliente&gt; 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&lt;Cliente&gt; pesquisarCliente(String cpf) {
	Query queryHibernate = null;
        List&lt;Cliente&gt; 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&lt;Cliente&gt;) 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.


2 Respostas

A

Acabei de falar sobre isso neste tópico: http://www.guj.com.br/java/288581-type-erasure-com-genericentity

Aliás, também vou referenciar este lá.

[]'s

V

Obrigado Alexandre pela sua ajuda.
descobri que faltava alguns jars na minha aplicação depois de adicionados resolveu o problema retornando o json.
segue foto dos jars adicionados:

Criado 30 de novembro de 2012
Ultima resposta 30 de nov. de 2012
Respostas 2
Participantes 2