spring-mvc - 部署到 Tomcat 8 时编译 Jasper 报告

标签 spring-mvc tomcat jasper-reports

使用 JasperCompileManager.compileReport(myReport) 时遇到问题;在 Tomcat8 中部署一个简单的 Spring MVC 应用程序时。

包括以下依赖:

....Spring Dependencies 4.1.6 Release...

<dependency>
    <groupId>tomcat</groupId>
    <artifactId>jasper-compiler-jdt</artifactId>
    <version>5.5.15</version>
</dependency>
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>5.6.1</version>
</dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
  </dependency>

我有一个 Controller 端点在服务类中调用以下代码。 (代码通过了网络应用程序之外的单元和集成测试。)

 public JasperReport getJasperReport(String filePath)
{
    try {
        //        File f = new File(filePath);
        File tmpFile = new File("C:\\myReport.jrxml");
        return fromFile(tmpFile);
    } catch (JRException ex) {
        log.error(MyAppService.class.getName(),ex);
    }
    return null;
}


private JasperReport fromFile(File f) throws JRException {
    JasperDesign jd;
    JasperReport jr = null;
    jd = JRXmlLoader.load(f);
    jr = JasperCompileManager.compileReport(jd);
    return jr;
} 

调用端点时出现以下异常。

 java.lang.ArrayIndexOutOfBoundsException: -2
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeBinaryExpression(Parser.java:1325)
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5961)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8491)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8656)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8621)
    at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:7420)
    at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:289)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:315)
    at net.sf.jasperreports.engine.design.JRJdtCompiler.compileUnits(JRJdtCompiler.java:167)
    at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:201)
    at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:354)
    at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:614)
    at com.mvcapp.web.controller.MvcAppAccessController.fromFile(MvcAppAccessController.java:190)
    at com.mvcapp.web.controller.MvcAppAccessController.convertFileToByteArray(MvcAppAccessController.java:168)
    at com.mvcapp.web.controller.MvcAppAccessController.uploadFileHandler(MvcAppAccessController.java:147)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2407)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2396)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
20-Aug-2015 12:12:02.850 SEVERE [http-apr-8080-exec-12] com.mvcapp.web.controller.MvcAppAccessController.convertFileToByteArray null
 net.sf.jasperreports.engine.JRException: Error compiling report design.
    at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:242)
    at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:354)
    at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:614)
    at com.mvcapp.web.controller.MvcAppAccessController.fromFile(MvcAppAccessController.java:190)
    at com.mvcapp.web.controller.MvcAppAccessController.convertFileToByteArray(MvcAppAccessController.java:168)
    at com.mvcapp.web.controller.MvcAppAccessController.uploadFileHandler(MvcAppAccessController.java:147)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2407)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2396)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -2
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeBinaryExpression(Parser.java:1325)
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5961)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8491)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8656)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8621)
    at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:7420)
    at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:289)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:315)
    at net.sf.jasperreports.engine.design.JRJdtCompiler.compileUnits(JRJdtCompiler.java:167)
    at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:201)
    ... 44 more

任何帮助将不胜感激!谢谢

最佳答案

如果您的类路径中有 aspectjtools.jar,您可以尝试通过将其从类路径中删除来编译它吗?

关于spring-mvc - 部署到 Tomcat 8 时编译 Jasper 报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126736/

相关文章:

java - Spring MVC Controller 已达到,但我仍然得到 404

angularjs - Jackson + Spring web 在修改消息转换器后无法反序列化未引用的字符串

java - tomcat 基本认证

tomcat - Tapestry + JaxB 冲突

jasper-reports - 如何将参数从一个子报表传递到另一个子报表

java - <form :select> in Spring 的多对多绑定(bind)问题

spring - 我们可以将动态值传递给spring mvc的@RequestMapping注解吗?

tomcat - 将应用程序作为服务运行或将其部署在容器上有什么区别?

node.js - 如何将生成的 pdf 保存在项目文件夹 Node Jasper Reports 中?

jasper-reports - Jasper Reports - 从输入控件中删除按钮