JasperReports with Java Bean:未能呈现图像(InputStream类型的字段)
输入: 1.使用成员InputStream初始化JasperReports with Java Bean:未能呈现图像(InputStream类型的字段),java,jasper-reports,Java,Jasper Reports,输入: 1.使用成员InputStream初始化 public class Dateien { ... private InputStream payload = null; ... public InputStream getPayload() { return payload; } public void setPayload(InputStream payload) { this.payload = payload; } } 有效负载
public class Dateien {
...
private InputStream payload = null;
...
public InputStream getPayload() {
return payload;
}
public void setPayload(InputStream payload) {
this.payload = payload;
}
}
java.io.ByteArrayInputStream@6aa27760
中创建图像字段时(class=java.io.InputStream,expression=$F{file.payload})
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/abc] threw exception [Request processing failed; nested exception is
net.sf.jasperreports.engine.JRException: Image read failed.] with root cause
net.sf.jasperreports.engine.JRException: Image read failed.
at net.sf.jasperreports.engine.util.JRJdk14ImageReader.readImage(JRJdk14ImageReader.java:73)
顺便说一下:我试图通过浏览器中的HTTP获取图像流,我看到了良好的渲染图像。因此,我看到流是正常的,没有损坏。在类中引发的异常,在第73行
JRJdk14ImageReader.readImage(byte[])
方法的源代码:
public Image readImage(字节[]字节)引发异常
{
InputStream bais=新的ByteArrayInputStream(字节);
图像=空;
尝试
{
图像=图像读取(BAI);
}
捕获(例外e)
{
抛出新的异常(e);
}
最后
{
尝试
{
bais.close();
}
捕获(IOE异常)
{
}
}
if(image==null)
{
抛出新的JREException(“图像读取失败”);//第73行
}
返回图像;
}
如我们所见,如果映像仍然为空,则会引发异常
您应该检查是否确实在将字节数组(
byte[]
)传递到报告作为有效负载字段。在类中引发的异常,在第73行
JRJdk14ImageReader.readImage(byte[])
方法的源代码:
public Image readImage(字节[]字节)引发异常
{
InputStream bais=新的ByteArrayInputStream(字节);
图像=空;
尝试
{
图像=图像读取(BAI);
}
捕获(例外e)
{
抛出新的异常(e);
}
最后
{
尝试
{
bais.close();
}
捕获(IOE异常)
{
}
}
if(image==null)
{
抛出新的JREException(“图像读取失败”);//第73行
}
返回图像;
}
如我们所见,如果映像仍然为空,则会引发异常
您应该检查是否确实正在将字节数组(
byte[]
)作为有效负载字段传递给报表。从net.sf.jasperreports.engine.util.JRJdk14ImageReader的源代码可以看出,引发异常的代码是:如果(image==null){抛出新的JRException(“image read failed”);}
@Alex K谢谢。但正如您在我上面的文本(第2页)中看到的,我在流中没有空对象。我有很好的(非空)流对象。如您所见,JRJdk14ImageReader操作byte[]
类型。方法的完整代码是:public Image readImage(byte[]bytes)抛出JREException{InputStream bais=new ByteArrayInputStream(bytes);Image=null;try{Image=ImageIO.read(bais);}catch(Exception e){throw new jreException(e);}最后{try{bais.close();}catch(IOException e){}}如果(image==null){抛出新的JREException(“图像读取失败”);}返回图像;}
您可以调试这一行:image=ImageIO.read(bais)代码>@Alex K你帮了我很多!谢谢。从net.sf.jasperreports.engine.util.JRJdk14ImageReader的源代码可以看出,引发异常的代码是:if(image==null){throw new JRException(“image read failed”);}
@Alex K谢谢。但正如您在我上面的文本(第2页)中看到的,我在流中没有空对象。我有很好的(非空)流对象。如您所见,JRJdk14ImageReader操作byte[]
类型。方法的完整代码是:public Image readImage(byte[]bytes)抛出JREException{InputStream bais=new ByteArrayInputStream(bytes);Image=null;try{Image=ImageIO.read(bais);}catch(Exception e){throw new jreException(e);}最后{try{bais.close();}catch(IOException e){}}如果(image==null){抛出新的JREException(“图像读取失败”);}返回图像;}
您可以调试这一行:image=ImageIO.read(bais)代码>@Alex K你帮了我很多!谢谢