Uploaded image for project: 'Portals Bridges (Retired)'
  1. Portals Bridges (Retired)
  2. PB-52

JSF portal bridge attempting to encode URL twice fails

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.0
    • None
    • jsf
    • None
    • Sun JSF Reference Implementation version 1.2 (jsf-impl.jar)
      Websphere portlet container version 6.1.0
      Apache MyFaces JSF portal bridge version 1.0 (portals-bridges-jsf-1.0.jar)

    Description

      I evaluating the MyFaces portlet bridge with a sample JSF portal app and I ran into a problem. The portlet worked with the Sun portlet bridge, but does not even complete the render phase when I try to use the MyFaces portlet bridge.

      The exception I am seeing is:

      javax.servlet.ServletException: only absolute URLs or full path URIs are allowed

      Caused by: java.lang.IllegalArgumentException: only absolute URLs or full path URIs are allowed

      at com.ibm.ws.portletcontainer.core.impl.PortletResponseImpl.encodeURL(PortletResponseImpl.java:143)
      at org.apache.portals.bridges.jsf.PortletExternalContextImpl.encodeActionURL(PortletExternalContextImpl.java)

      I hooked up a remote debugger to see what was happening. The String URL that is passed into PortletExternalContextImpl is: pa.do?_pa=-1088437171&_rid=-507a2aba:10f977651ed:-7fee&.pa=true
      As you can see the URL is already encoded and the encodeActionURL( String ) method attempts to call this.portletResponse.encodeURL(s). The PortletResponse tries to encode the string URL again, leading to the Exception.

      I tracked down the difference in Sun's version of ExternalContextImpl. I found a Sun portlet bridge bug # 6243708 that addresses the same problem of double encoding the value from the portlet environment. The Sun portlet bridge fixed this bug in their com.sun.faces.portlet.ExternalContextImpl.encodeActionURL( String ) method to return the string url instead of attempting to encode it again.

      I suggest that the PortletExternalContextImpl will always get portal encoded URL strings, and should return the string passed to it to avoid this Exceptional case.

      Attachments

        Activity

          People

            taylor David Sean Taylor
            mbruzek Matthew Bruzek
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: