I think I have  found a solution. Recall that you have
a NPE
about 'webRequest' being null in the serivce 
tapestry.globals.RequestGlobals.
Usually, the webRequest (and webResponse) in
requestGlobal is set 
in WebRequestServicerPipelineBridge.java.
Here is the route to
WebRequestServicerPipelineBridge.java :
ApplicationServlet.doService -> 
WebRequestServicerPipelineBridge.service.

That explains the cause of NPE  in the filter placed
before ApplicationServlet.
My solution is to set the property  webRequest in
requestGlobal manually, inside 
the filter. 
Here is the code in the doFilter method of my servlet
filter :

public void doFilter(ServletRequest request,
ServletResponse response,
                        FilterChain chain) throws IOException,
ServletException {
             
                try {

                        String REGISTRY_KEY_PREFIX =
"org.apache.tapestry.Registry:";

                        // Replace testPojoASO by the servlet name in
web.xml
                        Registry registry = (Registry) context
                                        .getAttribute(REGISTRY_KEY_PREFIX +
"testPojoASO");
                        IInjectEnhancementWorker stateWorker =
(IInjectEnhancementWorker)

                
registry.getService(IInjectEnhancementWorker.class);
                        
                        // The following few lines of code set up the
property
                        // webRequest and webResponse in requestGlobes.
                        //
                        HttpServletRequest req
=(HttpServletRequest)request;
                    HttpServletResponse resp = (HttpServletResponse)
response;
                        RequestGlobals requestGlobals = (RequestGlobals)
                   
registry.getService("tapestry.globals.RequestGlobals",

                                                 RequestGlobals.class);
                         WebRequest webRequest = new ServletWebRequest(req,
resp);
                        WebResponse webResponse = new
ServletWebResponse(resp);
                      requestGlobals.store(webRequest,webResponse); 

                        
                        log.info("doFilter : " +
stateWorker.retrieveVisit().getMessage());
                                
                        chain.doFilter(request, response);
                        

                } catch (ServletException sexp) {
                        log.info("doFilter : sexp =" + sexp);
                }

        }


===========
I have tested the above and it works.

Shing 



--- Shing Hing Man <[EMAIL PROTECTED]> wrote:

