使用Hibernate延迟加载LOB(是:在Resteasy图片上传时编码错误)

时间:2013-04-19 17:28:11

标签: encoding ejb resteasy

我正在尝试使用curl将文件上传到Web服务,然后将这些文件保存在数据库中。到目前为止它对文本文件运行良好,但图片已损坏。

所以,假设我正在使用curl上传文件logo.png:

curl -T D:\logo.png http://127.0.0.1:8080/my-web-service/resteasy/document/metadata?id=logo"&"contentType=IMAGE"&"httpType=image"/"png

我的网络服务使用如下数据:

@Path("metadata")
@PUT
public void putDocument(
    @QueryParam("id") String docId,
    @DefaultValue("GENERIC_CONTENT") @QueryParam("contentType") String contentType,
    @DefaultValue("text/html") @QueryParam("httpType") String httpType,
    byte[] docContent) {
Document doc = new Document();
doc.setDocumentId(docId);
doc.setContentType(new RefContentType(ContentType.valueOf(contentType)));
doc.setHttpContentType(httpType);
doc.setContent(docContent);
doc = getDAO().save(doc);
LOG.info("Document saved successfully id : " + doc.getId());

所以我最好的猜测是setContent方法不适用于包含纯文本以外的字节数组。我怎么知道curl是否搞乱了上传,或者是否是我的ejb读取数组很糟糕?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

原来上传工作正常。我可以通过使用Java BufferedImage类将数组保存在我的磁盘上作为图像文件来确认这一点。

问题在于Hibernate的注释。

我的字节数组使用此Java变量保存在Oracle blob中:

@Column(name="CONTENT")
@Lob //@Basic(fetch=FetchType.LAZY)
byte[] content= null;

@Lob@Basic注释无法正常工作。有关此问题的更多说明,请参阅此问题:Spring, Hibernate, Blob lazy loading