Tive problemas na execução.
Se eu não usar as anotações @XmlAccessorType(XmlAccessType.FIELD)
e @XmlElement(name="produto")
o programa roda, mas, traz a lista vazia, como é esperado. Mas, se eu coloco as anotações da a seguinte Exception
Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
A classe tem duas propriedades do mesmo nome "produtos"
this problem is related to the following location:
at public java.util.List br.com.elias.models.Venda.getProdutos()
at br.com.elias.models.Venda
this problem is related to the following location:
at java.util.List br.com.elias.models.Venda.produtos
at br.com.elias.models.Venda
at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
at javax.xml.bind.ContextFinder.find(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at br.com.elias.teste.MapeaXMLDireto.main(MapeaXMLDireto.java:13)
Minhas classes estão assim:
package br.com.elias.teste;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import br.com.elias.models.Venda;
public class MapeaXMLDireto {
public static void main(String[] args) throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(Venda.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Venda venda = (Venda) unmarshaller.unmarshal(new File("src/Arquivo.xml"));
System.out.println(venda);
}
}
package br.com.elias.models;
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;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Venda {
String formaDePagamento;
List<Produto> produtos;
public String getFormaDePagamento() {
return formaDePagamento;
}
@XmlElementWrapper(name="produtos")
@XmlElement(name="produto")
public List<Produto> getProdutos() {
return produtos;
}
public void setFormaDePagamento(String formaDePagamento) {
this.formaDePagamento = formaDePagamento;
}
public void setProdutos(List<Produto> produtos) {
this.produtos = produtos;
}
@Override
public String toString() {
return "Venda [formaDePagamento=" + formaDePagamento + ", produtos=" + produtos + "]";
}
}
Qual o meu problema?