You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-user@portals.apache.org by Antony Stubbs <an...@gmail.com> on 2008/10/19 13:02:46 UTC

StringIndexOutOfBoundsException on apache bridges

I'm having difficulty getting my helloworld portlet running on pluto, with
apache bridges.

I am getting StringIndexOutOfBoundsException on
PortletWindowUtils#getWindowId

portletWindowId = nameRef[0].substring("javax.portlet.p.".length(),
nameRef[0].indexOf('?'));

throws StringIndexOutOfBoundsException, because the value of nameRef[0]
comes back just as PORTLET_WINDOW_ID

i.e. "org.apache.portals.bridges.util.portlet_window_id" not
"javax.portlet.p.*" as the code implies


getPortletWindowId for session: CC465B39BA9199712DEEF690F90AE2C2 (thread:
15)
 no portletWindowId yet - going to derive it.
17/10/2008 15:44:23 org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet default threw exception
java.lang.StringIndexOutOfBoundsException: String index out of range: -17


I'm not sure but I discussed it here and it may be related:

https://issues.apache.org/jira/browse/PB-84 CCE in
PortletWindowUtils.getPortletWindowId

Does the Bridges windowId code not work correctly when running on portlet
2.0 perhaps? I know sessio0n isolation is now an optional feature of portlet
2.0 - perhaps that's causing problems.

-----
___________________________

http://stubbisms.wordpress.com http://stubbisms.wordpress.com 
-- 
View this message in context: http://www.nabble.com/StringIndexOutOfBoundsException-on-apache-bridges-tp20055052p20055052.html
Sent from the Pluto - User mailing list archive at Nabble.com.

Re: StringIndexOutOfBoundsException on apache bridges

Posted by Antony Stubbs <an...@gmail.com>.
Hi Ate,

Thanks for the quick response! Interesting... Curious to see what changes
you come up with.

Yes, it does appear that Bridges depends on it being done way of the spec.

/me goes of to read PLT.10.4.3...


Ate Douma wrote:
> 
> Hi Antony,
> 
> I think you might have uncovered a serious bug in
> PortletSession.setAttribute(name,value) here.
> I'm with you that *by the spec* it should store the attribute under
> PORTLET_SCOPE, not APPLICATION_SCOPE.
> In the "old' Pluto 1.0.1 this is also what is done, but in the new Pluto
> 2.0 this seems to incorrectly changed when the Portlet request is 
> "included" or "forwarded" (e.g. about always).
> I've traced this back to commit r577681 which was a merge of some patches
> brought in by people working on the Portlet 2.0 spec implementation.
> 
> I *think* this might be done based on an incorrect interpretation of
>    PLT.10.4.3 - Runtime Option javax.portlet.servletDefaultSessionScope
> 
> I'm going to further investigate this as it definitely does seem wrongly
> implemented and will try to fix this ASAP, both in trunk and in the 
> spi-refactoring branch.
> 
> Regards,
> 
> Ate
> 
> 
> Antony Stubbs wrote:
>> Ok, trying to track this down, think I've found something.
>> 
>> Why does the Pluto PorletSessionImpl#setAttribute use application shop 
>> in the following situation? This really needs explanation ala javadoc 
>> etc. Because in the spec, it clearly says that setAttribute should use 
>> PORTLET_SCOPE as it does in the else block. This seems to be cause the 
>> session attributes set in getWindowId in the Apache Bridges to fail in 
>> detecting the container assigned window id, because of course the 
>> attribute gets put into APPLICATION_SCOPE and a window id is never
>> created.
>> 
>>     public void setAttribute(String name, Object value, int scope) {
>>     	ArgumentUtility.validateNotNull("attributeName", name);
>>     	if (scope == PortletSession.APPLICATION_SCOPE) {
>>     		httpSession.setAttribute(name, value);
>>     	} else {
>>     		httpSession.setAttribute(createPortletScopedId(name),  value);
>>     	}
>>     }
>> 
>> Ok, yup, changing the setAttribute calls from 
>> PortletWindowUtils#getWindowId to call the explicit version of 
>> setAttribute(name,value,scope) and pass PortletSession.PORTLET_SCOPE 
>> lets the Apache Bridges function work correctly.
>> 
>> I will continue to investigate. Can anyone offer an explanation? The 
>> Apache Bridges issue is again, here: 
>> https://issues.apache.org/jira/browse/PB-84
>> 
>>     Antony Stubbs wrote:
>>     I'm having difficulty getting my helloworld portlet running on
>>     pluto, with apache bridges. I am getting
>>     StringIndexOutOfBoundsException on PortletWindowUtils#getWindowId
>> 
>>     portletWindowId = nameRef[0].substring("javax.portlet.p.".length(),
>>     nameRef[0].indexOf('?'));
>> 
>>     throws StringIndexOutOfBoundsException, because the value of
>>     nameRef[0] comes back just as PORTLET_WINDOW_ID
>> 
>>     i.e. "org.apache.portals.bridges.util.portlet_window_id" not
>>     "javax.portlet.p.*" as the code implies
>> 
>>     getPortletWindowId for session: CC465B39BA9199712DEEF690F90AE2C2
>> (thread: 15)
>>      no portletWindowId yet - going to derive it.
>>     17/10/2008 15:44:23 org.apache.catalina.core.ApplicationDispatcher
>> invoke
>>     SEVERE: Servlet.service() for servlet default threw exception
>>     java.lang.StringIndexOutOfBoundsException: String index out of range:
>> -17
>> 
>>     I'm not sure but I discussed it here and it may be related:
>>     https://issues.apache.org/jira/browse/PB-84 CCE in
>>     PortletWindowUtils.getPortletWindowId
>> 
>>     Does the Bridges windowId code not work correctly when running on
>>     portlet 2.0 perhaps? I know sessio0n isolation is now an optional
>>     feature of portlet 2.0 - perhaps that's causing problems.
>> 
>> ___________________________
>> http://stubbisms.wordpress.com
>> 
>> ------------------------------------------------------------------------
>> View this message in context: Re: StringIndexOutOfBoundsException on 
>> apache bridges 
>> <http://www.nabble.com/StringIndexOutOfBoundsException-on-apache-bridges-tp20055052p20079383.html>
>> Sent from the Pluto - User mailing list archive 
>> <http://www.nabble.com/Pluto---User-f200.html> at Nabble.com.
> 
> 
> 


