Java JasperReports以XML作为输入---Getiing Inputstream空指针异常

Java JasperReports以XML作为输入---Getiing Inputstream空指针异常,java,xml,pointers,null,jasper-reports,Java,Xml,Pointers,Null,Jasper Reports,我正在使用iReport-4.1.1创建.jasper和.jrxml文件。我的文件在Webcontent/reports下 下面是我用来从jasper打开PDF的代码。我正在传递XML作为输入 InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/reports/FUECReport.jasper"); JRXmlDataSource xmlDataSource = new

我正在使用iReport-4.1.1创建.jasper和.jrxml文件。我的文件在Webcontent/reports下

下面是我用来从jasper打开PDF的代码。我正在传递XML作为输入

InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/reports/FUECReport.jasper");
JRXmlDataSource xmlDataSource = new JRXmlDataSource(stringToDom(xmlResult));

HashMap parameterMap = new HashMap();
parameterMap.put("TITLE_MSG_PARAM", fUECRptMsg);
parameterMap.put("SURVEY_YEAR_PARAM", surveyYear);              
parameterMap.put("STATE_CODE_PARAM", fipsStateCode);

JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream, parameterMap,xmlDataSource);
response.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();

//this is the function that is converting the xmlsource to Document
public static Document stringToDom(String xmlSource)  throws SAXException, ParserConfigurationException, IOException { 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
    DocumentBuilder builder = factory.newDocumentBuilder();
    return builder.parse(new InputSource(new StringReader(xmlSource)));  
} 
当我运行时,我在以下行中得到一个空指针异常:

JasperRunManager.runReportToPdfStream(*reportStream*,servletOutputStream, parameterMap,xmlDataSource);
表示reportStream为空

任何人请告诉我问题出在哪里

当我从ireport运行和编译时,我成功地打开了PDF

谢谢


GK

首先,您应该检查以下行中的报表模板路径:

InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/reports/FUECReport.jasper");
可能您应该将路径更改为
/WEB-INF/reports/FUECReport.jasper
?您可以尝试在
java.io
的帮助下检查文件可用性

在第二个变量中,变量
reportStream
必须包含
已编译的
报告

没有说明此方法的参数(您可以通过阅读相同方法的参数),但您可以查看此方法的源代码:

runReportToPdfStream

public static void JasperRunManager.runReportToPdfStream(java.io.InputStream inputStream,
                                    java.io.OutputStream outputStream,
                                    java.util.Map<java.lang.String,java.lang.Object> parameters,
                                    JRDataSource jrDataSource)
                             throws JRException
                           throws JRException

如果一切正常,则说明准备数据源的方法中的问题。

FUECReport.jasper文件位于正确的位置。我将InputStream对象从reportStream更改为reportStream1。我还使用InputStreamReader检查inputstream是否正确。是的,我查过了。现在我得到一个异常,net.sf.jasperreports.engine.JRException:从InputStream加载对象时出错。。。。。。。。原因:java.io.EOFExceptionI能够克服此问题,但现在PDF打开(从runReportToPdfStream),所有值都为NULL。我在PDF中没有看到任何数据。该列的所有值均为空。是否检查参数映射?看到静态文本了吗?我正在传递参数parameterMap.put(“TITLE_MSG_PARAM”,fuecrptmg);参数Map.put(“测量年参数”,测量年);parameterMap.put(“状态代码参数”,fipsStateCode);以及作为xmlDataSource的XMLDOCUMENT。我看到了静态文本,我;在PDFYes上,我可以看到一个静态文本。我刚刚添加了一个虚拟标题,它会显示出来。
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("Title", "Report title");

        Map<String, String> firstRow = new HashMap<String, String>();
        firstRow.put("title", "Greatest Hits");
        firstRow.put("artist", "Dolly Parton");
        firstRow.put("country", "USA");
        firstRow.put("company", "RCA");
        firstRow.put("price", "9.90");
        firstRow.put("year", "1982");

        Map<String, String> secondRow = new HashMap<String, String>();
        secondRow.put("title", "Still got the blues");
        secondRow.put("artist", "Gary Moore");
        secondRow.put("country", "UK");
        secondRow.put("company", "Virgin records");
        secondRow.put("price", "10.20");
        secondRow.put("year", "1990");

        Object[] data = {firstRow, secondRow};

        JRMapArrayDataSource dataSource = new JRMapArrayDataSource(data);

        JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);

        JasperExportManager.exportReportToPdfFile(jasperPrint, targetFileName);