How do I get to the index of the list to pass pro ireport? Already tried to give a "get" of the error. This is my method that generates the report:
public void gerarRelatorio(ArrayList list) {
for (int i = 0; i < list.size(); i++) {
JasperReport report = null;
try {
InputStream inputStreamReal = getClass().getResourceAsStream("/br/com/testexml/relatorio/Teste.jrxml");
report = JasperCompileManager.compileReport(inputStreamReal);
} catch (JRException ex) {
Logger.getLogger(TesteView.class.getName()).log(Level.SEVERE, null, ex);
}
try {
JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(list));
JasperExportManager.exportReportToPdfFile(print,
"C:\relatorios/RelatorioClientes" + i + ".pdf");
} catch (JRException ex) {
Logger.getLogger(TesteView.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Button event that selects xml:
JFileChooser chooser = new JFileChooser();
// Possibilita a seleção de vários arquivos
chooser.setMultiSelectionEnabled(true);
// Apresenta a caixa de diálogo
chooser.showOpenDialog(null);
// Retorna os arquivos selecionados. Este método retorna vazio se
// o modo de múltipla seleção de arquivos não estiver ativada.
File[] files = chooser.getSelectedFiles();
for (File argumento : files) {
//System.err.println("Argumentos: " + argumento.getPath());
caminho = argumento.getPath();
LeitorXMLDOMMelhorado parser = new LeitorXMLDOMMelhorado();
// lista = new ArrayList();
try {
/* List<Cliente> */
contatos = (List<Cliente>) parser.realizaLeituraXML(caminho);
for (Cliente contato : contatos) {
// System.out.println(contato);
lista.add(contato);
gerarRelatorio(lista);
}
System.out.println("LISTA:"+lista.size());
} catch (ParserConfigurationException e) {
System.out.println("O parser não foi configurado corretamente.");
e.printStackTrace();
} catch (SAXException e) {
System.out.println("Problema ao fazer o parse do arquivo.");
e.printStackTrace();
} catch (IOException e) {
System.out.println("O arquivo não pode ser lido.");
e.printStackTrace();
}
}
Class that reads xml:
public class LeitorXMLDOMMelhorado {
public List<Cliente> realizaLeituraXML(String arquivoXML) throws ParserConfigurationException, SAXException, IOException{
//fazer o parse do arquivo e criar o documento XML
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(arquivoXML);
//Passo 1: obter o elemento raiz
Element raiz = doc.getDocumentElement();
System.out.println("O elemento raiz é: " + raiz.getNodeName());
//Passo 2: localizar os elementos filhos da agenda
NodeList listaContatos = raiz.getElementsByTagName("contato");
List<Cliente> lista = new ArrayList<Cliente>(listaContatos.getLength());
//Passo 3: obter os elementos de cada elemento contato
for (int i=0; i<listaContatos.getLength(); i++){
//como cada elemento do NodeList é um nó, precisamos fazer o cast
Element elementoContato = (Element) listaContatos.item(i);
//cria um objeto Contato com as informações do elemento contato
Cliente contato = criaContato(elementoContato);
lista.add(contato);
}
return lista;
}
public String obterValorElemento(Element elemento, String nomeElemento){
//obtém a lista de elementos
NodeList listaElemento = elemento.getElementsByTagName(nomeElemento);
if (listaElemento == null){
return null;
}
//obtém o elemento
Element noElemento = (Element) listaElemento.item(0);
if (noElemento == null){
return null;
}
//obtém o nó com a informação
Node no = noElemento.getFirstChild();
return no.getNodeValue();
}
public Cliente criaContato(Element elemento){
Cliente contato = new Cliente();
contato.setCod(Integer.parseInt(elemento.getAttributeNode("id").getNodeValue()));
contato.setNome(obterValorElemento(elemento,"nome"));
contato.setProduto(obterValorElemento(elemento,"produto"));
contato.setCpf(obterValorElemento(elemento,"cpf"));
contato.setValorCompra(Float.parseFloat(obterValorElemento(elemento,"valor")));
return contato;
}
}