[Seasar-user:17746] S2JDBCのInputStreamの対応について
Yoshinori Ishii
[E-MAIL ADDRESS DELETED]
2009年 6月 14日 (日) 07:13:05 JST
はじめまして、石井と申します。
S2JDBC 2.4.38、Mysql 5.1の環境で
jdbcManager.selectBySql(InputStream.class,
"SELECT image FROM posts WHERE id = ?", id).getSingleResult();
上記のようにpostsテーブルのlongblob型imageフィールドのデータを
InputStreamで取得したいのですが、以下のようなエラーが出てしまいます。
org.seasar.framework.exception.InstantiationRuntimeException:
[ESSR0041]java.io.InputStreamの作成に失敗しました。理由はjava.lang.InstantiationException
org.seasar.framework.util.ClassUtil.newInstance(ClassUtil.java:139)
org.seasar.extension.jdbc.handler.AbstractBeanResultSetHandler.createRow(AbstractBeanResultSetHandler.java:160)
org.seasar.extension.jdbc.handler.BeanResultSetHandler.handle(BeanResultSetHandler.java:52)
org.seasar.extension.jdbc.query.AbstractQuery.handleResultSet(AbstractQuery.java:448)
org.seasar.extension.jdbc.query.AbstractSelect$6.handle(AbstractSelect.java:429)
org.seasar.extension.jdbc.query.AbstractSelect$6.handle(AbstractSelect.java:426)
org.seasar.extension.jdbc.query.AbstractSelect$1.handle(AbstractSelect.java:299)
org.seasar.extension.jdbc.query.AbstractSelect$1.handle(AbstractSelect.java:297)
org.seasar.extension.jdbc.manager.JdbcContextImpl.usingPreparedStatement(JdbcContextImpl.java:144)
org.seasar.extension.jdbc.query.AbstractSelect.processPreparedStatement(AbstractSelect.java:294)
org.seasar.extension.jdbc.query.AbstractSelect.processResultSet(AbstractSelect.java:423)
org.seasar.extension.jdbc.query.AbstractSelect.getSingleResultInternal(AbstractSelect.java:248)
org.seasar.extension.jdbc.query.AbstractSelect.getSingleResult(AbstractSelect.java:182)
hoge.service.PostService.findImageById(PostService.java:38)
hoge.action.ImageAction.read(ImageAction.java:48)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
hoge.servlet.ActionServlet.service(ActionServlet.java:83)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:99)
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
http://www.seasar.org/wiki/index.php?FAQ%2FS2Container
上記FAQではInputStream型はgetBinaryStreamと対応していると記載してあるのですが、
私の使い方に問題はありますでしょうか。
ソースを確認したところ、
AbstraceSqlSelect#createSingleResultSetHandler()で、
baseClass(InputStream.class)がBeanRessultSetHandlerと対応し
InputStreamをBeanとして扱っているために起こっている例外のように見えます。
本来ならInputStreamはValueTypes#isSimpleType()でSimpleTypeと判定されるべきなのでしょうか?
検討違いでしたら申し訳ありませんが、上記参考の上、どなたかご返信いただけたらと思います。
Seasar-user メーリングリストの案内