Uploaded image for project: 'PUBLIC - Liferay Portal Community Edition'
  1. PUBLIC - Liferay Portal Community Edition
  2. LPS-76900

Problems with Struts actions of type json in LR 7.0.4 CE GA5

    Details

    • Type: Bug
    • Status: Closed
    • Resolution: Won't Fix
    • Affects Version/s: 7.0.0 DXP SP6, 7.0.4 CE GA5
    • Fix Version/s: None
    • Labels:
      None
    • Story Points:
      1
    • Fix Priority:
      3
    • OS:
      Ubuntu LTS 16.04, Windows 10
    • JDK:
      Oracle Sun JDK 8, Oracle OpenJDK 8
    • Application Servers:
      Apache Tomcat 8.0.x
    • Browsers:
      Chrome (latest), Firefox (latest)
    • Device Type:
      Desktop

      Description

      We have a large portlet. (It's an eCommerce storefront called KonaKart).  

      It's a Struts2 application and as a portlet it uses the struts portlet bridge.

      We deploy it to Liferay as a WAR.

      It has been working fine up until GA5.  

      With Liferay 7.0.4 CE GA5, whenever we use a Struts action of type "json" we get an error. Here's an example action:

       <action name="AddToCartFromProdId" class="com.konakart.actions.AddToCartFromProdIdAction">

                                    <result type="json"/>

       </action>

       

      When we call it we get the following exception

       

      07:25:51,506 ERROR [http-nio-8080-exec-10][PortletServlet:112] javax.portlet.PortletException: Error executing action AddToCartFromProdId
      
      javax.portlet.PortletException: Error executing action AddToCartFromProdId
      
              at org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher.serviceAction(Jsr168Dispatcher.java:469)
      
              at org.apache.struts2.portlet.dispatcher.Jsr286Dispatcher.serveResource(Jsr286Dispatcher.java:50)
      
              at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:122)
      
              at com.liferay.portlet.ScriptDataPortletFilter.doFilter(ScriptDataPortletFilter.java:85)
      
              at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:116)
      
              at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:71)
      
              at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:108)
      
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
      
              at com.liferay.portal.osgi.web.wab.extender.internal.adapter.ServletExceptionAdapter.service(ServletExceptionAdapter.java:76)
      
              at org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.service(EndpointRegistration.java:153)
      
              at org.eclipse.equinox.http.servlet.internal.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:50)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:119)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:99)
      
              at com.liferay.portal.osgi.web.wab.extender.internal.adapter.FilterExceptionAdapter.doFilter(FilterExceptionAdapter.java:46)
      
              at org.eclipse.equinox.http.servlet.internal.registration.FilterRegistration.doFilter(FilterRegistration.java:121)
      
              at org.eclipse.equinox.http.servlet.internal.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:45)
      
              at org.eclipse.equinox.http.servlet.internal.servlet.ResponseStateHandler.processRequest(ResponseStateHandler.java:70)
      
              at org.eclipse.equinox.http.servlet.internal.context.DispatchTargets.doDispatch(DispatchTargets.java:117)
      
              at org.eclipse.equinox.http.servlet.internal.servlet.RequestDispatcherAdaptor.forward(RequestDispatcherAdaptor.java:40)
      
              at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:528)
      
              at com.liferay.portlet.InvokerPortletImpl.invokeResource(InvokerPortletImpl.java:631)
      
              at com.liferay.portlet.InvokerPortletImpl.serveResource(InvokerPortletImpl.java:468)
      
              at com.liferay.portal.monitoring.internal.portlet.MonitoringInvokerPortlet.serveResource(MonitoringInvokerPortlet.java:303)
      
              at com.liferay.portlet.PortletContainerImpl._serveResource(PortletContainerImpl.java:839)
      
              at com.liferay.portlet.PortletContainerImpl.serveResource(PortletContainerImpl.java:176)
      
              at com.liferay.portlet.SecurityPortletContainerWrapper.serveResource(SecurityPortletContainerWrapper.java:165)
      
              at com.liferay.portlet.RestrictPortletContainerWrapper.serveResource(RestrictPortletContainerWrapper.java:173)
      
              at com.liferay.portal.kernel.portlet.PortletContainerUtil.serveResource(PortletContainerUtil.java:169)
      
              at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:303)
      
              at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:159)
      
              at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
      
              at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
      
              at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:170)
      
              at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
      
              at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
      
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
      
              at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:606)
      
              at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:583)
      
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
      
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
      
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
      
              at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
      
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
      
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:119)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
      
              at com.liferay.portal.servlet.filters.uploadservletrequest.UploadServletRequestFilter.processFilter(UploadServletRequestFilter.java:93)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
      
              at com.liferay.portal.servlet.filters.gzip.GZipFilter.processFilter(GZipFilter.java:125)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
      
              at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:337)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
      
              at com.liferay.portal.servlet.filters.jsoncontenttype.JSONContentTypeFilter.processFilter(JSONContentTypeFilter.java:42)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
      
              at com.liferay.portal.sharepoint.SharepointFilter.processFilter(SharepointFilter.java:88)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
      
              at com.liferay.portal.monitoring.internal.servlet.filter.MonitoringFilter.processFilter(MonitoringFilter.java:181)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:188)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:188)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
      
              at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
      
              at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
      
              at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
      
              at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
      
              at com.liferay.portal.servlet.filters.urlrewrite.UrlRewriteFilter.processFilter(UrlRewriteFilter.java:65)
      
              at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:168)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:168)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:188)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
      
              at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:99)
      
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
      
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
      
              at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
      
              at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
      
              at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
      
              at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
      
              at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
      
              at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
      
              at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
      
              at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
      
              at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
      
              at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
      
              at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
      
              at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
      
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      
              at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      
              at java.lang.Thread.run(Thread.java:745)
      
      Caused by: java.lang.IllegalStateException: Not allowed in render phase
      
              at org.apache.struts2.portlet.servlet.PortletServletRequest.getReader(PortletServletRequest.java:533)
      
              at org.apache.struts2.json.JSONInterceptor.intercept(JSONInterceptor.java:101)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
      
              at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
      
              at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
      
              at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
      
              at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
      
              at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
      
              at org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher.serviceAction(Jsr168Dispatcher.java:459)
      
              ... 111 more  
      

        Attachments

          Activity

            People

            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:
                Days since last comment:
                1 year, 25 weeks, 2 days ago

                Packages

                Version Package