Monday, 15 March 2010

java - Show image from database. Getting net.sf.jasperreports.engine.JRException: Image read failed -



java - Show image from database. Getting net.sf.jasperreports.engine.JRException: Image read failed -

i'm trying pull image binary info database , insert jasper reports report.

using jaspersoft studio, read in field , alter it's type java.awt.image. then, add together image element study , alter look ${attr1_icon} when seek compile, get:

net.sf.jasperreports.engine.jrexception: net.sf.jasperreports.engine.jrexception: unable value field 'attr1_icon' of class 'java.awt.image' @ com.jaspersoft.studio.editor.preview.view.control.reportcontroler.fillreport(reportcontroler.java:482) @ com.jaspersoft.studio.editor.preview.view.control.reportcontroler.access$18(reportcontroler.java:457) @ com.jaspersoft.studio.editor.preview.view.control.reportcontroler$4.run(reportcontroler.java:347) @ org.eclipse.core.internal.jobs.worker.run(worker.java:54) caused by: net.sf.jasperreports.engine.jrexception: unable value field 'attr1_icon' of class 'java.awt.image' @ net.sf.jasperreports.engine.jrresultsetdatasource.getfieldvalue(jrresultsetdatasource.java:319) @ net.sf.jasperreports.engine.fill.jrfilldataset.setoldvalues(jrfilldataset.java:1356) @ net.sf.jasperreports.engine.fill.jrfilldataset.next(jrfilldataset.java:1257) @ net.sf.jasperreports.engine.fill.jrfilldataset.next(jrfilldataset.java:1233) @ net.sf.jasperreports.engine.fill.jrbasefiller.next(jrbasefiller.java:1577) @ net.sf.jasperreports.engine.fill.jrverticalfiller.fillreport(jrverticalfiller.java:149) @ net.sf.jasperreports.engine.fill.jrbasefiller.fill(jrbasefiller.java:932) @ net.sf.jasperreports.engine.fill.basefillhandle$reportfiller.run(basefillhandle.java:120) @ java.lang.thread.run(unknown source) caused by: net.sf.jasperreports.engine.jrexception: image read failed. @ net.sf.jasperreports.engine.util.jrjdk14imagereader.readimage(jrjdk14imagereader.java:73) @ net.sf.jasperreports.engine.util.jrimageloader.loadawtimagefrombytes(jrimageloader.java:167) @ net.sf.jasperreports.engine.jrresultsetdatasource.getfieldvalue(jrresultsetdatasource.java:309) caused by: net.sf.jasperreports.engine.jrexception: image read failed. @ net.sf.jasperreports.engine.util.jrjdk14imagereader.readimage(jrjdk14imagereader.java:73) @ net.sf.jasperreports.engine.util.jrimageloader.loadawtimagefrombytes(jrimageloader.java:167) @ net.sf.jasperreports.engine.jrresultsetdatasource.getfieldvalue(jrresultsetdatasource.java:309)

the source code caused exception comes here in jrjdk14imagereader.java:

public image readimage(byte[] bytes) throws jrexception { inputstream bais = new bytearrayinputstream(bytes); image image = null; seek { image = imageio.read(bais); } grab (exception e) { throw new jrexception(e); } { seek { bais.close(); } grab (ioexception e) { } } if (image == null) { throw new jrexception("image read failed."); // line 73 } homecoming image; }

so, can see image null. don't understand why. i've verified info there. if alter info type string , add together normal text field, prints binary data. so, don't think it's null because passed in info null.

from javadoc:

returns bufferedimage result of decoding supplied inputstream imagereader chosen automatically among registered. inputstream wrapped in imageinputstream. if no registered imagereader claims able read resulting stream, null returned.

so guess there no registered imagereader? how prepare through jaspersoft studio?

edit: i've tried using java.io.inputstream class type suggested here results in same error. kind of. big difference that, in jaspersoft studio, can set image show blank if there error. if utilize java.awt.image, setting nothing. still error , study doesn't build. if utilize java.io.inputstream, study build, image blank. if switch on error reporting, similar stack trace, it's not quite same:

net.sf.jasperreports.engine.jrruntimeexception: net.sf.jasperreports.engine.jrexception: image read failed. @ net.sf.jasperreports.engine.export.draw.printdrawvisitor.visit(printdrawvisitor.java:143) @ net.sf.jasperreports.engine.export.draw.printdrawvisitor.visit(printdrawvisitor.java:1) @ net.sf.jasperreports.engine.fill.jrtemplateprintimage.accept(jrtemplateprintimage.java:451) @ net.sf.jasperreports.engine.export.draw.framedrawer.draw(framedrawer.java:251) @ net.sf.jasperreports.engine.export.draw.framedrawer.draw(framedrawer.java:199) @ net.sf.jasperreports.engine.export.jrgraphics2dexporter.exportpage(jrgraphics2dexporter.java:273) @ net.sf.jasperreports.engine.export.jrgraphics2dexporter.exportreporttographics2d(jrgraphics2dexporter.java:246) @ net.sf.jasperreports.engine.export.jrgraphics2dexporter.exportreport(jrgraphics2dexporter.java:184) @ net.sf.jasperreports.eclipse.viewer.viewercanvas.renderpage(viewercanvas.java:369) @ net.sf.jasperreports.eclipse.viewer.viewercanvas.refresh(viewercanvas.java:344) @ net.sf.jasperreports.eclipse.viewer.viewercanvas$2.viewerstatechanged(viewercanvas.java:118) @ net.sf.jasperreports.eclipse.viewer.reportviewer.fireviewermodelchanged(reportviewer.java:383) @ net.sf.jasperreports.eclipse.viewer.reportviewer.setpageindex(reportviewer.java:297) @ com.jaspersoft.studio.editor.preview.view.report.swt.swtviewer.setjrprint(swtviewer.java:125) @ com.jaspersoft.studio.editor.preview.view.report.swt.swtviewer.setjrprint(swtviewer.java:112) @ com.jaspersoft.studio.editor.preview.previewjrprint.switchrightview(previewjrprint.java:226) @ com.jaspersoft.studio.editor.preview.previewcontainer.switchrightview(previewcontainer.java:247) @ com.jaspersoft.studio.editor.preview.previewjrprint$3.switchview(previewjrprint.java:194) @ com.jaspersoft.studio.editor.preview.previewjrprint$1.run(previewjrprint.java:153) @ org.eclipse.swt.widgets.runnablelock.run(runnablelock.java:35) @ org.eclipse.swt.widgets.synchronizer.runasyncmessages(synchronizer.java:135) @ org.eclipse.swt.widgets.display.runasyncmessages(display.java:4144) @ org.eclipse.swt.widgets.display.readanddispatch(display.java:3761) @ org.eclipse.ui.internal.workbench.runeventloop(workbench.java:2701) @ org.eclipse.ui.internal.workbench.runui(workbench.java:2665) @ org.eclipse.ui.internal.workbench.access$4(workbench.java:2499) @ org.eclipse.ui.internal.workbench$7.run(workbench.java:679) @ org.eclipse.core.databinding.observable.realm.runwithdefault(realm.java:332) @ org.eclipse.ui.internal.workbench.createandrunworkbench(workbench.java:668) @ org.eclipse.ui.platformui.createandrunworkbench(platformui.java:149) @ com.jaspersoft.studio.rcp.intro.application.start(application.java:97) @ org.eclipse.equinox.internal.app.eclipseapphandle.run(eclipseapphandle.java:196) @ org.eclipse.core.runtime.internal.adaptor.eclipseapplauncher.runapplication(eclipseapplauncher.java:110) @ org.eclipse.core.runtime.internal.adaptor.eclipseapplauncher.start(eclipseapplauncher.java:79) @ org.eclipse.core.runtime.adaptor.eclipsestarter.run(eclipsestarter.java:353) @ org.eclipse.core.runtime.adaptor.eclipsestarter.run(eclipsestarter.java:180) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(unknown source) @ sun.reflect.delegatingmethodaccessorimpl.invoke(unknown source) @ java.lang.reflect.method.invoke(unknown source) @ org.eclipse.equinox.launcher.main.invokeframework(main.java:629) @ org.eclipse.equinox.launcher.main.basicrun(main.java:584) @ org.eclipse.equinox.launcher.main.run(main.java:1438) caused by: net.sf.jasperreports.engine.jrexception: image read failed. @ net.sf.jasperreports.engine.util.jrjdk14imagereader.readimage(jrjdk14imagereader.java:73) @ net.sf.jasperreports.engine.util.jrimageloader.loadawtimagefrombytes(jrimageloader.java:167) @ net.sf.jasperreports.engine.jrimagerenderer.getimage(jrimagerenderer.java:407) @ net.sf.jasperreports.engine.jrimagerenderer.getdimension(jrimagerenderer.java:482) @ net.sf.jasperreports.engine.renderableutil.getonerrorrendererfordimension(renderableutil.java:264) @ net.sf.jasperreports.engine.export.draw.imagedrawer.draw(imagedrawer.java:116) @ net.sf.jasperreports.engine.export.draw.printdrawvisitor.visit(printdrawvisitor.java:134)

though, can see, root cause still comes jrjdk14imagereader.java line 73.

some other info might useful:

the info stored in database long binary (using sybase). image base64 encoded.

this issue blocking me finishing project, deadline approaching pretty fast. help great.

edit 2: updated version of jaspersoft studio 5.5 5.6, did nothing.

as well, look tried javax.imageio.imageio.read($f{attr1_icon}) not produce error, image blank.

even though posted in issue, overlooked fact image base64 encoded, meaning string. is, value couldn't used jasper, had decoded. can done 1 of 2 ways:

change look to:

new java.io.bytearrayinputstream(javax.xml.datatypeconverter.parsebase64binary($f{imagefield}))

or convert string binary in info base. in sybase, that's base64_decode function. 1 time converted, can alter type java.io.inputstream , it'll work.

java image jasper-reports

No comments:

Post a Comment