Olá a todos, estou com uma grande dor de cabeça com o Ireport, gostaria de uma ajuda se possível.
Seguinte tenho um relatório principal com 3 colunas de subreport e um subreport que vai sendo mostrado conforme a necessidade.
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=iso-8859-1");
response.setCharacterEncoding("iso-8859-1");
ServletContext sc = getServletContext();
byte[] bytes = null;
ArrayList listaLicenc = new ArrayList();
try {
ArrayList<Etiq> lista = new ArrayList();
lista.add(new Etiq("Etiqueta de equipamento", "Modelo: ----- Serial: XXXXXXX", "Licença: XXXXXXXXXXXXXXXXXXXXXXXXX"));
// Populando objetos para o relatorio
RelatorioLicencas jrds = new RelatorioLicencas(lista);
// Parametros do relatorio
HashMap parameters = new HashMap();
parameters.put("SUBREPORT_DIR", sc.getRealPath("/Relatorio/"));
// Lendo arquivo jasper
File reportFile = new File(sc.getRealPath("/Relatorio/relatorioLicencas.jasper"));
// Manuseando os dados para o relatorio
bytes = JasperRunManager.runReportToPdf(reportFile.toURL().openStream(), parameters, jrds);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bytes != null) {
if (bytes.length > 0) {
try {
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
response.getOutputStream().write(bytes, 0, bytes.length);
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
}
class RelatorioLicencas implements JRDataSource {
private List listaLic1 = new ArrayList();
private List listaLic2 = new ArrayList();
private List listaLic3 = new ArrayList();
private boolean pag;
private int coluna = 1;
public RelatorioLicencas(ArrayList parEtiquetas) throws Exception {
for (int i = 0; i < parEtiquetas.size(); i++) {
Etiq e = (Etiq) parEtiquetas.get(i);
switch (coluna) {
case 1:
this.listaLic1.add(e);
break;
case 2:
this.listaLic2.add(e);
break;
case 3:
this.listaLic3.add(e);
break;
}
coluna++;
if ((i + 1) % 3 == 0) {
coluna = 1;
}
}
}
@Override
public boolean next() throws JRException {
if (pag == false) {
pag = true;
return true;
}
return false;
}
@Override
public Object getFieldValue(JRField args) throws JRException {
if (args.getName().equalsIgnoreCase("listaLic1")) {
return new JRBeanCollectionDataSource(listaLic1);
}
if (args.getName().equalsIgnoreCase("listaLic2")) {
return new JRBeanCollectionDataSource(listaLic2);
}
if (args.getName().equalsIgnoreCase("listaLic3")) {
return new JRBeanCollectionDataSource(listaLic3);
}
return null;
}
}
public class Etiq implements Serializable {
private String titulo = "";
private String descricao = "";
private String licenca = "";
private boolean flag = false;
// Constructor, sets and gets .....
}
Me retorna o seguinte erro:
GRAVE: java.lang.NullPointerException
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateReport(JRFillSubreport.java:283)
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:327)
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:263)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:258)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:499)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2036)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:760)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:270)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:540)
at br.Interface.Imprime.processRequest(Imprime.java:68)
at br.Interface.Imprime.doGet(Imprime.java:230)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:662)
Estou utilizando as seguintes bibliotecas:
antlr-2.7.7.jar
commons-beanutils-1.8.0.jar
commons-collections-3.2.1.jar
commons-digester-1.7.jar
commons-logging-1.1.jar
iText-2.1.7.jar
jasperreports-4.8.0.jar
jasperreports-fonts-4.8.0_0.jar