ClassCastException from java, iReport displays fine

0

I get the following error when trying to open my report from java:

cannot assign instance of net.sf.jasperreports.engine.base.JRBaseTextField to field net.sf.jasperreports.engine.base.JRBaseParagraph.paragraphContainer of type net.sf.jasperreports.engine.JRParagraphContainer in instance of net.sf.jasperreports.engine.base.JRBaseParagraph: cannot assign instance of net.sf.jasperreports.engine.base.JRBaseTextField to field net.sf.jasperreports.engine.base.JRBaseParagraph.paragraphContainer of type net.sf.jasperreports.engine.JRParagraphContainer in instance of net.sf.jasperreports.engine.base.JRBaseParagraph

I'm upgrading from iReport 3.7.* to 5.1.0 where my report can be compiled and previewed without any trouble both before and after the upgrade.  After the upgrade however the only time I can get java to open up the report (.jasper file) is if the report is completely blank.  If I attempt to introduce a Text Field, Static Text or anything else I've tried the above error is displayed.

The report I'm using looks like this:

<?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="Incident" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f7b31fbb-2c2d-42bd-bba7-508b39f291e4">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="NUMBER" class="java.lang.Integer">
        <defaultValueExpression><![CDATA[new Integer(1)]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[SELECT * FROM REPORT_INCIDENT]]>
    </queryString>
    <field name="ID" class="java.lang.Number"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="351" splitType="Stretch">
            <textField>
                <reportElement uuid="12dadc34-86a9-4919-aab0-c78902fd67fd" x="258" y="115" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <detail>
        <band height="21"/>
    </detail>
    <pageFooter>
        <band height="24" splitType="Stretch"/>
    </pageFooter>
</jasperReport>

And the java I'm using looks like this:

String form = "Incident";
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("NUMBER", new Integer(1));
JasperPrint jasperPrint = null;
try
{
    //Custom function, just retrieves the file from a default directory, have tried several different alternative and all give the same result
    InputStream IncidentStream = NORAC.getJasperAsStream(form);
    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(IncidentStream);
    jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, getConnection());
}
catch (JRException ex)
{
    jServerGroupStatusPanel.showStatusMessageError(ex.getLocalizedMessage());
    Trace.error(this, ex + ": " + ex.getMessage());
}
catch(ClassCastException ex)
{
    Trace.error(this, ex + ": " + ex.getMessage());
}
catch (SQLException ex)
{
    Trace.error(this, ex + ": " + ex.getMessage());
}
JasperViewer jv = new JasperViewer(jasperPrint, false);
jv.setVisible(true);

Putting in a filename string or any type of inputStream I've attempted in both the lines:

JasperReport jasperReport = (JasperReport) JRLoader.loadObject(IncidentStream);

and

jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, getConnection());

Leads the the same error above. I've installed different versions of iReport and tried various different .jars and am stuck. Any help would be appreciated.

Recompiling the report through java led to some different and interesting errors:

InputStream IncidentStream = NORAC.getJasperAsStream(form);
JasperReport compiledIncident = JasperCompileManager.compileReport(IncidentStream);
jasperPrint = JasperFillManager.fillReport(compiledIncident, parameters, getConnection());

Led to the following error:

0 [AWT-EventQueue-0] WARN net.sf.jasperreports.engine.component.ComponentsEnvironment - Found two components for namespace http://jasperreports.sourceforge.net/jasperreports/components
E:net.sf.jasperreports.engine.JRException: org.apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.: org.apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.

Currently looking into how to solve these issues, if you have any ideas I'd appreciate the help. I'll update this space with any new information I find.

Update: I was able to add a few jasper .jar files into java libraries which made a error complaining about the UUID start which makes me think I have a old .jar somewhere that is messing me up but I can't seem to find it in iReport or included anywhere in java. Strangely enough changing the report to backwards compatible to 4.5.0 to remove UUID reverted back to the above error again. Still looking for more alternatives and solutions.

Both iReport and java contain the following libraries (as well as a ojdbc6.jar one exclusive to iReport) however only jasperreports-5.1.0.jar seems to allow any additional functionality.

  • jasperreports-5.1.0.jar
  • commons-beanutils-1.8.2.jar
  • commons-collections-3.2.1.jar
  • commons-digester-2.1.jar
  • commons-logging-1.1.jar
  • iText-2.1.7.js2.jar
  • jasperreports-core-renderer.jar
  • jasperreports-extensions-3.5.3.jar
  • log4j-1.2.15.jar
  • poi-3.7-20101029.jar
aknudtso's picture
Joined: Jun 6 2013 - 12:41pm
Last seen: 6 years 1 month ago

