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
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!!!