Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
218 views
in Technique[技术] by (71.8m points)

java - Jasper Report : Document root element "jasperReport", must match DOCTYPE root "null"

I have designed jasper report using iReport version (4.7.1). Through iReport it works fine. When I called from java servlet, I get an error:

Error : `Document root element "jasperReport", must match DOCTYPE root "null".`

net.sf.jasperreports.engine.JRException: Document root element "jasperReport", 
must match DOCTYPE root "null".

        at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:242)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:225)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:213)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:167)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:151)
        at com.crmreport.controller.ReportServlet.processRequest(ReportServlet.java:124)
        at com.crmreport.controller.ReportServlet.doPost(ReportServlet.java:505)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:594)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:165)
        at java.lang.Thread.run(Thread.java:619)
        Caused by: org.xml.sax.SAXParseException: Document root element "jasperReport",must match DOCTYPE root "null".
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Err
orHandlerWrapper.java:131)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(
XMLErrorReporter.java:384)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(
XMLErrorReporter.java:318)
        at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootEleme
ntSpecified(XMLDTDValidator.java:1621)
        at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleSta
rtElement(XMLDTDValidator.java:1900)
        at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElem
ent(XMLDTDValidator.java:764)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l.scanStartElement(XMLDocumentFragmentScannerImpl.java:1357)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$Conten
tDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1289)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3084)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$Prolog
Driver.next(XMLDocumentScannerImpl.java:912)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(X
MLDocumentScannerImpl.java:645)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
ML11Configuration.java:807)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
ML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.
java:107)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Ab
stractSAXParser.java:1205)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.p
arse(SAXParserImpl.java:522)
        at org.apache.commons.digester.Digester.parse(Digester.java:1745)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:
238)