2 Answers:

2

The ClassCastException and the duplicate component warning indicate that you have two JasperReports jars on your classpath.

The MalformedByteSequenceException says that you are not reading a JRXML file but something else (mabye a compiled report *.jasper file).

Regards,

Lucian

lucianc's picture
7055
Joined: Jul 17 2006 - 1:10am
Last seen: 5 days 14 hours ago

I didn't realize I was trying to compile through the .jasper instead of the .jrxml, once I fixed that I was able to get everything running with a few small changes. Ultimately I ended up trying to open the report through the jasper file and catching the error if it fails and then trying to recompile through the jrxml as a fail-safe. This worked really well throughout my tests.

One oddity however was I had to manually go into the XML file and remove all entries with "<paragraph lineSpacing="Single"/>" since they all caused errors, after removing these I was able to run the report as intended. I also had to change the compatibility version to 4.5.0 or before in order to get rid of the uuid errors.

I most likely still have a old .jar file floating around that is causing my issue but this will work for now until I can devote more time to it. Thanks everyone for the help.

aknudtso - 6 years 1 month ago

Try enabling debug logging for net.sf.jasperreports.extensions.DefaultExtensionsRegistry, it should tell you on startup where it finds JR extensions property resources.

lucianc - 6 years 1 month ago
0

Which version of jasperreports library do you use in java?

your report uses a newer spec of jasperreports (you can see it by the "uuid=..." attribute of the text field, so you cannot use an old library version.

did you try to recompile the jrxml in java?

would be helpful to post the complete stack trace.

Cheers, Thomas

http://www.thomaszimmer.net

Thomas Zimmer's picture
Joined: Oct 2 2012 - 1:35am
Last seen: 1 week 5 days ago

I hadn't been using anything other then jasperreports-3.7.*.jar in my java libraries previously and upgrading it to jasperreports-5.1.0.jar doesn't change anything I'm seeing I've included various other libraries without any success what would you suggest?

I also have tried a backwards compatibility option (to get it back to around 3.7.0 and remove uuid) but that didn't get rid of or change the error message

The complete error is:
java.lang.ClassCastException: cannot assign instance of net.sf.jasperreports.engine.base.JRBaseTextField to field net.sf.jasperreports.engine.base.JRBaseParagraph.paragraphContainer of type net.sf.jasperreports.engine.JRParagraphContainer in instance of net.sf.jasperreports.engine.base.JRBaseParagraph
at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2063)
at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1241)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1976)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1894)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:498)
at net.sf.jasperreports.engine.base.JRBaseTextElement.readObject(JRBaseTextElement.java:1366)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1872)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at java.util.ArrayList.readObject(ArrayList.java:733)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1872)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1894)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:498)
at net.sf.jasperreports.engine.base.JRBaseReport.readObject(JRBaseReport.java:823)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1872)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:201)
at com.arinc.aim.report.module.norac.dialog.IncidentDialog.jViewActionPerformed(IncidentDialog.java:905)
at com.arinc.aim.report.module.norac.dialog.IncidentDialog.access$1300(IncidentDialog.java:88)
at com.arinc.aim.report.module.norac.dialog.IncidentDialog$10.actionPerformed(IncidentDialog.java:388)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at org.pushingpixels.substance.internal.utils.RolloverButtonListener.mouseReleased(RolloverButtonListener.java:124)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at com.arinc.aim.core.swing.SystemEventQueueManager$1.dispatchEvent(SystemEventQueueManager.java:73)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

aknudtso - 6 years 1 month ago

When compiling at runtime I get the following error:

net.sf.jasperreports.engine.JRException: org.apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:249)
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:228)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:216)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:199)
at com.arinc.aim.report.module.norac.dialog.IncidentDialog.jViewActionPerformed(IncidentDialog.java:906)
at com.arinc.aim.report.module.norac.dialog.IncidentDialog.access$1300(IncidentDialog.java:89)
at com.arinc.aim.report.module.norac.dialog.IncidentDialog$10.actionPerformed(IncidentDialog.java:389)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at org.pushingpixels.substance.internal.utils.RolloverButtonListener.mouseReleased(RolloverButtonListener.java:124)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at com.arinc.aim.core.swing.SystemEventQueueManager$1.dispatchEvent(SystemEventQueueManager.java:73)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: org.apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
at org.apache.xerces.impl.io.UTF8Reader.invalidByte(Unknown Source)
at org.apache.xerces.impl.io.UTF8Reader.read(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.skipString(Unknown Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.commons.digester.Digester.parse(Digester.java:1647)
at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:241)

aknudtso - 6 years 1 month ago
Feedback