Professor, Se o conteudo já é representação do produto, por quê se faz necessário informar o parametro: @PathParam("produtoId") Long produtoId ? Considerando o trecho abaixo:
@Path("{id}/produtos/{produtoId}")
    @PUT
    public Response atualizaProduto(String conteudo,@PathParam("id") Long id, @PathParam("produtoId") Long produtoId){
        Carrinho carrinho= new CarrinhoDAO().busca(id);
        Produto produto = (Produto) new XStream().fromXML(conteudo);
        System.out.println(produto);
        carrinho.troca(produto);
        return Response.ok().build();
    } 
            