[RESOLVIDO] RESTFul webservices

3 respostas
G

Preciso retornar um XML com os códigos de erro e uma descrição, usando RESTFul webservices. Dá erro em tempo de execução.

Alguma sugestão?

PessoaResource.java

package meupacote.resource;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import br.com.ccsolution.sgo.dao.PessoaDAO;
import br.com.ccsolution.sgo.dao.SGODAOException;
import br.com.ccsolution.sgo.model.Pessoa;
import br.com.ccsolution.sgo.model.MensagemXML;

@Path("/pessoa")
public class PessoaResource {
	@GET
	@Path("codPessoa/{codPessoa}")
	@Produces({ MediaType.APPLICATION_XML })
	public MensagemXML atualizaPessoa(@PathParam("codPessoa") long codPessoa){
		int retorno = 0;
		PessoaDAO pessoaDAO = new PessoaDAO();
		MensagemXML msg = new MensagemXML();

		retorno = PessoaDAO.atualizaPessoa(codPessoa);

		switch (retorno) {
		case 0:
			msg.setCodigo(-1001);
			msg.setDescricao("Pessoa não encontrada. Nenhum registro foi atualizado.");
			break;
		default:
			msg.setCodigo(0);
			msg.setDescricao("Concluído com sucesso.");
			break;
		}

		return msg;
	}
}
//Console - erros
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 meupacote.model.MensagemXML, and Java type class meupacote.model.MensagemXML, and MIME media type application/xml 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:1437)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	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:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:722)
Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class meupacote.model.MensagemXML, and Java type class meupacote.model.MensagemXML, and MIME media type application/xml was not found
	... 20 more

3 Respostas

A

Dê uma olhada na classe Response.

EDIT: Ah, dica… um método ‘atualizaPessoa’ seria melhor representado pelo verbo PUT e o path ficaria melhor como pessoa/{codPessoa} do que como pessoa/codPessoa/{codPessoa} (o atual).

[]'s

G

OK, obrigado

Bastou adicionar a notação na classe que quero retornar @XmlRootElement

package meupacote.model;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class MensagemXML {
	private long codigo;
	private String descricao;

	public long getCodigo() {
		return codigo;
	}

	public void setCodigo(long codigo) {
		this.codigo = codigo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
}
A

OK. Só alerto que ficaria mais elegante utilizando a notação do próprio HTTP para a transferência dessas informações.

[]'s

Criado 2 de janeiro de 2012
Ultima resposta 2 de jan. de 2012
Respostas 3
Participantes 2