Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvidas sobre gerar o XML

E quando eu tenho um arraylist de objetos. Como devo gerar uma string para gerar esse xml? Ex: '''@GET @Produces(MediaType.APPLICATION_XML)

public String buscaPedidosXML() throws Exception { String xml = "";

Listpedidos = new PedidoDAO().buscaPedidos();

return ??? }''' Como devo fazer esse retorno?

4 respostas

Pessoal, já descobri uma possível solução Fiz um for da lista e depois fui armazenando numa string, Depois converti. Aproveitei e mudei para JSon.

public String buscaPedidosXML() throws Exception {
        String json = "";
        List<Pedido>pedidos = new PedidoDAO().buscaPedidos();
        for(int i = 0;i<pedidos.size();i++) {
            Pedido pedido = new Pedido();
            pedido.setNumero(pedidos.get(i).getNumero());
            json += pedido.toJSON();
        }
        return json;
    }

Infelizmente achei que resolveria. Mas o Jason não retorna string. Não sei se na hora de pegar o índice estou fazendo errado pois minha tabela tem 3 colunas. id, cliente e separado. É somente o valor de id e separado, ambos inteiros, aparecem no json. Alguém tem ideia?

Oi Bruno,

Quando se trabalha com XML, o JAX-B é a especificação responsável por converter seus objetos para esse formato.

Na última aula o instrutor mostrará como configurar o JAX-B no projeto, para que não seja necessário ficar convertendo o objeto em uma String manualmente: https://cursos.alura.com.br/course/webservices-rest-com-jaxrs-e-jersey/task/4725

Mas no seu caso, como você tem uma lista de objetos, deverá criar uma classe que "encapsule" essa lista:

@XmlRootElement
public class Pedidos {
    private List<Pedido> pedidos;

    public Pedidos(List<Pedido> pedidos) {
        this.pedidos = pedidos;
    }

    public List<Pedido> getPedidos() {
        return this.pedidos;
    }
}
@GET 
@Produces(MediaType.APPLICATION_XML)
public Pedidos buscaPedidosXML() {
    List<Pedidos> todos = new PedidoDAO().buscaPedidos();

    return new Pedidos(todos);
}
solução!

Opa, beleza Rodrigo. Obrigado pela resposta. Mas resolvi da seguinte maneira. Achei que o recurso tinha que ser obrigatoriamente uma string. Mas percebi que retornando uma List eu conseguia fazer o que precisava.

@GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Pedido> buscaPedidosXML() throws Exception {

        List<Pedido>pedidos = new PedidoDAO().buscaPedidos();

        return pedidos;
    }

Não ligue para o numero do método. XD Obrigado mesmo assim