1
resposta

Erro com Stax

try { InputStream is = new FileInputStream("src/23110305329222000176550010000336830000336831-nfe.xml"); XMLInputFactory factory = XMLInputFactory.newInstance(); XMLEventReader eventos = factory.createXMLEventReader(is);

        Produto produto = new Produto();
        List<Produto> produtos = new ArrayList<>();
        while(eventos.hasNext()){
            XMLEvent evento  = eventos.nextEvent();
            if(evento.isStartElement() && evento.asStartElement().getName().getLocalPart().equals("prod")){
                produto = new  Produto();
            }else if(evento.isStartElement() && evento.asStartElement().getName().getLocalPart().equals("cProd")){
                evento = eventos.nextEvent();
                String codigo = evento.asCharacters().getData();
                produto.setCodigo(codigo);
            }else if(evento.isStartElement() && evento.asStartElement().getName().getLocalPart().equals("xProd")){
                evento = eventos.nextEvent();
                String descricao = evento.asCharacters().getData();
                produto.setDescricao(descricao);
            }else if(evento.isEndDocument() && evento.asEndElement().getName().getLocalPart().equals("prod")) {
                produtos.add(produto);
            }
        }

        System.out.println(produtos);
    } catch (FileNotFoundException | XMLStreamException e) {

        e.printStackTrace();
    }

Erro:

Exception in thread "main" java.lang.ClassCastException: class com.sun.xml.internal.stream.events.EndDocumentEvent cannot be cast to class javax.xml.stream.events.EndElement (com.sun.xml.internal.stream.events.EndDocumentEvent and javax.xml.stream.events.EndElement are in module java.xml of loader 'bootstrap')
    at java.xml/com.sun.xml.internal.stream.events.DummyEvent.asEndElement(DummyEvent.java:122)
    at com.trilha.java.xml.LerArquivosXmlComStax.main(LerArquivosXmlComStax.java:37)
1 resposta

Olá, Francisco

Esse ClassCastException ocorre quando você está tentando fazer um cast (conversão de tipo) incorreto entre classes do pacote com.sun.xml.internal.stream.events e javax.xml.stream.events.

O problema está ocorrendo na linha 37 do arquivo LerArquivosXmlComStax.java, onde você está tentando fazer um cast de evento para javax.xml.stream.events.EndElement. No entanto, o evento que está ocorrendo é um com.sun.xml.internal.stream.events.EndDocumentEvent, que não pode ser convertido diretamente para javax.xml.stream.events.EndElement.

Espero ter ajudado e bons estudos!

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