-
Type: Bug
-
Resolution: Fixed
-
Priority: Major
-
Affects Version/s: 1.0.5
-
Component/s: mobylet-core
-
None
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