有一个系统,它有数据,并且可以通过 Web 服务(例如 Lotus Notes 数据库)提供它的数据。Jasper 可以通过调用 web 服务获取报告的数据吗?
4 回答
您可以通过实现接口JRDataSource来编写自定义数据源。
你可以,但它可能很快就会变得非常复杂。但是,如果您想走这条路,绝对可以使用JRXmlDataSource。您将必须定义数据源,例如:
new net.sf.jasperreports.engine.data.JRXmlDataSource(
net.sf.jasperreports.engine.util.JRLoader.getLocationInputStream("http://yourserver.com/xml_data_source")
看到这篇文章,有人似乎已经开始了类似的探索,从远程服务器检索 xml 数据以获取报告。
话虽如此,如果您在代码中从服务器获取数据,选择您想要的报告字段并将其传递给您,您的代码可能会少很多工作,并且您的代码可能会更易于维护,例如,一个 JRMapCollection 数据源,特别是如果远程服务提供了一个 wsdl,您可以使用 Apache Axis 之类的工具生成一个客户端。
现在更好的解决方案是使用 Jasper 数据源 SPI 将您的 Restful 服务作为数据源,就像 JDBC 数据源一样。
http://javattitude.com/2015/07/30/using-rest-web-service-as-data-source-for-jasper-reports/
由于这是通用的,因此编写的一个将适用于您的所有服务。
现在可以使用 Web 服务数据源
http://community.jaspersoft.com/project/web-service-data-source
这个社区项目实现了一个自定义数据源,使用最新的自定义数据源框架(内部利用数据适配器)构建。
它也在 JasperReports 服务器内部工作:
您可以使用它来填充基于查询的输入控件,以及通过 Topic 使用它的 Ad Hoc Reporting(商业版)。
谢谢