> I have run out of idea. 
> If I come up with something useful, I'll inform you.
> 
> Shing
> 
> --- Joseph Hannon <[EMAIL PROTECTED]> wrote:
> 
> > Follow up: I can get the Visit object from my
> > filter's ServletRequest 
> > session.getAttribute("state:apply:Visit"), but I
> was
> > attempting to 
> > really use a proper HiveMind facility here.
> > 
> > Joseph
> > 
> > Joseph Hannon wrote:
> > > Shing,
> > > 
> > > I very much appreciate your time on this by the
> > way, and your website 
> > > looks very handy. :)
> > > 
> > > I have gone back to the ApplicationServlet, and
> > have written code as you 
> > > show below into a static method in a singleton
> in
> > my app.  When calling 
> > > the method from a page class, Home, I get to my
> > Visit object just as you 
> > > did, so the method code is valid.  When calling
> > the same method from my 
> > > filter (non page class) I get the webRequest
> > related exception, see 
> > > below.  I did create a non page pojo from Home
> in
> > which the pojo calls 
> > > my method and it worked.  So non page pojos can
> do
> > this but the filter 
> > > can not. It definitely in not trivial to get to
> > the Registry from a 
> > > filter it would seem.  Not sure what to do now
> for
> > the filter.  May have 
> > > to look at HiveUtils.
> > > 
> > > Thanks,
> > > Joseph
> > > 
> > > Exception:
> > > java.lang.NullPointerException: Property
> > 'webRequest' of <OuterProxy for 
> > >
> >
>
tapestry.globals.RequestGlobals(org.apache.tapestry.services.RequestGlobals)>
> > 
> > > is null. 
> > >
> >
>
$WebRequest_10c4ab9cc40._targetServiceProperty($WebRequest_10c4ab9cc40.java)
> > 
> > > 
> > >        
> >
>
$WebRequest_10c4ab9cc40.getSession($WebRequest_10c4ab9cc40.java)
> > >        
> >
>
$WebRequest_10c4ab9cc25.getSession($WebRequest_10c4ab9cc25.java)
> > > 
> > >
> >
>
$WebRequest_10c4ab9cc24.getSession($WebRequest_10c4ab9cc24.java)
> > 
> > >
> >
>
org.apache.tapestry.engine.state.SessionScopeManager.getSession(SessionScopeManager.java:48)
> > 
> > > 
> > >
> >
>
org.apache.tapestry.engine.state.SessionScopeManager.get(SessionScopeManager.java:64)
> > 
> > > 
> > >
> >
>
$StateObjectPersistenceManager_10c4ab9cc3b.get($StateObjectPersistenceManager_10c4ab9cc3b.java)
> > 
> > > 
> > >
> >
>
$StateObjectPersistenceManager_10c4ab9cc3a.get($StateObjectPersistenceManager_10c4ab9cc3a.java)
> > 
> > > 
> > >
> >
>
org.apache.tapestry.engine.state.StateObjectManagerImpl.get(StateObjectManagerImpl.java:50)
> > 
> > > 
> > >
> >
>
org.apache.tapestry.engine.state.ApplicationStateManagerImpl.get(ApplicationStateManagerImpl.java:60)
> > 
> > > 
> > >
> >
>
$ApplicationStateManager_10c4ab9cbfc.get($ApplicationStateManager_10c4ab9cbfc.java)
> > 
> > > 
> > >
> >
>
$ApplicationStateManager_10c4ab9cbfd.get($ApplicationStateManager_10c4ab9cbfd.java)
> > 
> > >       
> >
>
foo.apply.utility.Utility.testASOService(Utility.java:61)
> > 
> > > 
> >
>
foo.apply.application.SampleFilter.doFilter(SampleFilter.java:176)
> > > 
> > > 
> > > Shing Hing Man wrote:
> > >> The registry is stored in the servlet context.
> > >> You can retreived it by :
> > >>
> > >>
> > >>   String REGISTRY_KEY_PREFIX =
> > >> "org.apache.tapestry.Registry:";
> > >>     ServletContext context =
> getServletContext();
> > >>     Registry registry = (Registry)
> > >>        context.getAttribute(REGISTRY_KEY_PREFIX
> +
> > >> "testPojoASO");
> > >>     IInjectEnhancementWorker stateWorker =
> > >> (IInjectEnhancementWorker)          
> > >>
> >
> registry.getService(IInjectEnhancementWorker.class);
> > >>
> > >> (In your case you need to replace  testPojoASO
> by
> > the
> > >> servlet name in web.xml.)
> > >>
> > >> In your orginal post, you have a custom
> > ApplicationServlet.
> > >> I have try the following approach with the code
> > in
> > >> your orginal post.
> > >>
> > >> Step 1) Use the framework ApplicationServlet.
> > >>
> > >> Step 2) Retrieve the registry as described
> above.
> > >>
> > >> Then I have no problem retrieving the
> stateWorker
> > in
> > >> the Home page  using the above method. (As long
> > as you have access to the
> > >> context servlet, you can get stateWorker.)
> > >>
> > >> Joseph : I am sending your a war file (binary
> and
> > >> source) of the above example off the list.
> > >>
> > >> Shing
> > >> --- Joseph Hannon <[EMAIL PROTECTED]>
> wrote:
> > >>
> > >>> Shing,
> > >>>
> > >>> Cool.  I did replace <set-object with the
> > >>> <set-service and got the same exception.  If
> you
> > will notice in my 
> > >>> original post,
> > >>> this was commented out, I uncommented it and
> > commented the line with
> > >>> <set-object .
> > >>>
> > >>> Would you mind showing some code where you are
> > >>> getting your asoService class from a pojo?  I
> > would like to see how 
> > >>> you are
> > >>> making the call that gets the service.  I
> > suspect getting my registry
> > >>> from my servlet is not the way to go.
> > >>>
> > >>> Thanks,
> > >>> Joseph
> > >>>
> > >>> Shing Hing Man wrote:
> > >>>>> How are you calling getAppStateManager(),
> from
> > >>> what
> > >>>>> class?  How are you getting access to the
> > registry from a POJO?
> > >>>>
> 
=== message truncated ===


Home page :
  http://uk.geocities.com/matmsh/index.html


        
        
                
___________________________________________________________ 
All new Yahoo! Mail "The new Interface is stunning in its simplicity and ease 
of use." - PC Magazine 
http://uk.docs.yahoo.com/nowyoucan.html

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

Reply via email to