Ireport x vraptor2

Aquilo era falta do jar do itext, mas deu outro problema

java.lang.NullPointerException
response.setContentType(“application/x-msdownload”);

estou batalhando no problema.
brigadão

Coloca no construtor tambem

HttpServletRequest request, HttpServletResponse response

Mas onde você colocou o .jasper ficará disponivel no contexto da web.
Sugiro colocar junto as classes então

File rel = new File(RelatorioLogic.class.getResource("/relatorio.jasper").getFile().replaceAll("%20", "\u0020"));
String jasper = rel.getPath();

Assim no mesmo local onde esta a classe RelatorioLogic você coloca o .jasper

Farei do jeito que sugeriu, mas já é um alivio ver ele até “AAAAAAAAAAAAAAAAAAAA6”, mas agora o problema é outro veja o último post, por favor.
Muito obrigado

Dei uma olhada aqui, o response eu não tenho no construtor e sim dessa forma

@In
@Out
private HttpServletResponse response;

O seu projeto esta no inicio ainda? ou já esta mais adiantado?
Se estiver no inicio, seria interessante você passar para o vRaptor 3, pois tem algumas mudanças, inclusive nessas anotações.

Luis, o projeto está muito próximo de terminar.
Agora o relatório abre, mas está em branco.
O SQL que será usado na consulta é o que fica no .jasper?
estou passando a lista vazia:

//List<Categoria_sm> list = this.daoFactory.getCategoria_smDao().listatodascategoria();
List<Categoria_sm> list = null;

Luis, ainda estou com essa dúvida, pois na lógica não há consulta de SQL, somente no .jasper
Muito obrigado agradeço pelo seu tempo.

Roger,

Se você enviar a lista o relatório será montado com o que é enviado.

Em vez de usar assim:

JasperPrint impressao = JasperFillManager.fillReport(pathJasper+"/rel_cat.jasper",parametros, ds);

Eu tenho aqui assim:

response.setContentType("application/pdf");
String pdf = JasperRunManager.runReportToPdfFile(jasperFile, parameters, conn);
ClientOutput output = new ClientOutput(response);
FileInputStream stream = new FileInputStream(pdf);
output.setContent(stream);

Refiz o relatório, testei e o mesmo funciona beleza no Irport, abre o pdf sem problema nenhum,
mas pela aplicação a tela do pdf abre em branco, notei que o tamanho do pdf mesmo adicionando
mais um campo fica com o mesmo valor é como se ele não executasse a consulta que está no relatório,
tem algum modo de executar a consulta na lógica e gerar a lista e enviar para o .jasper?

Baixei a versão mais nova do ireport, refiz o relatório e continuo com o mesmo
problema, é como ele não entressa no .jasper, pois o tamanho do arquivo gerado
em

response.setContentLength(arquivo.length);
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9 "+arquivo.length);

é o mesmo.
Quais são as libs para o relatório funcionar?

Roger,

Acho que somente esses:

jasperreports-xx.jar
iText-xx.jar

Tenta chamar a geração do relatório como eu ti passei no ultimo post.
Se você rodar direto pelo iReport e são geradas páginas, deveria gerar a mesma coisa chamando pela sua aplicação.

Luis, boa noite.
Eu tive que criar a classe ClientOutput e segui a recomendação do
vraptor,
O java pede para cria-la,

package org.vraptor.util;

/**
 * permite acesso para OutputStream and ContentType
 */
public class ClientOutput {

        private HttpServletResponse response;

        public ClientOutput(HttpServletResponse response) {
                super();
                this.response = response;
        }

        public ServletOutputStream getOutputStream() throws IOException {
                return response.getOutputStream();
        }

        public void setContentType(String type) {
                response.setContentType(type);
        }

}

mas está dando erro na linha
output.setContent(stream); diz que o método não está definido;
A classe é essa mesmo? vc poderia enviar a classe ClientOutput ou esse método?
Valeu brigadão e a luta continua.

import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;

public class ClientOutput {

    private HttpServletResponse response;

