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]