2
respostas

Jaxb Não Funciona.

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
2 respostas

Oi Rodrigo,

faltou o setNome na classe Produto:

public void setNome(String nome) {
    this.nome = nome;
}

abs

Funcionou!! Desculpe pela minha falta de atenção. Obrigado Nico!! Abraço a todos!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software