[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 メーリングリストの案内