Jasper com Struts2

Ola pessoal, estou iniciando em java e estou tentando gerar um relatório com o Jasper, e estou seguinto um tutorial que encontrei na net

http://struts.apache.org/2.0.11.2/docs/jasperreports-tutorial.html

Mas acontece o seguinte erro:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: relatorios\teste.jrxml (O sistema não pode encontrar o caminho especificado) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:176) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:156) at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:108) at br.com.cmc.action.JasperAction.execute(JasperAction.java:36) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.io.FileNotFoundException: relatorios\teste.jrxml (O sistema não pode encontrar o caminho especificado) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:171) ... 72 more

segue o link para baixar o projeto: http://www.adrive.com/public/9e29d74798c10da4759e51d7f2a269089d61129b1e8a15e73849a4101c7c837d.html

Desde já muito obrigado.

Abraços
Anderson

java.io.FileNotFoundException: relatorios\teste.jrxml (O sistema não pode encontrar o caminho especificado)

Verifique o caminho que ele está dizendo que você informou… ele não está encontrando o fonte do relatório… provavelmente para compilar e gerar o .jasper

[quote=guivirtuoso]java.io.FileNotFoundException: relatorios\teste.jrxml (O sistema não pode encontrar o caminho especificado)

Verifique o caminho que ele está dizendo que você informou… ele não está encontrando o fonte do relatório… provavelmente para compilar e gerar o .jasper[/quote]

Então eu já verifiquei a escrita e está correta, já mudei o relatório de lugar mas da o mesmo erro.

Esta é a Action que chama o relatório;


package br.com.cmc.action;
import java.util.ArrayList;
import java.util.List;

import net.sf.jasperreports.engine.JasperCompileManager;

import com.opensymphony.xwork2.ActionSupport;

public class JasperAction extends ActionSupport {

    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/** List to use as our JasperReports dataSource. */
    private List&lt;Person&gt; myList;

    public String execute() throws Exception {

        // Create some imaginary persons.
        Person p1 = new Person(new Long(1), "Patrick", "Lightbuddie");
        Person p2 = new Person(new Long(2), "Jason", "Carrora");
        Person p3 = new Person(new Long(3), "Alexandru", "Papesco");
        Person p4 = new Person(new Long(4), "Jay", "Boss");

        // Store people in our dataSource list (normally would come from database).
        myList = new ArrayList&lt;Person&gt;();
        myList.add(p1);
        myList.add(p2);
        myList.add(p3);
        myList.add(p4);

        // Normally we would provide a pre-compiled .jrxml file
        // or check to make sure we don't compile on every request.
        try {
            JasperCompileManager.compileReportToFile(&quot;relatorios/teste.jrxml&quot;, &quot;relatorios/teste.jasper&quot;);  //&lt;&lt;&lt; O erro acontece aqui.
        } catch (Exception e) {
            e.printStackTrace();
            return ERROR;
        }

        return SUCCESS;
    }

    public List&lt;Person&gt; getMyList() {
        return myList;
    }
}

a pasta relatórios está na seguinte estrutura:

WebeContent
[color=white]…[/color]|
[color=white]…[/color]|-> relatorios
[color=white]…[/color]|
[color=white]…[/color]|-> teste.jrxml

Será que está no lugar certo??

Abraços
Anderson

Da forma que está fazendo para cada chamada da action vc compila o relatório, então é melhor usar o compilado .jasper. Eu geralmente pego os relatórios via ClassLoader, assim:

[code]Map<String, Object> parameters = new HashMap<String, Object>();
InputStream report = this.getClass().getClassLoader().getResourceAsStream(“relatorio.jasper”); // O relatório deve está em WEB-INF/classes ou em algum jar.
JRDataSource dataSource = new JRBeanCollectionDataSource(collection);
JasperPrint print = JasperFillManager.fillReport(report, parameters, dataSource);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); // Para gerar o relatório em memória, poderia ser o OutputStream do HTTPServletResponse
JRExporter exporter = new JRPdfExporter(); // Exportar para PDF

exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, “ISO-8859-1”);
exporter.exportReport();

byte [] bytes = outputStream.toByteArray(); // Os bytes do relatório[/code]

[quote=lsjunior]Da forma que está fazendo para cada chamada da action vc compila o relatório, então é melhor usar o compilado .jasper. Eu geralmente pego os relatórios via ClassLoader, assim:

Então quando eu coloco a linha:

Da erro na compilação, será que é porque estou usando o Struts2 ?

Meu amigo vc não tem nem um projeto com Struts2 e Jasper pra me enviar, para que eu possa usar como base, por favor, tenho que criar relatórios para um projeto aqui no meu serviço.
pode mandar no email and_quinteiro.btu@hotmail.com

Desde ja muito obrigado pela atenção

Abraços
Anderson

Lourival, muito obrigado pelas classes, valew mesmo.

Agora tenho outra duvida rsrs.

A action que chama o relatório e configurada no struts.xml ou numa classe?

Caso você tenha um exemplo e puder me enviar.

Valew amigo pela força

Abraços
Anderson