-----
___________________________

http://stubbisms.wordpress.com http://stubbisms.wordpress.com 
-- 
View this message in context: http://www.nabble.com/StringIndexOutOfBoundsException-on-apache-bridges-tp20055052p20080562.html
Sent from the Pluto - User mailing list archive at Nabble.com.


Re: StringIndexOutOfBoundsException on apache bridges

Posted by Ate Douma <at...@douma.nu>.
Hi Antony,

I think you might have uncovered a serious bug in PortletSession.setAttribute(name,value) here.
I'm with you that *by the spec* it should store the attribute under PORTLET_SCOPE, not APPLICATION_SCOPE.
In the "old' Pluto 1.0.1 this is also what is done, but in the new Pluto 2.0 this seems to incorrectly changed when the Portlet request is 
"included" or "forwarded" (e.g. about always).
I've traced this back to commit r577681 which was a merge of some patches brought in by people working on the Portlet 2.0 spec implementation.

I *think* this might be done based on an incorrect interpretation of
   PLT.10.4.3 - Runtime Option javax.portlet.servletDefaultSessionScope

I'm going to further investigate this as it definitely does seem wrongly implemented and will try to fix this ASAP, both in trunk and in the 
spi-refactoring branch.

Regards,

Ate


Antony Stubbs wrote:
> Ok, trying to track this down, think I've found something.
> 
> Why does the Pluto PorletSessionImpl#setAttribute use application shop 
> in the following situation? This really needs explanation ala javadoc 
> etc. Because in the spec, it clearly says that setAttribute should use 
> PORTLET_SCOPE as it does in the else block. This seems to be cause the 
> session attributes set in getWindowId in the Apache Bridges to fail in 
> detecting the container assigned window id, because of course the 
> attribute gets put into APPLICATION_SCOPE and a window id is never created.
> 
>     public void setAttribute(String name, Object value, int scope) {
>     	ArgumentUtility.validateNotNull("attributeName", name);
>     	if (scope == PortletSession.APPLICATION_SCOPE) {
>     		httpSession.setAttribute(name, value);
>     	} else {
>     		httpSession.setAttribute(createPortletScopedId(name),  value);
>     	}
>     }
> 
> Ok, yup, changing the setAttribute calls from 
> PortletWindowUtils#getWindowId to call the explicit version of 
> setAttribute(name,value,scope) and pass PortletSession.PORTLET_SCOPE 
> lets the Apache Bridges function work correctly.
> 
> I will continue to investigate. Can anyone offer an explanation? The 
> Apache Bridges issue is again, here: 
> https://issues.apache.org/jira/browse/PB-84
> 
>     Antony Stubbs wrote:
>     I'm having difficulty getting my helloworld portlet running on
>     pluto, with apache bridges. I am getting
>     StringIndexOutOfBoundsException on PortletWindowUtils#getWindowId
> 
>     portletWindowId = nameRef[0].substring("javax.portlet.p.".length(),
>     nameRef[0].indexOf('?'));
> 
>     throws StringIndexOutOfBoundsException, because the value of
>     nameRef[0] comes back just as PORTLET_WINDOW_ID
> 
>     i.e. "org.apache.portals.bridges.util.portlet_window_id" not
>     "javax.portlet.p.*" as the code implies
> 
>     getPortletWindowId for session: CC465B39BA9199712DEEF690F90AE2C2 (thread: 15)
>      no portletWindowId yet - going to derive it.
>     17/10/2008 15:44:23 org.apache.catalina.core.ApplicationDispatcher invoke
>     SEVERE: Servlet.service() for servlet default threw exception
>     java.lang.StringIndexOutOfBoundsException: String index out of range: -17
> 
>     I'm not sure but I discussed it here and it may be related:
>     https://issues.apache.org/jira/browse/PB-84 CCE in
>     PortletWindowUtils.getPortletWindowId
> 
>     Does the Bridges windowId code not work correctly when running on
>     portlet 2.0 perhaps? I know sessio0n isolation is now an optional
>     feature of portlet 2.0 - perhaps that's causing problems.
> 
> ___________________________
> http://stubbisms.wordpress.com
> 
> ------------------------------------------------------------------------
> View this message in context: Re: StringIndexOutOfBoundsException on 
> apache bridges 
> <http://www.nabble.com/StringIndexOutOfBoundsException-on-apache-bridges-tp20055052p20079383.html>
> Sent from the Pluto - User mailing list archive 
> <http://www.nabble.com/Pluto---User-f200.html> at Nabble.com.


