Olá, estou com o seguinte erro ao ler XML utilizando SAX.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.XMLReaderFactory;
public class LerXmlSAX{
private XMLReader reader;
XMLReader xmlR;
public LerXmlSAX() throws SAXException, FileNotFoundException, IOException {
System.out.println("\ninst. LerXmlSax()\n");
xmlR = XMLReaderFactory.createXMLReader();
ProdutoHandle pH = new ProdutoHandle();
xmlR.setContentHandler(pH);
InputStream is = new FileInputStream("src/main/java/venda.xml");
InputSource arquivo = new InputSource(is);
xmlR.parse(arquivo);
}
}
Classe q extende Defaulthandle
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ProdutoHandle extends DefaultHandler{
private List<Produto> produtos = new ArrayList<>();
private Produto produto;
private StringBuilder conteudoAtual ;
public List<Produto> getProdutos() {
return produtos;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("\nLendo:"+qName);
if(qName.equalsIgnoreCase("produto")){
produto = new Produto();
}
conteudoAtual = new StringBuilder();
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if(!(ch.length == 0)){
conteudoAtual.append(new String(ch , start, length));
}else{
conteudoAtual = null;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("END ELEMENT");
if(qName.equalsIgnoreCase("produto")){
produtos.add(this.produto);
}if(qName.equalsIgnoreCase("nome")){
produtos.get(produtos.size()-1).setNome(conteudoAtual.toString());
}if(qName.equalsIgnoreCase("preco")){
produtos.get(produtos.size()-1).setPreco(Double.parseDouble(conteudoAtual.toString()));
}
}
@Override
public void endDocument() throws SAXException {
System.out.println("END DOCMENT");
}
documento venda XML;
<venda moeda="R$"
xsd:noNamespaceSchemaLocation="formatoVenda.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">
<formaDePagamento>Cartao</formaDePagamento>
<produto>
<nome>Livro de XML</nome>
<preco>22.00</preco>
</produto>
<produto>
<nome>Livro Java O.O</nome>
<preco>122.00</preco>
</produto>
<produto>
<nome>Livro de AJAX</nome>
<preco>29.00</preco>
</produto>
<produto>
<nome>Livro de Ruby</nome>
<preco>42.00</preco>
</produto>
</venda>
Quando executo new LerXmlSax() segue o seguinte errro.
INSTANCIA DE LERXMLSAX========
Lendo:venda
Lendo:formaDePagamento
END ELEMENT
Lendo:produto
Exception in thread "main" java.lang.UnsupportedOperationException: Not supported yet.
at br.com.alura.teste.Produto.<init>(Produto.java:14)
at br.com.alura.teste.ProdutoHandle.startElement(ProdutoHandle.java:26)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:380)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2787)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:118)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at br.com.alura.teste.LerXmlSAX.<init>(LerXmlSAX.java:24)
at br.com.alura.teste.Driver.main(Driver.java:8)
------------------------------------------------------------------------
BUILD FAILURE