This is my JRXML file:

    <?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" 
              name="BusinessUnitDetail" 
              pageWidth="595" 
              pageHeight="842" 
              columnWidth="535" 
              leftMargin="20" 
              rightMargin="20" 
              topMargin="20"
              bottomMargin="20" 
              uuid="22e233b2-d42c-4a93-87c6-a1d23bd3f7ca">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <style name="Title" forecolor="#FFFFFF" fontName="Times New Roman" fontSize="50" isBold="false" pdfFontName="Times-Bold"/>
    <style name="SubTitle" forecolor="#CCCCCC" fontName="Times New Roman" fontSize="18" isBold="false" pdfFontName="Times-Roman"/>
    <style name="Column header" forecolor="#666666" fontName="Times New Roman" fontSize="14" isBold="true" pdfFontName="Times-Roman"/>
    <style name="Detail" mode="Transparent" fontName="Times New Roman" pdfFontName="Times-Roman"/>
    <style name="Row" mode="Transparent" fontName="Times New Roman" pdfFontName="Times-Roman">
        <conditionalStyle>
            <conditionExpression><![CDATA[$V{REPORT_COUNT}%2 == 0]]></conditionExpression>
            <style mode="Opaque" backcolor="#F0EFEF"/>
        </conditionalStyle>
    </style>
    <parameter name="dateFrom" class="java.util.Date">
        <property name="dateFrom" value="new java.util.Date()"/>
        <defaultValueExpression><![CDATA[new java.util.Date()]]></defaultValueExpression>
    </parameter>
    <parameter name="dateTo" class="java.util.Date">
        <property name="dateTo" value="new java.util.Date()"/>
        <defaultValueExpression><![CDATA[new java.util.Date()]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[SELECT
     BusinessUnit AS BusinessUnit,
     CallStart AS CallStart,
     CallEnd AS CallEnd,
     CallTakenBy AS CallTakenBy,
     CalledDate AS CalledDate,
     CallPersonName AS CallPersonName,
     Duration AS Duration
FROM
    crmcalldetail
WHERE CalledDate > $P{dateFrom} AND CalledDate < $P{dateTo}
ORDER BY BusinessUnit]]>
    </queryString>
    <field name="BusinessUnit" class="java.lang.String"/>
    <field name="CallStart" class="java.sql.Time"/>
    <field name="CallEnd" class="java.sql.Time"/>
    <field name="CallTakenBy" class="java.lang.String"/>
    <field name="CalledDate" class="java.sql.Date"/>
    <field name="CallPersonName" class="java.lang.String"/>
    <field name="Duration" class="java.lang.Integer"/>
    <variable name="duration_sum" class="java.lang.Integer" resetType="Group" resetGroup="BusinessUnit" calculation="Sum">
        <variableExpression><![CDATA[$F{Duration}]]></variableExpression>
    </variable>
    <variable name="duration_tot" class="java.lang.Integer" calculation="Sum">
        <variableExpression><![CDATA[$F{Duration}]]></variableExpression>
    </variable>
    <group name="BusinessUnit">
        <groupExpression><![CDATA[$F{BusinessUnit}]]></groupExpression>
        <groupHeader>
            <band height="37">
                <frame>
                    <reportElement uuid="e53feaa2-4fce-4233-873c-4c5b1d87bd09" mode="Opaque" x="0" y="7" width="555" height="24" forecolor="#B89F7D" backcolor="#000000"/>
                    <textField isStretchWithOverflow="true">
                        <reportElement uuid="8a34951d-becf-4676-801f-1cbfd81518b9" style="SubTitle" isPrintRepeatedValues="false" x="2" y="0" width="479" height="24" forecolor="#FF6600"/>
                        <textElement>
                            <font isBold="false"/>
                        </textElement>
                        <textFieldExpression><![CDATA[$F{BusinessUnit}]]></textFieldExpression>
                    </textField>
                </frame>
            </band>
        </groupHeader>
        <groupFooter>
            <band height="26">
                <textField pattern="###0">
                    <reportElement uuid="6a2e9f4f-bc0c-4deb-a861-9d30221cc566" x="481" y="9" width="48" height="15" forecolor="#FF3300"/>
                    <textElement textAlignment="Right">
                        <font size="11" isBold="true" isUnderline="true"/>
                    </textElement>
                    <textFieldExpression><![CDATA[$V{duration_sum}]]></textFieldExpression>
                </textField>
            </band>
        </groupFooter>
    </group>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="194" splitType="Stretch">
            <image>
                <reportElement uuid="97326b0b-4f59-45fa-bab1-82019da4a8f6" x="456" y="0" width="99" height="117"/>
                <imageExpression><![CDATA["cherry.jpg"]]></imageExpression>
            </image>
            <frame>
                <reportElement uuid="643a9f59-1f72-4def-a457-944bebb9111a" mode="Opaque" x="0" y="0" width="451" height="95" backcolor="#000000"/>
                <staticText>
                    <reportElement uuid="c2fa629b-41e3-4ea6-ba69-458367963aac" style="Title" x="0" y="0" width="451" height="66"/>
                    <textElement>
                        <font isBold="false"/>
                    </textElement>
                    <text><![CDATA[Call Tracker Report]]></text>
                </staticText>
                <staticText>
                    <reportElement uuid="a01a3826-af92-4941-ab2b-41cb1da3f9a6" style="SubTitle" x="157" y="66" width="249" height="29"/>
                    <textElement>
                        <font size="22" isBold="false"/>
                    </textElement>
                    <text><![CDATA[X-ONT Software (Ltd) Ltd]]></text>
                </staticText>
            </frame>
            <frame>
                <reportElement uuid="3d131a89-bb0f-4d0a-8085-85ef01af5910" mode="Opaque" x="0" y="96" width="451" height="21" forecolor="#000000" backcolor="#CC0000"/>
                <textField pattern="EEEEE dd MMMMM yyyy">
                    <reportElement uuid="580213d0-b1fc-4725-b311-c89e960a4ce0" x="303" y="1" width="144" height="20" forecolor="#FFFFFF"/>
                    <tex

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Assuming that the jrxml file has been added to your jar file, you should load it like this:

InputStream is = ReportServlet.class.getResourceAsStream(themeDesignName);
jasperDesign = JRXmlLoader.load(is);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...