Re: StringIndexOutOfBoundsException on apache bridges

Posted by Antony Stubbs <an...@gmail.com>.
Pluto issue:
https://issues.apache.org/jira/browse/PLUTO-516
https://issues.apache.org/jira/browse/PLUTO-516  - Pluto's
PorletSessionImpl#setAttribute sometimes sets var into APPLICATION_SCOPE
without explanation


Antony Stubbs wrote:
> 
> Ok, trying to track this down, think I've found something.
> 
> 

> Why does the Pluto PorletSessionImpl#setAttribute use application shop in
> the following situation? This really needs explanation ala javadoc etc.
> Because in the spec, it clearly says that setAttribute should use
> PORTLET_SCOPE as it does in the else block. This seems to be cause the
> session attributes set in getWindowId in the Apache Bridges to fail in
> detecting the container assigned window id, because of course the
> attribute gets put into APPLICATION_SCOPE and a window id is never
> created.
> 
> 

>     public void setAttribute(String name, Object value, int scope) {
>     	ArgumentUtility.validateNotNull("attributeName", name);
>     	if (scope == PortletSession.APPLICATION_SCOPE) {
>     		httpSession.setAttribute(name, value);
>     	} else {
>     		httpSession.setAttribute(createPortletScopedId(name),  value);
>     	}
>     }
> 

> 

> Ok, yup, changing the setAttribute calls from
> PortletWindowUtils#getWindowId to call the explicit version of
> setAttribute(name,value,scope) and pass PortletSession.PORTLET_SCOPE lets
> the Apache Bridges function work correctly.
> 

> I will continue to investigate. Can anyone offer an explanation?
> The Apache Bridges issue is again, here:
> https://issues.apache.org/jira/browse/PB-84
> 
> 
> Antony Stubbs wrote:
>> 
>> I'm having difficulty getting my helloworld portlet running on pluto,
>> with apache bridges.
>> 
>> I am getting StringIndexOutOfBoundsException on
>> PortletWindowUtils#getWindowId
>> 

>> portletWindowId = nameRef[0].substring("javax.portlet.p.".length(),
>> nameRef[0].indexOf('?'));
>> 

>> throws StringIndexOutOfBoundsException, because the value of nameRef[0]
>> comes back just as PORTLET_WINDOW_ID
>> 

