JasperReports:使用XML-A数据源(Olap)在Java中填充报表

JasperReports:使用XML-A数据源(Olap)在Java中填充报表,java,jasper-reports,mdx,xmla,olap4j,Java,Jasper Reports,Mdx,Xmla,Olap4j,我有一个Java服务,我使用JasperReports4.0.5库生成报告。它可以很好地与标准JDBC数据源配合使用 现在我尝试在olap数据源上运行它,然后将我连接到一个XML-a服务器。 在iReport的设计阶段,一切都在运行,但当我在Java中运行它时,执行时会出现一个错误“NullPointerException” 我正在使用olap4j库连接到数据源,与iReport使用的数据源相同 这是代码: try{ Class.forName("org.olap4j.driver

我有一个Java服务,我使用JasperReports4.0.5库生成报告。它可以很好地与标准JDBC数据源配合使用
现在我尝试在olap数据源上运行它,然后将我连接到一个XML-a服务器。 在iReport的设计阶段,一切都在运行,但当我在Java中运行它时,执行时会出现一个错误“NullPointerException”
我正在使用olap4j库连接到数据源,与iReport使用的数据源相同
这是代码:

 try{
      Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");
      net.sf.jasperreports.engine.util.JRProperties.setProperty("net.sf.jasperreports.query.executer.factory.xmla-mdx", "net.sf.jasperreports.olap.xmla.JRXmlaQueryExecuterFactory");

      final Connection connection =
        DriverManager.getConnection(
            "jdbc:xmla:Server=http://localhost/olap/msmdpump.dll"
            + ";Cache=org.olap4j.driver.xmla.cache.XmlaOlap4jNamedMemoryCache"
            + ";Cache.Name=MyNiftyConnection"
            + ";Cache.Mode=LFU;Cache.Timeout=600;Cache.Size=100"
            + ";Catalog=Test"
            ,null, null);

    OlapWrapper wrapper = (OlapWrapper) connection;
    OlapConnection olapConnection = wrapper.unwrap(OlapConnection.class);

    String fileJrxml = "C:\\report_xmla.jrxml";

    HashMap<String,Object> hm_parameters = new HashMap<String, Object>();

    JasperDesign jasperDesign = JRXmlLoader.load(fileJrxml);
    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

    JasperPrint jp = null;

    jp = JasperFillManager.fillReport(jasperReport, hm_parameters, olapConnection);

    // Done
    connection.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
试试看{
Class.forName(“org.olap4j.driver.xmla.XmlaOlap4jDriver”);
net.sf.jasperreports.engine.util.JRProperties.setProperty(“net.sf.jasperreports.query.executer.factory.xmla mdx”、“net.sf.jasperreports.olap.xmla.JRXmlaQueryExecuterFactory”);
最终连接=
DriverManager.getConnection(
“jdbc:xmla:Server=http://localhost/olap/msmdpump.dll"
+“Cache=org.olap4j.driver.xmla.Cache.XmlaOlap4jNamedMemoryCache”
+“Cache.Name=MyNiftyConnection”
+“Cache.Mode=LFU;Cache.Timeout=600;Cache.Size=100”
+“目录=测试”
,空,空);
OlapWrapper包装器=(OlapWrapper)连接;
OlapConnection OlapConnection=wrapper.unwrap(OlapConnection.class);
String fileJrxml=“C:\\report\u xmla.jrxml”;
HashMap hm_参数=新HashMap();
JasperDesign JasperDesign=JRXmlLoader.load(fileJrxml);
JasperReport-JasperReport=JasperCompileManager.compileReport(jasperDesign);
JasperPrint jp=null;
jp=JasperFillManager.fillReport(jasperReport,hm_参数,olapConnection);
//完成
connection.close();
}捕获(例外e){
System.out.println(e.getMessage());
}

我哪里做错了?

您应该添加更多细节。您使用的是什么版本?您是否独立测试了olap连接?返回的堆栈跟踪是什么?这些对于我们能够帮助您都很重要;我们现在不能运行你的报告,是吗?另外,您是否知道OlapConnections没有完全实现JDBC规范?JR API正确使用olap连接吗?我解决了。连接是通过没有连接对象的参数进行的。字符串url=“”;字符串ds=“localhost”;字符串cat=“cat”;String fileJasper=“C:\\report\u xmla.jrxml”;JasperReport-JasperReport=JasperCompileManager.compileReport(fileJasper);jp=JasperFillManager.fillReport(jasperReport,参数);谢谢你的关心,卢克