[cas-dev] NullPointerException in externalRedirect endstate
Renaud Bruyeron
bruyeron at fullsix.com
Fri Jun 23 05:04:34 EDT 2006
I think I found the reason why I don't get more info from the logs:
http://developer.ja-sig.org/source/viewrep/jasig/cas3/core/src/main/java/org/jasig/cas/web/flow/GenerateServiceTicketAction.java?r=1.4
It does this:
try {
// find TGT from registry
} catch(TicketException e){
if(gateway)
return gateway();
}
It does not log the ticketexception - I think the scenario that triggers
the problem below is that my TGT is not in the registry for some reason
(CAS restart maybe?). This triggers the gateway transition in my case.
However the code above is missing this in the finally clause:
ContextUtils.addAttribute(context, WebConstants.SERVICE, service);
Indeed, if I gateway, the webflow skips the warnAction, and the
warnAction is where the service is stored in the requestScope. So the
scenario is this:
1) CAS restart after I got a TGT
2) start a CAS roundtrip with gateway=true
3) GenerateServiceTicketAction fails silently, and returns the gateway
resolution
4) the webflow skips warnAction
5) requestScope.service is null -> NPE
I will create an issue in JIRA with a patch.
- Renaud
Scott Battaglia wrote:
> Renaud,
>
> Can you consistently reproduce it? If so, what are the Urls? Your
> assessment that requestScope.service should not be null seems correct.
>
> -Scott
>
> Renaud Bruyeron wrote:
>> Hi,
>>
>> I am running into a problem with the "gateway" mode of CAS 3.0.5.
>> The client webapp always triggers a "gateway" roundtrip with CAS if it
>> knows that its identity info is stale (for example when the HttpSession
>> is created) so it can get the new identity.
>>
>> However, it triggers a NPE in some conditions. Below is an extract of
>> the logs (in DEBUG) which shows the execution of the webflow, and the
>> stacktrace when the externalRedirect endstate is reached:
>>
>> 2006-06-21 18:46:52,559 DEBUG
>> [org.jasig.cas.web.flow.AutomaticCookiePathSetterAction] - <Action
>> 'AutomaticCookiePathSetterAction' beginning execution>
>> 2006-06-21 18:46:52,559 DEBUG
>> [org.jasig.cas.web.flow.AutomaticCookiePathSetterAction] - <Action
>> 'AutomaticCookiePathSetterAction' completed execution; result is 'success'>
>> 2006-06-21 18:46:52,559 DEBUG
>> [org.jasig.cas.web.flow.TicketGrantingTicketExistsAction] - <Action
>> 'TicketGrantingTicketExistsAction' beginning execution>
>> 2006-06-21 18:46:52,560 DEBUG
>> [org.jasig.cas.web.flow.TicketGrantingTicketExistsAction] - <Action
>> 'TicketGrantingTicketExistsAction' completed execution; result is
>> 'ticketGrantingTicketExists'>
>> 2006-06-21 18:46:52,560 DEBUG
>> [org.jasig.cas.web.flow.HasServiceCheckAction] - <Action
>> 'HasServiceCheckAction' beginning execution>
>> 2006-06-21 18:46:52,560 DEBUG
>> [org.jasig.cas.web.flow.HasServiceCheckAction] - <Action
>> 'HasServiceCheckAction' completed execution; result is 'hasService'>
>> 2006-06-21 18:46:52,561 DEBUG
>> [org.jasig.cas.web.flow.RenewRequestCheckAction] - <Action
>> 'RenewRequestCheckAction' beginning execution>
>> 2006-06-21 18:46:52,561 DEBUG
>> [org.jasig.cas.web.flow.RenewRequestCheckAction] - <Action
>> 'RenewRequestCheckAction' completed execution; result is
>> 'generateServiceTicket'>
>> 2006-06-21 18:46:52,561 DEBUG
>> [org.jasig.cas.web.flow.GenerateServiceTicketAction] - <Action
>> 'GenerateServiceTicketAction' beginning execution>
>> 2006-06-21 18:46:52,562 DEBUG
>> [org.jasig.cas.ticket.registry.DefaultTicketRegistry] - <Attempting to
>> retrieve ticket [TGT-3-0Vw02NvOVnLcK2DHQ4qElTfw641BV1nasgK-50]>
>> 2006-06-21 18:46:52,562 DEBUG
>> [org.jasig.cas.web.flow.GenerateServiceTicketAction] - <Action
>> 'GenerateServiceTicketAction' completed execution; result is 'gateway'>
>> 2006-06-21 18:46:52,563 ERROR
>> [org.apache.catalina.core.ContainerBase.[Catalina].[xxxxx.f6.fr].[/cas].[cas]]
>> - <Servlet.service() for servlet cas threw exception>
>> java.lang.NullPointerException: target is null for method indexOf
>> at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:821)
>> at ognl.ASTMethod.getValueBody(ASTMethod.java:75)
>> at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
>> at ognl.SimpleNode.getValue(SimpleNode.java:210)
>> at ognl.ASTChain.getValueBody(ASTChain.java:109)
>> at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
>> at ognl.SimpleNode.getValue(SimpleNode.java:210)
>> at ognl.ASTNotEq.getValueBody(ASTNotEq.java:49)
>> at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
>> at ognl.SimpleNode.getValue(SimpleNode.java:210)
>> at ognl.ASTTest.getValueBody(ASTTest.java:49)
>> at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
>> at ognl.SimpleNode.getValue(SimpleNode.java:210)
>> at ognl.Ognl.getValue(Ognl.java:333)
>> at ognl.Ognl.getValue(Ognl.java:310)
>> at
>> org.springframework.binding.expression.support.OgnlExpression.evaluateAgainst(OgnlExpression.java:60)
>> at
>> org.springframework.binding.expression.support.CompositeStringExpression.evaluateAgainst(CompositeStringExpression.java:33)
>> at
>> org.springframework.webflow.support.ExternalRedirectSelector.makeSelection(ExternalRedirectSelector.java:73)
>> at org.springframework.webflow.EndState.doEnter(EndState.java:127)
>> at org.springframework.webflow.State.enter(State.java:192)
>> at
>> org.springframework.webflow.Transition.execute(Transition.java:216)
>> at
>> org.springframework.webflow.TransitionableState.onEvent(TransitionableState.java:80)
>>
>> My guess is that ${requestScope.service} is null, even though it should
>> not be since hasServiceCheckAction returned "hasService".
>> Before I go digging inside webflow and CAS, do you have any idea on what
>> could be the problem?
>>
>> - Renaud
>>
>> _______________________________________________
>> cas-dev mailing list
>> cas-dev at tp.its.yale.edu
>> http://tp.its.yale.edu/mailman/listinfo/cas-dev
>>
More information about the cas-dev
mailing list