使用PostgreSQL中oid列的字节[]生成java.awt.Image

使用PostgreSQL中oid列的字节[]生成java.awt.Image,java,hibernate,postgresql,itext,seam2,Java,Hibernate,Postgresql,Itext,Seam2,祝你今天愉快。我正在使用Seam 2、rich faces和primefaces、Hibernate JPA和PostgreSQL开发一个应用程序。之前,我为一些带有图像字段的表编制了一些目录。我使用这些注释来声明表中的图像字段: @Lob @Basic(fetch=FetchType.LAZY) @Column(name = "fotografia") public byte[] getFotografia() { return fotografia; } public void se

祝你今天愉快。我正在使用Seam 2、rich faces和primefaces、Hibernate JPA和PostgreSQL开发一个应用程序。之前,我为一些带有图像字段的表编制了一些目录。我使用这些注释来声明表中的图像字段:

@Lob
@Basic(fetch=FetchType.LAZY)
@Column(name = "fotografia")
public byte[] getFotografia() {
    return fotografia;
}
public void setFotografia(byte[] fotografia) {
    this.fotografia = fotografia;
}
它存储在PostgreSQL数据库我的表中的oid列中。之后,我可以在视图中使用primefaces标记显示图像,而不会出现问题:

<p:graphicImage id="_ftFur"
                                    value="#{genericImageStreamer.image}"
                                    rendered="#{genericImageStreamer.image!=null}"
                                    alt="Sin fotografia" style="width:320px; height:420px;"
                                    styleClass="ui-image-container" />
这就是我正在做的,使用我从数据库获得的byte[]矩阵创建一个java.awt.Image对象。我尝试了这些代码行,得到了相同的错误消息:

//1
Toolkit toolkit = Toolkit.getDefaultToolkit();
productoIter.setImage(toolkit.createImage(img.get(0).getFotografia()));

//2
Image image = ImageIO.read(new ByteArrayInputStream(img.get(0).getFotografia()));
productoIter.setImage(image);

//3                                   genericImageStreamer.setMimeType(img.get(0).getMimeType());
genericImageStreamer.setInputStream(img.get(0).getFotografia());
Image image = ImageIO.read(genericImageStreamer.getImage().getStream());
productoIter.setImage(image);
productoIter是一个迭代器,我使用它来设置java.awt.Image对象,从数据库获取列表后,我对它进行迭代,并尝试将字节[]转换为java.awt.Image,但即使字节[]不是null,它也会给出前面的错误。我不知道在使用字节[]作为参数创建图像对象或类似对象之前,是否必须将其转换为其他内容


问候。

嗯,我回答我自己,因为在寻找了很多之后,我找到了解决问题的方法。基本上是通过tearrayinputstream生成而不是java.awt.Image,然后在标记中使用value属性而不是imageData

下面是完整答案的链接(查看发布该帖子的人的回复,他回答自己和我一样)。如果存储映像的mimetype,则可能可以自定义数据类型

 10:06:28,006 ERROR [STDERR] 04-14-2014 10:06:28 AM com.sun.facelets.FaceletViewHandler handleRenderException
GRAVE: Error Rendering View[/inv/producto/repVestidosPDF.xhtml]
java.lang.NullPointerException
    at java.io.ByteArrayInputStream.<init>(ByteArrayInputStream.java:89)
    at com.lowagie.text.Image.getInstance(Unknown Source)
    at org.jboss.seam.pdf.ui.UIImage.createITextObject(UIImage.java:145)
    at org.jboss.seam.pdf.ui.ITextComponent.encodeBegin(ITextComponent.java:213)
    at org.jboss.seam.pdf.ui.ITextComponent.encode(ITextComponent.java:283)
    at org.jboss.seam.pdf.ui.ITextComponent.encode(ITextComponent.java:295)
    at org.jboss.seam.pdf.ui.ITextComponent.encodeChildren(ITextComponent.java:256)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:936)
    at com.sun.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:50)
    at com.sun.facelets.component.UIRepeat.process(UIRepeat.java:357)
    at com.sun.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:617)
    at org.jboss.seam.pdf.ui.ITextComponent.encode(ITextComponent.java:289)
    at org.jboss.seam.pdf.ui.ITextComponent.encodeChildren(ITextComponent.java:256)
    at org.jboss.seam.pdf.ui.ITextComponent.encode(ITextComponent.java:289)
    at org.jboss.seam.pdf.ui.ITextComponent.encodeChildren(ITextComponent.java:256)
    at org.jboss.seam.pdf.ui.ITextComponent.encode(ITextComponent.java:289)
    at org.jboss.seam.pdf.ui.ITextComponent.encodeChildren(ITextComponent.java:256)
    at org.jboss.seam.pdf.ui.ITextComponent.encode(ITextComponent.java:289)
    at org.jboss.seam.pdf.ui.ITextComponent.encodeChildren(ITextComponent.java:256)
    at org.jboss.seam.pdf.ui.ITextComponent.encode(ITextComponent.java:289)
    at org.jboss.seam.pdf.ui.ITextComponent.encodeChildren(ITextComponent.java:256)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:936)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:942)
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
    at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
    at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:109)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
    at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
    at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
    at java.lang.Thread.run(Thread.java:662)
p:image inserts an image into the document. Images can be loaded
from the classpath or from the web application context using the value
attribute.
Resources  can  also  be  dynamically  generated  by  application  code.
The imageData attribute can specify a value binding expression whose
value is a java.awt.Image object.
//1
Toolkit toolkit = Toolkit.getDefaultToolkit();
productoIter.setImage(toolkit.createImage(img.get(0).getFotografia()));

//2
Image image = ImageIO.read(new ByteArrayInputStream(img.get(0).getFotografia()));
productoIter.setImage(image);

//3                                   genericImageStreamer.setMimeType(img.get(0).getMimeType());
genericImageStreamer.setInputStream(img.get(0).getFotografia());
Image image = ImageIO.read(genericImageStreamer.getImage().getStream());
productoIter.setImage(image);