Boa tarde! Estou executando testes referentes ao Jaxb mas não está funcionando: O problema é que o Nome dos Produtos retorna NULL.
->Valores exibidos no console.....
***********************************
Venda : Forma de pagamento: Cartao - produtos:
[Nome:null
, Nome:null
, Nome:null
, Nome:null
]
***********************************
Veja o código fonte(utilizo Maven):
1)App.java
package com.br.cate;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import com.br.cate.bean.transforma.Venda;
public class App
{
public static void main( String[] args ) throws Exception
{
JAXBContext contexto = JAXBContext.newInstance(Venda.class);
Unmarshaller unmarshaller = contexto.createUnmarshaller();
Venda venda = (Venda) unmarshaller.unmarshal(new File("src/main/resources/vendas.xml"));
System.out.println("Venda : "+venda);
}
}
2)Venda.java
package com.br.cate.bean.transforma;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import com.br.cate.bean.Produto;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Venda {
private String formaDePagamento;
@XmlElementWrapper(name="produtos")
@XmlElement(name="produto", required = true)
private List<Produto> produtos;
public void setFormaDePagamento(String formaDePagamento) {
this.formaDePagamento = formaDePagamento;
}
public String getFormaDePagamento() {
return formaDePagamento;
}
public void setProdutos(List<Produto> produtos) {
this.produtos = produtos;
}
public List<Produto> getProdutos() {
return produtos;
}
@Override
public String toString() {
return "Forma de pagamento: "+ formaDePagamento + " - produtos: \n " + produtos;
}
}
3)Produto.java
package com.br.cate.bean;
public class Produto {
private String nome;
public Produto() {
}
public Produto(String nome) {
this.nome = nome;
}
public String getNome() {
return this.nome;
}
@Override
public String toString() {
return "Nome:"+ this.nome + "\n";
}
}
4)Vendas.xml
<?xml version="1.0"?>
<venda xsd:noNamespaceSchemaLocation="venda2.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">
<formaDePagamento>Cartao</formaDePagamento>
<produtos>
<produto>
<nome>Livro de java com xml</nome>
</produto>
<produto>
<nome>Livro de jax-p</nome>
</produto>
<produto>
<nome>Livro de O.O em java</nome>
</produto>
<produto>
<nome>Livro do Rodrigo</nome>
</produto>
</produtos>
</venda>
5)Vendas2.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="produto">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nome" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="venda">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="formaDePagamento" type="xsd:string" />
<xsd:element name="produtos">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="produto" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
6) POM(está incompleto...):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<dependencies>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version