History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: WW-1311
Type: Bug Bug
Status: Closed Closed
Resolution: Not A Problem
Priority: Major Major
Assignee: Rainer Hermanns
Reporter: Logi Ragnarsson
Votes: 0
Watchers: 1
Operations

If you were logged in you would be able to see more operations.
WebWork

Unneccesary dependence on portlet API

Created: 27/Jun/06 05:15 AM   Updated: 27/Jun/06 05:56 AM
Component/s: Portlet Integration
Affects Version/s: 2.2.2
Fix Version/s: 2.2.3

Environment: sun jdk 1.5.0_06-b05 on linux i386 with tomcat 5.5


 Description  « Hide
It seems that URL.end will *some* times call PortletActionContext.isPortletRequest() to check if the current request is a portlet request. This will fail with a "java.lang.NoClassDefFoundError: javax/portlet/PortletRequest" if the portlet api is not present on the classpath.

The really insiduous thing about this bug is that the decision to check for portlet requests seems to be inconsistent. On rapidly reloading the same page, on the 150th load or so the problem appeared and persisted until I restarted tomcat. This means that the problem could go undetected during development and appear in deployment. Egg will be deposited on face.

I would suggest that:
  1) the consistency of whether to make this check be examined, and
  2) the PortletActionContext run a static initializer to verify that the javax.portlet.PorletRequest class is available and if not, simply always returns false from this and any similar methods.

Stack-trace:
2006-06-27 09:53:59,106 ERROR [org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704)] Servlet.service() for servlet jsp threw exception
java.lang.NoClassDefFoundError: javax/portlet/PortletRequest
        at com.opensymphony.webwork.portlet.context.PortletActionContext.getRequest(PortletActionContext.java:70)
        at com.opensymphony.webwork.portlet.context.PortletActionContext.isPortletRequest(PortletActionContext.java:94)
        at com.opensymphony.webwork.components.URL.end(URL.java:180)
        at com.opensymphony.webwork.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:21)
        at org.apache.jsp.eplica.waf.admin.timerStatistics_jsp._jspx_meth_ww_url_0(org.apache.jsp.eplica.waf.admin.timerStatistics_jsp:777)
        at org.apache.jsp.eplica.waf.admin.timerStatistics_jsp._jspx_meth_ww_iterator_1(org.apache.jsp.eplica.waf.admin.timerStatistics_jsp:716)
        at org.apache.jsp.eplica.waf.admin.timerStatistics_jsp._jspx_meth_ww_if_1(org.apache.jsp.eplica.waf.admin.timerStatistics_jsp:658)
        at org.apache.jsp.eplica.waf.admin.timerStatistics_jsp._jspService(org.apache.jsp.eplica.waf.admin.timerStatistics_jsp:178)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
        at com.opensymphony.webwork.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:114)
        at com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:101)
        at com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:312)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:207)
        at com.eplica.waf.security.AuthorizationInterceptor$1.invoke(AuthorizationInterceptor.java:82)
        at com.eplica.waf.security.AuthorizationInterceptor.intercept(AuthorizationInterceptor.java:107)
        at com.eplica.waf.security.AuthorizationInterceptor.intercept(AuthorizationInterceptor.java:86)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.eplica.waf.utils.TransactionInterceptor.intercept(TransactionInterceptor.java:52)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:137)
        at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:81)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:115)
        at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:81)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:136)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:100)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.eplica.waf.utils.TimerInterceptor.intercept(TimerInterceptor.java:47)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:113)
        at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:202)
        at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:184)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)


 All   Comments   Change History      Sort Order:
Logi Ragnarsson - [27/Jun/06 05:44 AM ]
Sorry, this report is invalid.

I was in fact using version 2.2.1 and in 2.2.2 at least my suggestion 2 has been implemented with:

if(DispatcherUtils.isPortletSupportActive() && PortletActionContext.isPortletRequest()) {
                        ...
            }

Rainer Hermanns - [27/Jun/06 05:56 AM ]
Yes, that was the fix we added for 2.2.2 :)
Closing this now