I substituted the AuthenticationContextProvider with the ContextManager as
proposed by you, but unfortunately I still get a NullPointerException.

the stacktrace is:

java.lang.NullPointerException
        at
org.apache.cocoon.components.ContextHelper.getRequest(ContextHelper.java:88)
        at
org.apache.cocoon.webapps.session.components.DefaultContextManager.getSession(DefaultContextManager.java:113)
        at
org.apache.cocoon.webapps.session.components.DefaultContextManager.existsContext(DefaultContextManager.java:337)
        at archivesystem.roles.GetRolesAction.act(GetRolesAction.java:60)
....

The exception in my Action occurs in this
line:

if(contextManager.existsContext(AuthenticationConstants.SESSION_CONTEXT_NAME))


This time the problem seems to be the context object in
DefaultContextManager, which seems to be null.

What I've done wrong?

Is it a good idea to implement the initializable interface and intitialize
the DefaultContextManager there?

Here's my changed source code:
--------------------------------------------------------------------

public class GetRolesAction extends AbstractAction implements ThreadSafe,
Initializable{
        
        protected ContextManager contextManager; 

        public void initialize() throws Exception {
                contextManager = new DefaultContextManager();
        }

        
        public Map act(
                Redirector redirector,
                SourceResolver sourceResolver,
                Map objectModel,
                String src,
                Parameters parameters)
                throws Exception {
                        
                Map map = null;
                
                //check parameter
                final String project = parameters.getParameter("project");
                if(project == null){
                        throw new ProcessingException("GetRolesAction requires the 
parameter
'project'.");
                }
                if (contextManager == null){
                        throw new NullPointerException("Can't get contextManager.");
                }
                SessionContext sessionContext =
null;
                
                
if(contextManager.existsContext(AuthenticationConstants.SESSION_CONTEXT_NAME)){

                        sessionContext =
contextManager.getContext(AuthenticationConstants.SESSION_CONTEXT_NAME);
                }               
                else{
                                        throw new NullPointerException("Can't get 
sessionContext");
                }
                
                map = new HashMap(3);
                //check roles
                if
(sessionContext.getSingleNode("authentication/rights/projects/[EMAIL 
PROTECTED]"+project+"]/admin")!=null)
                        map.put("admin","true");
                else
                        map.put("admin","false");
                
                 /*......*/
                }

}

--------------------------------------------------------------------


Thanks a lot for your help in advance,

Regards,

Stephanie




> You should access the context using the ContextManager (in the session
> block). The provider classes are internal "plugins" for the context
> manager to make such custom contexts, like the authentication context,
> available.
> 
> HTH
> Carsten 
> 
> > -----Original Message-----
> > From: Stephanie Zohner [mailto:[EMAIL PROTECTED] 
> > Sent: Monday, July 19, 2004 2:34 PM
> > To: [EMAIL PROTECTED]
> > Subject: HELP! Custom Action using AuthenticationContext
> > 
> > 
> > Hi all,
> > 
> > 
> > Sorry for double posting but I got no anwers in the users 
> > list, so I hope that one of you java gurus can help me.
> > 
> > 
> > I get a NullPointerException in my GetRolesAction.
> > 
> > With my action I want to make the user roles available to the 
> > sitemap. The roles are stored in the Authentication Context. 
> > 
> > All I want to do is read out the roles from the 
> > Authentication context and put it in the map that is returned 
> > to the sitemap.
> > 
> > However I get a NullPointerException when retrieving the 
> > authentication context.
> > I "followed" the exception to the Class 
> > AuthenticationContextProvider. I guess the problem is that 
> > the ServiceManager is not initialized, but is null.
> > 
> > How can I make my Code working? Do I have to call the 
> > service() method of the AuthenticationContextProvider to set 
> > the serviceManager instance??
> > 
> > Thanks alot for bringing light into my darkness,
> > 
> > Regards,
> > 
> > Stephanie
> > 
> > P.S.: Code and Exception Text see below:
> > 
> > ______________________________________________________________
> > __________
> > 
> > public class GetRolesAction extends AbstractAction implements 
> > ThreadSafe, Initializable{
> >     
> >     protected AuthenticationContextProvider contextProvider; 
> > 
> >     public void initialize() throws Exception {
> >             contextProvider = new AuthenticationContextProvider();
> >     }
> > 
> >     
> >     public Map act(
> >             Redirector redirector,
> >             SourceResolver sourceResolver,
> >             Map objectModel,
> >             String src,
> >             Parameters parameters)
> >             throws Exception {
> >                     
> >             Map map = null;
> >             
> >             //check parameter
> >             final String project = 
> > parameters.getParameter("project");
> >             if(project == null){
> >                     throw new 
> > ProcessingException("GetRolesAction requires the parameter 
> > 'project'.");
> >             }
> >             if (contextProvider == null){
> >                     throw new NullPointerException("Can't 
> > get contextProvider.");
> >             }
> >             AuthenticationContext
> > sessionContext
> > =
> > null;
> >             
> >             
> > if(contextProvider.existsSessionContext(AuthenticationConstant
> > s.SESSION_CONTEXT_NAME)){
> > 
> >                     sessionContext
> > =
> > (AuthenticationContext)
> > contextProvider.getSessionContext(AuthenticationConstants.SESS
> > ION_CONTEXT_NAME);
> >             }               
> >             else{
> >                                     throw new 
> > NullPointerException("Can't get sessionContext");
> >             }
> >             
> >             map = new
> > HashMap(3);
> >             //check
> > roles
> >             if
> > (sessionContext.getSingleNode("authentication/rights/projects/
> > [EMAIL PROTECTED]"+project+"]/admin")!=null)
> >                     map.put("admin","true");
> >             else
> >                     map.put("admin","false");
> >             
> >             if
> > (sessionContext.getSingleNode("authentication/rights/projects/
> > [EMAIL PROTECTED]"+project+"]/developer")!=null)
> >                     map.put("developer","true");
> >             else
> >                     map.put("developer","false");
> >                     
> >             if
> > (sessionContext.getSingleNode("authentication/rights/projects/
> > [EMAIL PROTECTED]"+project+"]/guest")!=null)
> >                     map.put("guest","true");
> >             else
> >                     map.put("guest","false");
> >             
> >             return
> > map;
> >     }
> > 
> > }
> > --------------------------------------------------------------
> > ----------
> > 
> > 
> > java.lang.NullPointerException
> > 
> >     at
> > org.apache.cocoon.webapps.authentication.context.Authenticatio
> > nContextProvider.getSessionContext(AuthenticationContextProvid
> > er.java:97)
> > 
> >     at
> > archivesystem.roles.GetRolesAction.act(GetRolesAction.java:57)
> > 
> >     at
> > org.apache.cocoon.components.treeprocessor.sitemap.ActTypeNode
> > .invoke(ActTypeNode.java:152)
> > 
> >     at
> > org.apache.cocoon.components.treeprocessor.AbstractParentProce
> > ssingNode.invokeNodes(AbstractParentProcessingNode.java:84)
> > 
> > ....
> > --------------------------------------------------------------
> > ------------
> > 
> > My Sitemap snippet 
> > 
> > <map:match pattern="protected-*">
> >   <map:act type="auth-protect">
> >     <map:match pattern="protected-delivery">
> >             <map:generate type="request"/>
> >       <map:act type="getRoles">
> >         <map:parameter name="project" 
> > value="{session-attr:project}"/>
> >             <map:select type="parameter">
> >               <map:parameter name="parameter-selector-test" 
> > value="{admin}"/>
> >              <map:when test="true">
> >               <map:transform type="xslt" 
> > src="stylesheets/deliveries.xsl"/>
> >             </map:when>
> >             <map:otherwise>
> >             <map:transform type="xslt" 
> > src="stylesheets/deliveries-readonly.xsl"/>
> >             </map:otherwise>
> >            </map:select>
> >           <map:serialize type="html"/>
> >             </map:act>
> >     </map:match>
> >       </map:act>
> > </map:match>
> > 
> > 
> > --------------------------------------------------------------
> > ------------
> > 
> > 
> 

-- 
 

Reply via email to