GWT + Ireport

5 respostas
denis_gariglio
Boa tarde pessoal, tudo bom? Pessoal, estou desenvolvendo uma aplicação utilizando GWT porem qdo efetuo a chamada para impressão de um recibo em pdf acontece o seguindo erro:
13:22:02,062 ERROR JRViewer:2035 - Page paint error.
java.lang.ClassCastException: net.sf.jasperreports.engine.export.DefaultExporterFilterFactory cannot be cast to net.sf.jasperreports.engine.export.ExporterFilterFactory
 at net.sf.jasperreports.engine.export.ExporterFilterFactoryUtil.getFilterFactory(ExporterFilterFactoryUtil.java:53)
 at net.sf.jasperreports.engine.JRAbstractExporter.createFilter(JRAbstractExporter.java:1296)
 at net.sf.jasperreports.engine.export.JRGraphics2DExporter.exportReport(JRGraphics2DExporter.java:118)
 at net.sf.jasperreports.view.JRViewer.paintPage(JRViewer.java:2029)
 at net.sf.jasperreports.view.JRViewer$PageRenderer.paintComponent(JRViewer.java:2179)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JViewport.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at javax.swing.JLayeredPane.paint(Unknown Source)
 at javax.swing.JComponent.paintChildren(Unknown Source)
 at javax.swing.JComponent.paintToOffscreen(Unknown Source)
 at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
 at javax.swing.RepaintManager.paint(Unknown Source)
 at javax.swing.JComponent.paint(Unknown Source)
 at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
 at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
 at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
 at java.awt.Container.paint(Unknown Source)
 at java.awt.Window.paint(Unknown Source)
 at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
 at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
 at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
 at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
 at java.awt.event.InvocationEvent.dispatch(Unknown Source)
 at java.awt.EventQueue.dispatchEvent(Unknown Source)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.run(Unknown Source)

Mesmo dando esse erro ele abre o PDF e mostra a seguinte mensagem:
Erro ao expor página do relatório. Verifique o console para detalhes.

Meu codigo
servico.imprimirRecibo(5, new AsyncCallback<Integer>() {
			
			
			public void onSuccess(Integer result) {
				Info.display("Imprimindo Recibo. ", "Recibo {0} ",
						 "");
				retorno = true;
				
			}
			
			public void onFailure(Throwable caught) {
				com.google.gwt.user.client.Window.alert("Falhou....." + caught);
				caught.printStackTrace();
				
			}
		});
Alguem sabe o que pode estar acontecendo? Precisam de mais informações? Vlwww

5 Respostas

leorbarbosa

Blz Denis,

por acaso está usando NetBeans?

Já passei por este problema aparentemente sem solução. Fui desaconselhado aqui no GUJ a não desenvolver relatórios usando IReport com NetBeans. Se possível, crie seus relatórios por fora e chame pelo Eclipse ou outra IDE de sua preferência. Pelo Eclipse, todos os projetos que migrei funcionaram sem problemas.

A princípio, com Netbeans o que me disseram é que “pode” ser algo relacionado a gerenciamento de memória das libs do Jasper, mas nada ao certo ainda.

Conclusão: migre para outra IDE quando seu sistema exigir relatórios com Jasper.

Att,

leorbarbosa

Denis,

fiz mais uns testes aqui com outra chamada do viewer, com o Netbeans e não deu nenhum erro. Segue o código que funcionou (comentada a linha que dá erro).

Vale a tentativa !!

.
..
...
    String relatorio = "C:\\Users\\...\\Documents\\NetBeansProjects\\JasperReports\\web\\relatorio\\" + request.getParameter("relatorio") + ".jasper";
    
    Connection con = null;
    
    try
    {
      Class.forName("com.mysql.jdbc.Driver");
      con = DriverManager.getConnection("jdbc:mysql://localhost:3306/banco", "user", "password");
      
      HashMap<String, String> parameterMap = new HashMap<String, String>();
      parameterMap.put("pSTATUS_USUARIO", "A");
      
      JasperPrint jp = JasperFillManager.fillReport(relatorio, parameterMap, con);
      //JasperViewer.viewReport(jp, false);
      JasperViewer.viewReport(jp);
      con.close();
      
      RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");
      rd.forward(request, response);
    }
    catch (SQLException e)
    {
      e.printStackTrace();
    }
...
..
.

Inté.

araujo921

Olá,

deixe-me ver se entendi o que você está fazendo. Primeiro você está gerando um relatório que deve ser apresentado no lado cliente pelo browser ? Se sim, então por que você está utilizando o método viewReport do Jasper ? Tecnicamente esse método abre o relatório com um view com componentes swing, e não é assim que você irá transmitir o pdf para o cliente. Nesse link você encontrará um exemplo que te dará uma orientação de como enviar um relatório para o cliente. Mas note que esse exemplo é um exemplo mais ou menos de como você irá criar o servlet que enviará o relatório para o cliente.

leorbarbosa

Blz Vagner,

segui sua dica e meu código está conforme abaixo, porém está ocorrendo uma NullPointerException na linha em vermelho ou seja, getSystemResource está retornando null.

response.setContentType("application/pdf"); 
        response.setHeader("Content-disposition", "attachment; filename=\"" + getNomeArquivo() + ".pdf\""); 
		
		try
		{
			//JasperPrint jp = JasperFillManager.fillReport(getCaminhoCompleto() , parametros, con);
			
			URL url = ClassLoader.getSystemResource( "/PrjRelatorio/WebContent/relatorio/rptUsuario.jasper" ); 
			
			[color=red]File file = new File( url.toURI() ); [/color]       // Erro ocorre aqui     
            InputStream inputStream = new FileInputStream(file); 
            JasperPrint jp = JasperFillManager.fillReport(inputStream, parametros , con);
            
            byte[] report = JasperExportManager.exportReportToPdf(jp);
            
            response.setContentLength(report.length); 
            ServletOutputStream out = response.getOutputStream(); 
            out.write(report); 
            out.flush(); 
            out.close(); 
			
			if ( jp.getPages().size() > 0 )   
			{
				setEof(false);
				JasperViewer.viewReport(jp, false);
			}
			else
			{
				setEof(true);
			}
			retorno = true;
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}

O que pode estar errado?

Obrigado.

araujo921

Olá,

substitua essa linha:

URL url = ClassLoader.getSystemResource( “/PrjRelatorio/WebContent/relatorio/rptUsuario.jasper” );

por essa:

File file = new File(getServletContext().getRealPath("/WebContent/relatorio/rptUsuario.jasper"));

Estou assumindo que o diretório WebContent está na raiz da aplicação web, caso não esteja, então você pode ajustar.

Criado 7 de outubro de 2010
Ultima resposta 5 de mai. de 2011
Respostas 5
Participantes 3