英文:
Migrating a project with JasperReports from Spring 4 to Spring 5
问题
大家好,我们计划将项目从Java 8升级到Java 11。因此,项目的Spring版本将从Spring 4x更改为Spring 5x。
在Spring 4x中,视图解析如下所示:
- Spring XML配置:
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="location" value="/WEB-INF/jasper-view.xml"/>
<property name="order" value="0"/>
</bean>
- jasper-view.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--在这里,所有的url值都应包含jrxml文件的有效路径-->
<bean id="purchasePdf"
class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView"
p:url="classpath:reports/purchaseReport.jrxml"
p:reportDataKey="datasource" />
</beans>
因此,随着升级,Spring版本更新为5.2.5.RELEASE,jasper版本更新如下:
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.4.0</version>
</dependency>
该项目在不报错的情况下构建,但在Tomcat服务器部署时出现以下错误:
Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView] for bean with name 'purchasePdf' defined in ServletContext resource [/WEB-INF/jasper-view.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView
似乎Spring 5已经放弃了对Jasper的支持,是否有其他替代解决方案?
https://github.com/spring-projects/spring-framework/issues/17884
英文:
Hi all we are planning to upgrade our project from Java 8 to Java 11. Therefore Spring version of the project shall be changed from Spring 4x to Spring 5x
The view resolving was done in Spring 4x as follows
-
spring xml configuration:
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="location" value="/WEB-INF/jasper-view.xml"/>
<property name="order" value="0"/>
</bean> -
jasper-view.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!--here all the url value should contains the valid path for the jrxml file--> <bean id="purchasePdf" class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView" p:url="classpath:reports/purchaseReport.jrxml" p:reportDataKey="datasource" />
So with the upgrade Spring version was updated to 5.2.5.RELEASE and jasper version was updated as follows:
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.4.0</version>
</dependency>
The project is building without and error but gives the following error when deploying in Tomcat server:
Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView] for bean with name 'purchasePdf' defined in ServletContext resource [/WEB-INF/jasper-view.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView
It seems Spring 5 has dropped it's Jasper support
> https://github.com/spring-projects/spring-framework/issues/17884
Is there an alternative solution for this?
答案1
得分: 1
它建议使用原生的JasperReports API:
> 因此,我们更建议在Spring MVC处理程序方法中原生使用JasperReports API,从特定设计的RESTful端点生成报告。自Spring Framework 5.0起,我们将放弃现有的几乎无用的JasperReports视图类层级结构。请注意,尽管在Spring Framework 4.3.x系列中仍保留了对已弃用的JRExporter API的支持,直到2019年,特别是针对现有应用程序。然而,即使在4.3版本中,也值得考虑原生使用JasperReports API。
我想这些都是进行升级时的挑战和困扰的一部分。
英文:
It recommends to use the native JasperReports API:
> As a consequence, we rather recommend native use of the JasperReports
> API in Spring MVC handler methods, generating reports from
> specifically designed RESTful endpoints. We are dropping our now
> semi-useless JasperReports view class hierarchy as of Spring Framework
> 5.0. Note that our existing support against the deprecated JRExporter API remains around in the Spring Framework 4.3.x line until 2019, in
> particular for existing applications. However, even with 4.3, native
> use of the JasperReports API is worth considering.
I suppose these are part of the challenges / pains of doing an upgrade.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论