>> i.e. "org.apache.portals.bridges.util.portlet_window_id" not
>> "javax.portlet.p.*" as the code implies
>> 
>> 

>> getPortletWindowId for session: CC465B39BA9199712DEEF690F90AE2C2 (thread:
>> 15)
>>  no portletWindowId yet - going to derive it.
>> 17/10/2008 15:44:23 org.apache.catalina.core.ApplicationDispatcher invoke
>> SEVERE: Servlet.service() for servlet default threw exception
>> java.lang.StringIndexOutOfBoundsException: String index out of range: -17
>> 

>> 

>> I'm not sure but I discussed it here and it may be related:

>> https://issues.apache.org/jira/browse/PB-84 CCE in
>> PortletWindowUtils.getPortletWindowId
>> 

>> Does the Bridges windowId code not work correctly when running on portlet
>> 2.0 perhaps? I know sessio0n isolation is now an optional feature of
>> portlet 2.0 - perhaps that's causing problems.
>> 
> 
> 


-----
___________________________

http://stubbisms.wordpress.com http://stubbisms.wordpress.com 
-- 
View this message in context: http://www.nabble.com/StringIndexOutOfBoundsException-on-apache-bridges-tp20055052p20079501.html
Sent from the Pluto - User mailing list archive at Nabble.com.

Re: StringIndexOutOfBoundsException on apache bridges

Posted by Antony Stubbs <an...@gmail.com>.
Ok, trying to track this down, think I've found something.


Why does the Pluto PorletSessionImpl#setAttribute use application shop in
the following situation? This really needs explanation ala javadoc etc.
Because in the spec, it clearly says that setAttribute should use
PORTLET_SCOPE as it does in the else block. This seems to be cause the
session attributes set in getWindowId in the Apache Bridges to fail in
detecting the container assigned window id, because of course the attribute
gets put into APPLICATION_SCOPE and a window id is never created.


    public void setAttribute(String name, Object value, int scope) {
    	ArgumentUtility.validateNotNull("attributeName", name);
    	if (scope == PortletSession.APPLICATION_SCOPE) {
    		httpSession.setAttribute(name, value);
    	} else {
    		httpSession.setAttribute(createPortletScopedId(name),  value);
    	}
    }


Ok, yup, changing the setAttribute calls from PortletWindowUtils#getWindowId
to call the explicit version of setAttribute(name,value,scope) and pass
PortletSession.PORTLET_SCOPE lets the Apache Bridges function work
correctly.

I will continue to investigate. Can anyone offer an explanation?
The Apache Bridges issue is again, here:
https://issues.apache.org/jira/browse/PB-84


Antony Stubbs wrote:
> 
> I'm having difficulty getting my helloworld portlet running on pluto, with
> apache bridges.
> 
> I am getting StringIndexOutOfBoundsException on
> PortletWindowUtils#getWindowId
> 

> portletWindowId = nameRef[0].substring("javax.portlet.p.".length(),
> nameRef[0].indexOf('?'));
> 

> throws StringIndexOutOfBoundsException, because the value of nameRef[0]
> comes back just as PORTLET_WINDOW_ID
> 

> i.e. "org.apache.portals.bridges.util.portlet_window_id" not
> "javax.portlet.p.*" as the code implies
> 
> 

> getPortletWindowId for session: CC465B39BA9199712DEEF690F90AE2C2 (thread:
> 15)
>  no portletWindowId yet - going to derive it.
> 17/10/2008 15:44:23 org.apache.catalina.core.ApplicationDispatcher invoke
> SEVERE: Servlet.service() for servlet default threw exception
> java.lang.StringIndexOutOfBoundsException: String index out of range: -17
> 

> 

> I'm not sure but I discussed it here and it may be related:

> https://issues.apache.org/jira/browse/PB-84 CCE in
> PortletWindowUtils.getPortletWindowId
> 

> Does the Bridges windowId code not work correctly when running on portlet
> 2.0 perhaps? I know sessio0n isolation is now an optional feature of
> portlet 2.0 - perhaps that's causing problems.
> 


-----
___________________________

http://stubbisms.wordpress.com http://stubbisms.wordpress.com 
-- 
View this message in context: http://www.nabble.com/StringIndexOutOfBoundsException-on-apache-bridges-tp20055052p20079383.html
Sent from the Pluto - User mailing list archive at Nabble.com.