Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

400 Bad request no PUT ao utilizar serialização com JAXB

Depois que passei a serializar o Produto com o JAXB ao fazer um PUT para alterar a quantidade do produto recebo sempre o retorno 400 Bad request,

Produto

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Produto {

    private double preco;
    private long id;
    private String nome;
    private int quantidade;

    public  Produto(){

    }

CarrinhoResource:

    @Path("{id}/produtos/{produtoId}/quantidade")
    @PUT
    public Response alteraProduto(Produto produto, @PathParam("id") long id, @PathParam("produtoId") long produtoId){
        Carrinho carrinho = new CarrinhoDAO().busca(id);
        carrinho.trocaQuantidade(produto);
        return Response.ok().build();
    }

Curl:

curl -v -X PUT -H "Content-Type: application/xml" -d "<produtos><preco>4000.0</preco><id>6237</id><nome>Videogame 4</nome><quantidade>5</quantidade></produtos>" http://localhost:8080/carrinhos/1/produtos/6237/quantidade

Retorno:

> PUT /carrinhos/1/produtos/6237/quantidade HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Type: application/xml
> Content-Length: 105
> 
* upload completely sent off: 105 out of 105 bytes
< HTTP/1.1 400 Bad Request
< Date: Wed, 05 Jul 2017 14:18:17 GMT
< Connection: close
< Content-Length: 0
1 resposta
solução!

O problema é que o XML que estava sendo enviado no PUT continha a tag , no plural e isto impedia que o JAXB reconhecesse a classe Produto ao tentar serializar o XML, bastou corrigir a tag para o nome correto da classe que a ser serializada, que no caso era , no singular, para corrigir o problema

Curl:

curl -v -X PUT -H "Content-Type: application/xml" -d "<produto><preco>4000.0</preco><id>6222</id><nome>Videogame 4</nome><quantidade>50</quantidade></produto>" http://localhost:8080/carrinhos/2/produtos/6222/quantidade

Retorno OK:

* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> PUT /carrinhos/2/produtos/6222/quantidade HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Type: application/xml
> Content-Length: 104
> 
* upload completely sent off: 104 out of 104 bytes
< HTTP/1.1 200 OK
< Date: Wed, 05 Jul 2017 17:02:27 GMT
< Content-Length: 0
< 
* Connection #0 to host localhost left intact