[ 
https://issues.apache.org/jira/browse/PB-52?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12462058
 ] 

Matthew Bruzek commented on PB-52:
----------------------------------

Absolute URLs will start with "http://"; or "https://"; because they do not 
depend upon any context path. For example: "http://www.google.com";

Relative URI is a string that starts with a slash ("/") character the 
implementation can then prepend the full path to the string.  For example: 
"/intl/en_ALL/images/logo.gif" the context path could be prepended to create" 
http://www.google.com/intl/en_ALL/images/logo.gif";

The reason I get this exception is because the string from my environment was 
an encoded URL and did not match either of these conditions.  The 
implementation did not know how to handle the encoded string 
"pa.do?_pa=-1088437171&_rid=-507a2aba:10f977651ed:-7fee&.pa=true".

The code in PortletExternalContextImpl.encodeResourceURL(String s) does some 
similar checking for "http" or the slash ("/") but it prepend the slash 
character to strings that fail this check (which I believe to be in error).  
These methods should NOT prepend any characters to the string unless it is 
specifically called out in the specifications.  I would suggest changing 
encodeResourceURL() and encodeActionURL() to do the following for both methods:

If the string parameter starts with "http://"; or "https://"; or "/" then call 
the implementation's encodeURL() method to properly encode the strings that the 
implementation can handle.  Otherwise return the original string as it does not 
need encoding, and would generate an exception if encoding was attempted.

I think this is a better solution than always returning the original string.  
This solution will prevent the exception from occuring in my environment and 
keep the methods working as designed for other possible situations.


> JSF portal bridge attempting to encode URL twice fails
> ------------------------------------------------------
>
>                 Key: PB-52
>                 URL: https://issues.apache.org/jira/browse/PB-52
>             Project: Portals Bridges
>          Issue Type: Bug
>          Components: jsf
>    Affects Versions: 1.0
>         Environment: 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)
>            Reporter: Matthew Bruzek
>         Assigned To: David Sean Taylor
>
> 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.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to