Aparentemente a classe esta identica a do professor, mas não gera XML e a leitura do XML retorna tudo null;
package br.com.alura.View;
import java.util.LinkedList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import br.com.alura.Model.Produto;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Venda {
private String formaDePagamento;
@XmlElementWrapper(name="produtos")
@XmlElement(name="produto")
private List<Produto> produtos;
public void setFormaDePagamento(String formaDePagamento) {
this.formaDePagamento = formaDePagamento;
}
public void setProdutos(List<Produto> produtos) {
this.produtos = produtos;
}
public String getFormaDePagamento() {
return formaDePagamento;
}
public List<Produto> getProdutos() {
return produtos;
}
@Override
public String toString() {
return "Forma de pagamento: "+ formaDePagamento + "produtos: \n " + produtos;
}
}
package br.com.alura.View;
import java.io.File;
import java.io.StringWriter;
import java.util.LinkedList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import br.com.alura.Model.Produto;
public class MapeandoXMLVenda {
public static void main(String[] args) throws Exception {
JAXBContext contexto = JAXBContext.newInstance(Venda.class);
xmlParaObjeto(contexto);
objetoParaXml(contexto);
}
private static void objetoParaXml(JAXBContext contexto) throws Exception {
Marshaller marshaller = contexto.createMarshaller();
Venda venda = new Venda();
List<Produto> produtos = new LinkedList<>();
venda.setFormaDePagamento("Credito");
produtos.add(new Produto("livro de JSF", 29.9));
produtos.add(new Produto("livro de JSF 2.0", 29.9));
produtos.add(new Produto("livro de Hibernate", 29.9));
produtos.add(new Produto("livro de XML", 29.9));
produtos.add(new Produto("livro de Java OO", 29.9));
produtos.add(new Produto("livro de PHP", 29.9));
venda.setProdutos(produtos);
StringWriter writer = new StringWriter();
marshaller.marshal(marshaller, writer);
System.out.println(writer);
}
private static void xmlParaObjeto(JAXBContext contexto) throws JAXBException {
Unmarshaller unmarshaller = contexto.createUnmarshaller();
Venda venda = (Venda) unmarshaller.unmarshal(new File("src/venda.xml"));
System.out.println(venda);
}
}
CONSOLE
Forma de pagamento: nullprodutos:
[-----------
Nome do produto: null
Preco do produto: 0.0
-----------, -----------
Nome do produto: null
Preco do produto: 0.0
-----------, -----------
Nome do produto: null
Preco do produto: 0.0
-----------]
Exception in thread "main" javax.xml.bind.JAXBException: class com.sun.xml.internal.bind.v2.runtime.MarshallerImpl e nenhuma de sua superclasse é conhecida para este contexto.
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getBeanInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(Unknown Source)
at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(Unknown Source)
at br.com.alura.View.MapeandoXMLVenda.objetoParaXml(MapeandoXMLVenda.java:43)
at br.com.alura.View.MapeandoXMLVenda.main(MapeandoXMLVenda.java:21)