I think, at the very least, we need to handle the null case better,
with a message that explains what property of what object/service is
null.

Further, it's looking like the current approach is a little
heavy-handed; perhaps the Request and Response objects should be
created earlier and stored into the RequestGlobals service; the
Request/Response at the end of the pipeline can be re-stored into the
RG in case one of the filters overrode it (such as, when a multipart
form submission request arrives).

On Dec 5, 2007 2:10 AM, Richard Kirby <[EMAIL PROTECTED]> wrote:
> Hi Peter,
>
> My guess is that for a RequestFilter, you need to ensure that your
> filter is contributed after the default Tap5 filter that wires up the
> HttpServletRequest object to the Tap5 Request object (which is what is
> causing the NPE). However, I think on reading the RequestHandler
> pipeline section of
> http://tapestry.apache.org/tapestry5/tapestry-core/guide/request.html
> that this is probably done as the final step in the pipeline (ie the
> terminator) before passing onto the MasterDispatcher service that
> processes the Dispatcher pipeline. In other words, you can't do what you
> want to do.
>
> Not done any Tap5 coding yet so I may be wrong but hopefully I have
> given you a pointer.
>
> Cheers
>
> Richard
>
>
> Peter Stavrinides wrote:
> > Hi,
> >
> > Perhaps I haven't phrased this question quite right since I didn't get
> > a response... Let me try it again.
> >
> > What I have is two contributions, a RequestFilter and a Dispatcher
> > (the code is just about identicle) both services have a dependancy on
> > the ApplicationStateManager, so I wire it by injecting it via the
> > constructor:
> >
> >    //contribution
> >     public void
> > contributeMasterDispatcher(OrderedConfiguration<Dispatcher>
> > configuration,
> >            @InjectService("AccessController") Dispatcher
> > accessController) {
> >          configuration.add("AccessController", accessController,
> > "before:PageRender");
> >    }
> >
> >    //constructor
> >    public AccessController(ApplicationStateManager asm){
> >               this.asm_ = asm;
> >    }
> >
> > The Dispatcher seems to work perfectly, this simple test:
> >
> > if(asm_.exists(UserAsoObject.class))
> >
> > returns true/false, my state manager is working, however for the
> > RequestFilter, with virtually identical code, the same test returns a
> > NPE instead. I just wan't to understand where I am going wrong.
> >
> > Thanks again,
> > Peter
> >
> > Peter Stavrinides wrote:
> >> Hi All,
> >>
> >> I can get hold of the ApplicationStateManager using the Dispatcher
> >> interface without a problem, however the same code fails using the
> >> Tapestry RequestFilter interface?  specifically
> >> *if(asm_.exists(**UserAsoObject.class)**)) *returns a NPE. Would this
> >> be a bug or shouldn't I be using it here in this way?
> >>
> >> public class AccessController implements RequestFilter {
> >>        /* Our state manager. */
> >>        private ApplicationStateManager asm_;
> >>
> >>    public AccessController(ApplicationStateManager asm){
> >>                this.asm_ = asm;
> >>        }
> >>
> >>    @Override
> >>        public boolean service(Request request, Response response,
> >> RequestHandler handler)
> >>                throws IOException {
> >>                      *if(asm_.exists(UserAsoObject.class)) {*
> >>                  UserAsoObject userObject =
> >> asm_.get(UserAsoObject.class);
> >>            }
> >>            return handler.service(request,response);
> >>        }
> >>
> >>
> >> produced the following stack trace:
> >>
> >> java.lang.NullPointerException
> >>     at $Request_116a49796f3.getContextPath($Request_116a49796f3.java)
> >>     at $Request_116a49796d5.getContextPath($Request_116a49796d5.java)
> >>     at
> >> org.apache.tapestry.internal.services.ClasspathAssetAliasManagerImpl.toClientURL(ClasspathAssetAliasManagerImpl.java:90)
> >>
> >>     at
> >> $ClasspathAssetAliasManager_116a4979724.toClientURL($ClasspathAssetAliasManager_116a4979724.java)
> >>
> >>     at
> >> org.apache.tapestry.internal.services.ClasspathAssetFactory.buildClientURL(ClasspathAssetFactory.java:84)
> >>
> >>     at
> >> org.apache.tapestry.internal.services.ClasspathAssetFactory.clientURL(ClasspathAssetFactory.java:59)
> >>
> >>     at
> >> org.apache.tapestry.internal.services.ClasspathAssetFactory.access$000(ClasspathAssetFactory.java:33)
> >>
> >>     at
> >> org.apache.tapestry.internal.services.ClasspathAssetFactory$1.toClientURL(ClasspathAssetFactory.java:102)
> >>
> >>     at
> >> org.apache.tapestry.internal.services.PageRenderSupportImpl.addStylesheetLink(PageRenderSupportImpl.java:109)
> >>
> >>     at
> >> org.apache.tapestry.services.TapestryModule$17.renderMarkup(TapestryModule.java:1322)
> >>
> >>     at
> >> $MarkupRenderer_116a4979727.renderMarkup($MarkupRenderer_116a4979727.java)
> >>
> >>     at
> >> org.apache.tapestry.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:64)
> >>
> >>     at
> >> $PageMarkupRenderer_116a497971d.renderPageMarkup($PageMarkupRenderer_116a497971d.java)
> >>
> >>     at
> >> org.apache.tapestry.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:56)
> >>
> >>     at
> >> $PageResponseRenderer_116a49796f4.renderPageResponse($PageResponseRenderer_116a49796f4.java)
> >>
> >>     at
> >> org.apache.tapestry.internal.services.DefaultRequestExceptionHandler.handleRequestException(DefaultRequestExceptionHandler.java:60)
> >>
> >>     at
> >> $RequestExceptionHandler_116a49796e7.handleRequestException($RequestExceptionHandler_116a49796e7.java)
> >>
> >>     at
> >> org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.java:536)
> >>
> >>     at
> >> $RequestHandler_116a49796ec.service($RequestHandler_116a49796ec.java)
> >>     at
> >> org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
> >>
> >>     at
> >> $RequestHandler_116a49796ec.service($RequestHandler_116a49796ec.java)
> >>     at
> >> org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:94)
> >>
> >>     at
> >> org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:85)
> >>
> >>     at
> >> org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
> >>
> >>     at
> >> org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:107)
> >>
> >>     at
> >> $RequestHandler_116a49796ec.service($RequestHandler_116a49796ec.java)
> >>     at
> >> $RequestHandler_116a49796e4.service($RequestHandler_116a49796e4.java)
> >>     at
> >> org.apache.tapestry.services.TapestryModule$11.service(TapestryModule.java:921)
> >>
> >>     at
> >> $HttpServletRequestHandler_116a49796e3.service($HttpServletRequestHandler_116a49796e3.java)
> >>
> >>     at
> >> org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
> >>     at
> >> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
> >>
> >>     at
> >> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
> >>     at
> >> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
> >>
> >>     at
> >> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >>     at
> >> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> >>     at
> >> org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:406)
> >>     at
> >> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
> >>
> >>     at
> >> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
> >>
> >>     at
> >> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> >>     at org.mortbay.jetty.Server.handle(Server.java:295)
> >>     at
> >> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
> >>     at
> >> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:827)
> >>
> >>     at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511)
> >>     at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
> >>     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
> >>     at
> >> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:361)
> >>
> >>     at
> >> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> >>
> >>
> >>
> >> Here is the contribution:
> >> /**
> >>    public void
> >> contributeRequestHandler(OrderedConfiguration<RequestFilter>
> >> configuration,
> >>        @InjectService("TimingFilter") RequestFilter filter,
> >> @InjectService("AccessController") RequestFilter accessController) {
> >>            configuration.add("Timing", filter);
> >>        configuration.add("AccessController", accessController,
> >> "before:PageRender");
> >>    }
> >>
> >> Kind regards,
> >> Peter
> >>
> >>
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>



-- 
Howard M. Lewis Ship
TWD Consulting, Inc.

Creator Apache Tapestry and Apache HiveMind

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

Reply via email to