Webservice RESTful com Java

2 respostas
zorba
boa noite pessoa :D meu primeiro post aqui :oops: então galera, meu problema é o seguinte...tenho um webservice com rest, uma livraria, usando o jersey, mas não consigo consigo gravar uma locação, que contem varios livros na verdade, ele nem passa pelo metodo de gravação, me retorna ja um bad request :( to vendo tb que os xmls gerados pelo jaxb e pelo xstream tão saindo diferentes, o que é um problema iuaheiua xml do jaxb:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<locacao>
	<livros>
		<livro>
			<autor>
				<id>1</id>
				<nome>Everton</nome>
			</autor>
			<id>2</id>
			<isbn>123465</isbn>
			<titulo>java</titulo>
		</livro>
	</livros>
	<usuario>
		<email>filho</email>
		<id>1</id>
		<nome>filho</nome>
		<senha>filho</senha>
	</usuario>
</locacao>
xml do xstream
<org.utfpr.pojo.Locacao>
  <usuario>
    <id>1</id>
    <nome>filho</nome>
    <senha>filho</senha>
    <email>filho</email>
  </usuario>
  <livros>
    <org.utfpr.pojo.Livro>
      <id>2</id>
      <autor>
        <id>1</id>
        <nome>Everton</nome>
      </autor>
      <titulo>Java</titulo>
      <isbn>123465</isbn>
    </org.utfpr.pojo.Livro>
  </livros>
</org.utfpr.pojo.Locacao>

Codigo do meu controlador

@Path("locacao")
@Consumes("text/xml")
public class LocacaoResource extends Resource {
	
	@POST
	@Produces("text/xml")
	public Response cadastrarLocacao(Locacao locacao){
		try {
			System.out.println("Quantidade de livros: "+locacao.getLivros().size());
			new DaoLocacao(HibernateUtil.sessao()).cadastra(locacao);
			return CREATED;
		} catch (Exception e) {
			e.printStackTrace();
			return CREATED;
		}
	}

aqui ele nem imprime o "Quantidade de livros". antes disso, o meu cliente ja recebe um bad request

Cliente
public boolean salvaLocacao(Locacao locacao){
		try {
			HttpClient cliente = new HttpClient();
			PostMethod pm = new PostMethod(Server.URL+"locacao");
			XStream xs = new XStream();
			String locXML = xs.toXML(locacao);
			
			JAXBContext context = JAXBContext.newInstance(new Class[]{Locacao.class});
			Marshaller marshaller = context.createMarshaller();
			marshaller.marshal(locacao, new File("C:/mar.xml"));
			
			System.out.println(locXML);
			StringRequestEntity sre = 
				new StringRequestEntity(locXML, "text/xml","UTF-8");
			pm.setRequestEntity(sre);
			
			int status = cliente.executeMethod(pm);
			if(status == HttpStatus.SC_CREATED)
				return true;
			return false;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} 
	}

alguem tem alguma luz?
obrigado

2 Respostas

R

tenta colocar em cima do
@XStreamAlias(“locacao”)
public class Locacao

@XStreamAlias(“livro”)
public class Livro

acredito que funcionará…

R

retificando user não…

@XStreamAlias(“livro”)
public class Livro

Criado 24 de junho de 2009
Ultima resposta 1 de out. de 2009
Respostas 2
Participantes 2