[ http://issues.apache.org/jira/browse/PB-52?page=comments#action_12461112 
] 
            
Matthew Bruzek commented on PB-52:
----------------------------------

After further thought and reading specification and Javadoc, perhaps we should 
be more careful about this fix:

The JSF 1.2 specification ( 
http://jcp.org/aboutJava/communityprocess/final/jsr252/index.html ) tells us 
that encodeActionURL() and encodeResourceURL() return a URL that correctly 
identifies the resource, and to look to the Javadoc for more details.  In my 
environment the string passed in to encodeActionURL() already identified a 
valid resource and needed no further encoding.

The JSF Javadoc ( 
http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/javax/faces/context/ExternalContext.html
 ) for both encodeActionURL() and encodeResourceURL() instructs portlet 
implementations to return the value returned by the 
javax.portlet.PortletResponse method encodeURL(url), which the original code 
was doing correctly.  However this was causing an IllegalArgumentException with 
the Websphere implementation because the URL was already encoded.  I looked 
more closely at the exception, and it was because "only absolute URLs or full 
path URIs are allowed" because the string didn't start with "/" (the slash 
character), or "http://"; or "https://";.

Perhaps a better solution (for both methods) would be to only encode the string 
if the parameter is an absolute URL or relative URI.  In the other case, return 
the original parameter.  This would fix both cases, unless in your tests 
encodeActionURL() was being called with an encoded URI that was absolute or 
relative.  In my environment encodeActionURL() is always called with an encoded 
URL that is neither absolute nor relative.


> JSF portal bridge attempting to encode URL twice fails
> ------------------------------------------------------
>
>                 Key: PB-52
>                 URL: http://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: 
http://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