[Seasar-user:19984] [mobylet] 画像リサイズ時の事象報告と要望

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2010年 7月 19日 (月) 21:40:29 JST


お世話になります。
decoyです。

mobyletの画像リサイズ機能ですが、
存在しない画像へのパスが指定されていると
下記のようなエラー(500エラー)が発生します。

・相対パスで存在しない画像を指定した場合
java.lang.IllegalArgumentException: input == null!
  javax.imageio.ImageIO.read(ImageIO.java:1322)
  org.mobylet.core.image.impl.MobyletImageScaler.scale(MobyletImageScaler.java:53)
  org.mobylet.core.http.image.MobyletImageScaleServlet.doGet(MobyletImageScaleServlet.java:124)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
  org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
  org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
  org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
  org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:159)
  org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
  org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:99)
  org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
  org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
  org.mobylet.core.http.MobyletFilter.processFilter(MobyletFilter.java:121)
  org.mobylet.core.http.MobyletFilter.doFilter(MobyletFilter.java:74)


・絶対パスで存在しない画像を指定した場合
org.mobylet.core.MobyletRuntimeException: ストリームをオープンできません path = http://hogehoge.jp/hoge.gif
  org.mobylet.core.image.impl.MobyletImageReader.getStream(MobyletImageReader.java:114)
  org.mobylet.core.http.image.MobyletImageScaleServlet.doGet(MobyletImageScaleServlet.java:92)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
  org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
  org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
  org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
  org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:159)
  org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
  org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:99)
  org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
  org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
  org.mobylet.core.http.MobyletFilter.processFilter(MobyletFilter.java:121)
  org.mobylet.core.http.MobyletFilter.doFilter(MobyletFilter.java:74)


存在しない画像へのパスが指定されている場合は
404エラーとするのが正しい動きのように思いますが如何でしょうか。
使用しているバージョンは下記のとおり、いずれも1.0.5です。

mobylet-charset-1.0.5.jar
mobylet-core-1.0.5.jar
mobylet-taglibs-1.0.5.jar
mobylet-mail-1.0.5.jar
mobylet-s2extension-1.0.5.jar
mobylet-gaeextension-1.0.5.jar


ここから要望です。

動的にパスを生成している場合等で、存在しない画像へのパスが指定されている場合は
下記のような挙動として頂く事は可能でしょうか。

・mobylet.image.propertiesに存在しない画像へのパスが
 imageScalerへ指定されていた場合に読み込む画像を
 下記のような感じで予め定義しておき、
 下記で定義した画像も存在しない場合は404エラーとする


# 画像が存在しなかった場合に読み込む画像の定義を行なう
# 絶対パス、相対パスで指定可能且つ${docBase}や${contextPath}といった予約変数も使用可能とする
# image.source.no.existsというのは仮の項目名です
# もっと相応しい名前があれば変更して下さい
image.source.no.exists=non.jpg


以上、御検討の程、宜しくお願い致します。

// decoy


PS: 竹内(stakeuchi)様へ

先程、twitterでフォローさせて頂きましたので
宜しければフォローして頂けますと幸いです。


Seasar-user メーリングリストの案内