Closed GoogleCodeExporter closed 8 years ago
Thanks for this report. But, could you send me the Action code and the XML
mappging file?
Original comment by jyoshiriro
on 15 Jan 2010 at 2:14
I made a simple example using Convention Plugin and I had No problem.
Model class:
@Entity
public class ImageTest implements Serializable{
@Id
@GeneratedValue(strategy = IDENTITY)
int idimage;
@Column
byte[] content;
public ImageTest() {
// TODO Auto-generated constructor stub
}
public ImageTest(int idimage, byte[] content) {
super();
this.idimage = idimage;
this.content = content;
}
public int getIdimage() {
return idimage;
}
public void setIdimage(int idimage) {
this.idimage = idimage;
}
public byte[] getContent() {
return content;
}
public void setContent(byte[] content) {
this.content = content;
}
}
Action:
@ParentPackage("hibernate-default")
public class VerImagemAction extends ActionSupport{
@SessionTarget
Session session;
InputStream inputStream;
@Action(
results=@Result(type="stream")
)
public String execute() throws Exception {
ImageTest imagem = (ImageTest) session.get(ImageTest.class, 1);
inputStream = new ByteArrayInputStream(imagem.getContent());
return super.execute();
}
public InputStream getInputStream() {
return inputStream;
}
}
hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property
name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">admin</property>
<property
name="hibernate.connection.url">jdbc:mysql://localhost:3306/ufpa</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping class="modelo.ImageTest" />
</session-factory>
</hibernate-configuration>
No struts.xml
The Stream was successull generated and downloaded with no exception.
Hibernate Core 3.3.2
Hibernate Annotations 3.4
Hibernate Validator 3.1
MySql 5.1
Struts 2.1.8
FHP 2.1.2
Original comment by jyoshiriro
on 15 Jan 2010 at 2:47
Hi jyoshiriro,
I've tried to detail it as much as possible, if you need something please do
let me
know.
Thanks.
Struts.xml :
----------
<package name="downloadTest" namespace="/downloadTest"
extends="hibernate-default">
<action name="DownloadFileActionTest"
class="xyz.DownloadFileAction">
<interceptor-ref name="defaultStackHibernateStrutsValidation" />
<result name="success" type="stream">
<param name="contentType">application/pdf</param>
<param name="inputName">inputStream</param>
<param
name="contentDisposition">filename="document.pdf"</param>
<param name="bufferSize">1024</param>
</result>
</action>
</package>
Model/Entity, DocumentTempImpl :
-------------------------------
public class DocumentTempImpl {
private Long objectId;
private String documentCode;
private byte[] data;
public DocumentTempImpl() {
super();
}
public DocumentTempImpl(Long objectId) {
super(objectId);
}
public Long getObjectId() {
return objectId;
}
public void setObjectId(Long objectId) {
this.objectId = objectId;
}
public String getDocumentCode() {
return documentCode;
}
public void setDocumentCode(String documentCode) {
this.documentCode = documentCode;
}
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
}
Action, DownloadFileAction.java :
--------------------------------
import xyz.Document;
import xyz.DocumentTempImpl;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionSupport;
/*
* Attempts to fetch a pdf file and send to user.
* The pdf file resides in DB, Fetched using hibernate.
*
*/
public class DownloadFileAction extends ActionSupport {
private String documentId = "98";
private InputStream inputStream;
@SessionTarget
Session hSession;
@TransactionTarget
Transaction hTransaction;
public String execute() throws Exception {
fetch();
return SUCCESS;
}
private void fetch() throws Exception {
DocumentTempImpl doc = (DocumentTempImpl)find(DocumentTempImpl.class,
Long.valueOf(documentId));
byte[] data = doc.getData();
inputStream = new ByteArrayInputStream(data);
}
public InputStream getInputStream() {
return inputStream;
}
public Object find(Class clazz, Long id) {
Query q = hSession.createQuery("from " + clazz.getName()
+ " as t where t.id =:longVal");
q.setLong("longVal", id);
return q.uniqueResult();
}
}
Hibernate Configuration, hibernate.cfg.xml :
-------------------------------------------
<hibernate-configuration>
<session-factory>
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
<property
name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property
name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">test</property>
<property name="connection.password">test</property>
<property
name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
<mapping resource="xyz/DocumentTempImpl.hbm.xml" />
</session-factory>
</hibernate-configuration>
Hibernate Mapping, DocumentTempImpl.hbm.xml :
-------------------------------------------
<hibernate-mapping>
<class name="xyz.DocumentTempImpl" table="DOCUMENT_TEMP">
<id name="objectId" column="DOCUMENT_TEMP_ID" access="field">
<generator class="native" />
</id>
<property name="documentCode" column="CODE" type="string"
access="field" />
<property name="data" access="field">
<column name="FILE" sql-type="MEDIUMBLOB" />
</property>
</class>
</hibernate-mapping>
Hibernate Core 3.3.2 GA
Hibernate Annotations 3.4
Hibernate Validator 3.1
MySql 5.1.41
Struts 2.1.8
FHP 2.1.2 GA
JRE/JDK 1.6
Original comment by amanimra...@gmail.com
on 15 Jan 2010 at 7:40
Attachments:
If this is useful.... apache-tomcat-5.5.28
Original comment by amanimra...@gmail.com
on 15 Jan 2010 at 11:54
I used your file in a new project using Apache Derby Embedded Database and the
data
was downloaded successful.
Is the content of you colunm "data" a valid PDF file?
Original comment by jyoshiriro
on 15 Jan 2010 at 12:52
I tried now with mysql 5.1 with success too. But I use Tomcat 6.x.
So, the problem can be the Tomcat version or the content of your table.
Original comment by jyoshiriro
on 15 Jan 2010 at 1:10
Yes it was tomcat-5.5.28, that was causing the problem. I changed to
tomcat-6.0.20 and
the exception stopped showing up.
Thanks a lot.
Original comment by amanimra...@gmail.com
on 16 Jan 2010 at 6:12
Original issue reported on code.google.com by
amanimra...@gmail.com
on 14 Jan 2010 at 1:29Attachments: