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

Exception in thread "main" java.lang.NullPointerException at br.com.alura.Teste.Sistema.main

Não está me retornando nem um erro de validação de xml , o erro que ele retorna é um null exeption no main. Classe Principal

package br.com.alura.Teste;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import br.com.alura.Model.Produto;

public class Sistema {
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory fabrica = DocumentBuilderFactory.newInstance();
        fabrica.setValidating(true);
        fabrica.setNamespaceAware(true);
        fabrica.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage","http://www.w3.org/2001/XMLSchema" );

        DocumentBuilder builder = fabrica.newDocumentBuilder();
        Document document = builder.parse("src/vendas.xml");

        Element venda = document.getDocumentElement();
        String moeda = venda.getAttribute("moeda");
        System.out.println(moeda);
        NodeList produtos = document.getElementsByTagName("nome");

        for(int i = 0; i < produtos.getLength(); i++) {
            Element produto = (Element) produtos.item(i);
            String nome = produto.getElementsByTagName("nome").item(0).getTextContent();
            double preco = Double.parseDouble(produto.getElementsByTagName("preco").item(0).getTextContent());
            Produto prod = new Produto(nome,preco);
            System.out.println(prod);
        }
    }
}

error

real
Exception in thread "main" java.lang.NullPointerException
    at br.com.alura.Teste.Sistema.main(Sistema.java:28)

vendas.xml

<?xml version="1.0" encoding="UTF-8"?>

<venda moeda="real" xsd:noNamespaceSchemaLocation="formatoVenda.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">
    <formaDePagamento>Débito</formaDePagamento>
    <produtos>
        <produto>
            <nome>JAVA</nome>
            <preco>29.10</preco>
        </produto>
        <produto>
            <nome>XML</nome>
            <preco>24.10</preco>
        </produto>
    </produtos>
</venda>

formatoVenda.xml

<?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:element name="preco" 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:attribute name="moeda" type="xsd:string" />
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
2 respostas

O erro provavelmente está nesta linha:

String nome = produto.getElementsByTagName("nome").item(0).getTextContent();

É provável que getElementsByTagName("nome") retorne null, ou que getElementsByTagName("nome").item(0) retorne null. Em ambos os casos, você estaria tentando chamar um método de um objeto que não existe (é null). Sempre que isso ocorrer, a exceção NullPointerException será lançada.

Boa sorte nos estudos!

solução!

Resolvi aqui, o problema era só porque o arquivo xsd não estava no src/ , valeu mesmo assim!