Tapestry 5
  1. Tapestry 5
  2. TAP5-659

In some servlet containers, access to virtual assets can result in a GZIP-related exception

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Blocker Blocker
    • Resolution: Fixed
    • Affects Version/s: 5.1.0.3
    • Fix Version/s: 5.1.0.4
    • Component/s: tapestry-core
    • Labels:
      None

      Description

      It looks like certain characters (I believe slashes) in the path name for the virtual asset are being decoded by the servlet container (this is for Websphere, I've seen a similar problem for Tomcat).

      2009-04-20 11:29:21,006 [WebContainer : 1] DEBUG org.apache.tapestry5.services.TapestryModule.ClientDataEncoder:73 - [ENTER] decodeClientData("H4sIAAAAAAAAAKXQwUoDMRAG4CD04nOIFKHJbktFD JFDz0JWuhRssnsGs3uhMwsbX0mX813cLOwC15aaG/Dny9/wvz8ism3EBcPQohLcaM0ETApMtEF1qb12JJaylxmcqFCREbeB5CfJORh y9NfnrYQ1mC4V5eDZJ1AOK4H9EQJHU9qMJr81W4aEc2JsnNjrbNaiDSFfSPvwzc G4Imj9Umdk8X97d3meLfF4Uc2WwVhEqsGkK2EDT a2zVbr3mg6ed8Gj7fe0Ordw924w9lWPp1bV0LSpYHPuX966TTls1q4GbPnJaY9VV/wHK4JGUkYCAAA=")
      2009-04-20 11:29:21,022 [WebContainer : 1] DEBUG org.apache.tapestry5.services.TapestryModule.ClientDataEncoder:164 - [ FAIL] decodeClientData – java.lang.RuntimeException
      java.lang.RuntimeException: java.util.zip.ZipException: invalid bit length repeat
      at org.apache.tapestry5.internal.services.ClientDataEncoderImpl.decodeClientData(ClientDataEncoderImpl.java:54)
      at Invocation$ClientDataEncoder$decodeClientData$120c4253f59.invokeDelegateMethod(Invocation$ClientDataEncoder$decodeClientData$120c4253f59.java)
      at org.apache.tapestry5.ioc.internal.services.AbstractInvocation.proceed(AbstractInvocation.java:117)
      at org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvice.java:45)
      at org.apache.tapestry5.ioc.internal.services.AbstractInvocation.proceed(AbstractInvocation.java:121)
      at $ClientDataEncoder_120c42536f2.decodeClientData($ClientDataEncoder_120c42536f2.java)
      at $ClientDataEncoder_120c4253666.decodeClientData($ClientDataEncoder_120c4253666.java)
      at org.apache.tapestry5.internal.services.VirtualAssetStreamerImpl.constructVirtualAssetStream(VirtualAssetStreamerImpl.java:161)
      at org.apache.tapestry5.internal.services.VirtualAssetStreamerImpl.getVirtualStream(VirtualAssetStreamerImpl.java:148)
      at org.apache.tapestry5.internal.services.VirtualAssetStreamerImpl.getCompressedVirtualStream(VirtualAssetStreamerImpl.java:112)
      at org.apache.tapestry5.internal.services.VirtualAssetStreamerImpl.getVirtualStream(VirtualAssetStreamerImpl.java:103)
      at org.apache.tapestry5.internal.services.VirtualAssetStreamerImpl.streamVirtualAsset(VirtualAssetStreamerImpl.java:74)
      at $VirtualAssetStreamer_120c425362c.streamVirtualAsset($VirtualAssetStreamer_120c425362c.java)
      at org.apache.tapestry5.internal.services.VirtualAssetDispatcher.dispatch(VirtualAssetDispatcher.java:49)
      at $Dispatcher_120c4253633.dispatch($Dispatcher_120c4253633.java)
      at $Dispatcher_120c4253626.dispatch($Dispatcher_120c4253626.java)
      at org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:250)
      at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
      at $RequestHandler_120c4253627.service($RequestHandler_120c4253627.java)
      at org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:782)
      at $RequestHandler_120c4253627.service($RequestHandler_120c4253627.java)
      at org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:771)
      at $RequestHandler_120c4253627.service($RequestHandler_120c4253627.java)
      at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85)
      at $RequestHandler_120c4253627.service($RequestHandler_120c4253627.java)
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90)
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:81)
      at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103)
      at $RequestHandler_120c4253627.service($RequestHandler_120c4253627.java)
      at $RequestHandler_120c425361d.service($RequestHandler_120c425361d.java)
      at org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:202)
      at com.reged.quest.services.QuestionnaireServiceFilter.service(QuestionnaireServiceFilter.java:34)
      at $HttpServletRequestFilter_120c425361c.service($HttpServletRequestFilter_120c425361c.java)
      at $HttpServletRequestHandler_120c425361f.service($HttpServletRequestHandler_120c425361f.java)
      at com.reged.services.JaasTapestryFilter$RegedPrivilegedAction.run(JaasTapestryFilter.java:72)
      at java.security.AccessController.doPrivileged(AccessController.java:214)
      at javax.security.auth.Subject.doAsPrivileged(Subject.java:645)
      at com.reged.security.AbstractPrivilegedSecurityManager.doAsPrivileged(AbstractPrivilegedSecurityManager.java:74)
      at com.reged.services.JaasTapestryFilter.service(JaasTapestryFilter.java:30)
      at $HttpServletRequestFilter_120c425361b.service($HttpServletRequestFilter_120c425361b.java)
      at $HttpServletRequestHandler_120c425361f.service($HttpServletRequestHandler_120c425361f.java)
      at org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44)
      at $HttpServletRequestHandler_120c425361f.service($HttpServletRequestHandler_120c425361f.java)
      at org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53)
      at $HttpServletRequestHandler_120c425361f.service($HttpServletRequestHandler_120c425361f.java)
      at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
      at $HttpServletRequestFilter_120c4253619.service($HttpServletRequestFilter_120c4253619.java)
      at $HttpServletRequestHandler_120c425361f.service($HttpServletRequestHandler_120c425361f.java)
      at org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:730)
      at $HttpServletRequestHandler_120c425361f.service($HttpServletRequestHandler_120c425361f.java)
      at $HttpServletRequestHandler_120c4253617.service($HttpServletRequestHandler_120c4253617.java)
      at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:127)

        Activity

        Hide
        Howard M. Lewis Ship added a comment -

        http://en.wikipedia.org/wiki/Base64

        This comes back to the issue that different servlet contains either automatically decode URLs (converting '+' to ' ') or leave that to the application. I believe its a grey area. In any case, I'm pretty sure that passing the Base64 character stream through the URLEncoder service will fix this issue.

        Show
        Howard M. Lewis Ship added a comment - http://en.wikipedia.org/wiki/Base64 This comes back to the issue that different servlet contains either automatically decode URLs (converting '+' to ' ') or leave that to the application. I believe its a grey area. In any case, I'm pretty sure that passing the Base64 character stream through the URLEncoder service will fix this issue.

          People

          • Assignee:
            Howard M. Lewis Ship
            Reporter:
            Howard M. Lewis Ship
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development