    public ClientOutput(HttpServletResponse response) {
    	this.response = response;
    }
	public HttpServletResponse getResponse() {
		return response;
	}
    public ServletOutputStream getOutputStream() throws IOException {
    	return response.getOutputStream();
    }
    public void setContentType(String type) {
    	response.setContentType(type);
    }
	public void setHeader(String key, String value) {
		response.setHeader(key, value);
	}
	public void setContent(InputStream stream) {
		try {
			IOUtils.copyLarge(stream, response.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Agora a classe está assim

package br.com.cantinavirtual.logic;
import java.io.FileInputStream;
import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletContext;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.In;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Out;
import org.vraptor.annotations.Viewless; 
import br.com.cantinavirtual.dao.DaoFactory;
import br.com.cantinavirtual.modelo.Categoria_sm;
import br.com.cantinavirtual.util.ClientOutput;
@Component()
@InterceptedBy({AutorizadorInterceptor.class,DaoInterceptor.class})
public class Relatorio3_smLogic {
@In  
@Out  
private HttpServletResponse response;
	public Relatorio3_smLogic(DaoFactory daoFactory,ServletContext context) {
	 this.daoFactory = daoFactory;   
	 this.context = context;   
	}    
		private final DaoFactory daoFactory;   
		private final ServletContext context; 
	@Viewless    	    
	public void geraRelatorio(final ServletContext context, HttpServletRequest request) throws Exception{	
		Connection conn = (Connection) ConnectionDB.getConnection();
		List<Categoria_sm> list = null;
		String pathJasper = this.context.getRealPath("/ireport/") + "/"; 
		Map parametros = new HashMap();
		//parametros.put("descricao", pathJasper);
		try {			
		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
		response.setContentType("application/pdf");  
		String pdf = JasperRunManager.runReportToPdfFile(pathJasper+"/teste1.jasper", parametros, conn);  
		ClientOutput output = new ClientOutput(response);  
		FileInputStream stream = new FileInputStream(pdf);  
		output.setContent(stream); 
		//JasperPrint impressao = JasperFillManager.fillReport(pathJasper+"/teste1.jasper",parametros, ds);
		//byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
		//byte[] arquivo = bytes;
		//String nomeDoArquivo = "teste1.pdf";
		//response.setContentType("application/x-msdownload");
		//response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeDoArquivo));
		//response.setContentLength(arquivo.length);
		//ServletOutputStream sos = response.getOutputStream();
		//sos.write(arquivo, 0, arquivo.length);
		//sos.flush();
		//sos.close();
		} catch (Exception e) {
		if(e.getClass().getSimpleName().equals("AbortException")){
		System.out.println("Documento cancelado");
		} else{
		System.out.println("Outros");
		}
		}
		}

}

Está aparecendo esse erro

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: net.sf.jasperreports.engine.component.DefaultComponentManager.setDesignConverter(Lnet/sf/jasperreports/engine/component/ComponentDesignConverter;)V
	org.vraptor.VRaptorServlet.service(VRaptorServlet.java:95)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.NoSuchMethodError: net.sf.jasperreports.engine.component.DefaultComponentManager.setDesignConverter(Lnet/sf/jasperreports/engine/component/ComponentDesignConverter;)V
	net.sf.jasperreports.components.ComponentsExtensionsRegistryFactory.<clinit>(ComponentsExtensionsRegistryFactory.java:99)
	java.lang.Class.forName0(Native Method)
	java.lang.Class.forName(Unknown Source)
	net.sf.jasperreports.engine.util.JRClassLoader.loadClassForRealName(JRClassLoader.java:161)
	net.sf.jasperreports.engine.util.JRClassLoader.loadClassForName(JRClassLoader.java:119)
	net.sf.jasperreports.engine.util.ClassUtils.instantiateClass(ClassUtils.java:57)
	net.sf.jasperreports.extensions.DefaultExtensionsRegistry.instantiateRegistry(DefaultExtensionsRegistry.java:211)
	net.sf.jasperreports.extensions.DefaultExtensionsRegistry.loadRegistries(DefaultExtensionsRegistry.java:188)
	net.sf.jasperreports.extensions.DefaultExtensionsRegistry.loadRegistries(DefaultExtensionsRegistry.java:141)
	net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getRegistries(DefaultExtensionsRegistry.java:127)
	net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getExtensions(DefaultExtensionsRegistry.java:104)
	net.sf.jasperreports.engine.util.JRQueryExecuterUtils.getQueryExecuterFactory(JRQueryExecuterUtils.java:57)
	net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:664)
	net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:588)
	net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1212)
	net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:842)
	net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:791)
	net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63)
	net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)
	net.sf.jasperreports.engine.JasperRunManager.runReportToPdfFile(JasperRunManager.java:65)
	br.com.cantinavirtual.logic.Relatorio3_smLogic.geraRelatorio(Relatorio3_smLogic.java:70)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.vraptor.component.DefaultLogicMethod.execute(DefaultLogicMethod.java:117)
	org.vraptor.interceptor.ExecuteLogicInterceptor.intercept(ExecuteLogicInterceptor.java:37)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:131)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:41)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:58)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	br.com.cantinavirtual.logic.DaoInterceptor.intercept(DaoInterceptor.java:19)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	br.com.cantinavirtual.logic.AutorizadorInterceptor.intercept(AutorizadorInterceptor.java:28)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:38)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:90)
	org.vraptor.core.DefaultController.execute(DefaultController.java:42)
	org.vraptor.VRaptorServlet.service(VRaptorServlet.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

java.lang.NoSuchMethodError

Acredito que pode ser versão de alguma lib que não é compativel com outra.

Roger,

Acho que você compilou o arquivo jasper no iReport para uma versão mais nova que a versão que você tem no seu projeto.
Procure dentro do diretório do iReport por jasperreports-3.6.0.jar, acho que você disse que era o 3.6 que estava usando, então deve ser mais ou menos assim.

Não é gerado o erro class no found pq a classe existe só não tem o método que é procurado, por isso java.lang.NoSuchMethodError.

Isso é o que eu entendi.

Blz?! Qualquer avisa ai…

Luis funcionou!!!
Eu usei o Ireport 3.6 para gerar o relatório e
copiei as bibliotecas do Ireport :
commons-collections-3.2.1
commons-digester-1.7
commons-logging-1.1
iText-2.1.0
jasperreports-3.6.0
commons-beanutils-1.8.0

Agradeço a sua paciencia e boa vontade em resolver esse problema, já estava arrancando os poucos cabelos que tenho.
Valeu mesmo agora vou começar a preparar os outros relatórios e funcionarão com certeza!!!
:smiley: