pessoal tenho um relatorio e para cada registro eh exibido um subrelatorio. Funciona perfeitamente se o relatorio pai possui apenas um registro, porem se existem um ou mais registros, no segundo já acontece um erro. Carrego meu subreport por um InputStream
Alguem sabe qual o problema ?
// nao se importem com os caminhos, aqui no meu micro esta certo e sem hard code
InputStream subRelatorioErrosImportacao = new FileInputStream(
"caminho\\jasper\\subrelatorio.jasper");
Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put("SUBREPORT_DIR", subRelatorioErrosImportacao);
JasperFillManager.fillReportToFile(
"caminho\\jasper\\relatorio.jasper", parametros,
dataSource);
JasperViewer.viewReport(
"caminho\\jasper\\relatorio.jrprint", false);
meu data source:
public class LogImportacaoDataSource implements JRDataSource {
private Collection<Arquivo> arquivos;
private Iterator<Arquivo> iteratorArquivos;
private Arquivo arquivo;
public LogImportacaoDataSource(Collection<Arquivo> arquivos) {
this.arquivos = arquivos;
this.iteratorArquivos = this.arquivos.iterator();
}
@Override
public Object getFieldValue(JRField campo) throws JRException {
return this.arquivo;
}
@Override
public boolean next() throws JRException {
boolean existeProximoArquivo = iteratorArquivos.hasNext();
if(existeProximoArquivo) {
this.arquivo = iteratorArquivos.next();
}
return existeProximoArquivo;
}
}
o erro :
Exception in thread "main" net.sf.jasperreports.engine.JRException: Error loading object from InputStream
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:202)
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:309)
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:270)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:260)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:486)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:1427)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:729)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportContent(JRVerticalFiller.java:276)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:118)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:911)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:833)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:628)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:517)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:469)
at control.ImportacaoMB.main(ImportacaoMB.java:127)
Caused by: java.io.IOException: Read error
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source)
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.<init>(ContextClassLoaderObjectInputStream.java:57)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:197)
... 15 more
lembrando que soh ocorre quando tenho mais de um registro
abrassssss