CMSポートレット、Tomahawk 1.1.3、Teeda 1.0.3 で、アップロードまわりで変な Exception を得た。というわけで、メモ。見た感じでは、Teedaでポートレット環境のチェック漏れがあるような気もするな。
Nested Exception is java.lang.ClassCastException: jp.sf.pal.tomahawk.multipart.MultipartPortletRequestWrapper at org.seasar.teeda.core.util.ServletExternalContextUtil.getRequest(ServletExternalContextUtil.java:187) at org.seasar.teeda.core.util.ServletExternalContextUtil.isPost(ServletExternalContextUtil.java:204) at org.seasar.teeda.core.lifecycle.impl.RestoreViewPhase.setUpRestoreViewPhase(RestoreViewPhase.java:90) at org.seasar.teeda.core.lifecycle.impl.RestoreViewPhase.executePhase(RestoreViewPhase.java:63) at org.seasar.teeda.core.lifecycle.AbstractPhase.execute(AbstractPhase.java:55) at org.seasar.teeda.core.lifecycle.impl.RestoreViewPhase$$EnhancedByS2AOP$$399f5d89.$$execute$$invokeSuperMethod$$(RestoreViewPhase$$EnhancedByS2AOP$$399f5d89.java) at org.seasar.teeda.core.lifecycle.impl.RestoreViewPhase$$EnhancedByS2AOP$$399f5d89$$MethodInvocation$$execute0.proceed(MethodInvocationClassGenerator.java) at org.seasar.teeda.core.interceptor.MeasurementInterceptor.invoke(MeasurementInterceptor.java:46) at org.seasar.teeda.core.lifecycle.impl.RestoreViewPhase$$EnhancedByS2AOP$$399f5d89$$MethodInvocation$$execute0.proceed(MethodInvocationClassGenerator.java) at org.seasar.teeda.core.lifecycle.impl.RestoreViewPhase$$EnhancedByS2AOP$$399f5d89.execute(RestoreViewPhase$$EnhancedByS2AOP$$399f5d89.java) at org.seasar.teeda.core.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:67) at org.seasar.teeda.core.portlet.FacesPortlet.executeFaces(FacesPortlet.java:358) at org.seasar.teeda.core.portlet.FacesPortlet.processAction(FacesPortlet.java:334)
追記:修正した。この問題は、Jetspeed2やPlutoでは、普通に使っていては、見つからんかったのね。もしかしたら、ほかにもこんな場所があるかも、っと思い、ServletExternalContextUtilのgetRequestがポートレットで呼ばれるかを見てみた。ほかには呼ばれるような形跡はないみたい。あとは、getResonseもチェックした方がいいな・・・。あとで、しよ。