Já, já fiz tudo isso, criei a classe, crie o metodo que faz a chamada do relatorio.
Classe:
public class Tags {
private XMLIde ide = new XMLIde();
private Complemento compl = new Complemento();
private Emitente emit = new Emitente();
private Expedidor exp = new Expedidor();
private Recebedor receb = new Recebedor();
private Remetente rem = new Remetente();
private Destinatario dest = new Destinatario();
private ValorPrestacaoServico vprest = new ValorPrestacaoServico();
private Impostos imp = new Impostos();
private InformacoesCTe inf = new InformacoesCTe();
private FaturamentoVeic fat = new FaturamentoVeic();
//** GETS E SETS
}
Funções:
public void criaRelatorioDacte(String relatorio, Map<String, Object> map, List<Object> listaDados) {
try {
byte[] arquivo = new byte[0];
FacesContext context = FacesContext.getCurrentInstance();
InputStream isJasper = new FileInputStream(getClass().getResource("/RelCooperados/" + relatorio + ".jasper").toString().replace("file:", "").replace("\\", "/"));
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(isJasper);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JRBeanCollectionDataSource(listaDados));
arquivo = JasperExportManager.exportReportToPdf(jasperPrint);
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
response.setContentType("application/pdf");
response.setContentLength(arquivo.length);
OutputStream saida = response.getOutputStream();
saida.write(arquivo, 0, arquivo.length);
saida.flush();
saida.close();
} catch (Exception ex) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao visualizar relatório.", ex.getMessage()));
return;
}
}
public List<Object> getTags(Tags tag) {
List<Object> reports = new LinkedList<Object>();
reports.add((Object) tag);
return reports;
}
Passagem de dados e classe para chamada do relatorio:
public void converte() throws MalformedURLException, DocumentException {
URL url = new URL("file:/home/josivan/xml419960.xml"); //xml2101129
SAXReader reader = new SAXReader();
final Document document = reader.read(url);
Tags tags = new Tags();
tags.setIde(tagIde(document));
tags.setCompl(tagCompl(document));
tags.setEmit(tagEmitente(document));
tags.setExp(tagExpedidor(document));
tags.setReceb(tagRecebedor(document));
tags.setRem(tagRemetente(document));
tags.setDest(tagDestinatario(document));
tags.setVprest(tagValorPrestador(document));
tags.setImp(tagImposto(document));
tags.setInf(tagInformacoesCTe(document));
tags.setFat(tagFaturamentoVeic(document));
Funcoes funcao = new Funcoes();
funcao.criaRelatorioDacte("Dacte", null, funcao.getTags(tags));
}
Postei somente as partes dos metodos que interessa.
Mas essa seria a parte de fonte onde eu faço todo o trabalho de coletar os dados das tags do XML e tudo mais.
O que eu queria fazer é conseguir através dessa classe criada Tags que já criasse todos os campos no meu iReport, declarando eles pelo menos.
Obrigado!