So I've ended up with the following implementation: @Contribute(HttpServletRequestHandler.class)
public void contributeHttpServletRequestHandler ( OrderedConfiguration<HttpServletRequestFilter> configuration, @Inject @Symbol(ResteasySymbols.MAPPING_PREFIX) final String restFilterPath, @Inject @Symbol(SymbolConstants.CHARSET) final String applicationCharset, @Primary final SessionPersistedObjectAnalyzer<?> analyzer, final RequestGlobals requestGlobals ) { HttpServletRequestFilter storeRestSession = newHttpServletRequestFilter () { public boolean service ( HttpServletRequest servletRequest, HttpServletResponse servletResponse, HttpServletRequestHandler handler ) throws IOException { if ( servletRequest.getServletPath ().startsWith ( restFilterPath + "/" ) ) { Request request = new RequestImpl ( servletRequest, applicationCharset, new TapestrySessionFactoryImpl ( false, analyzer, servletRequest ) ); Response response = new ResponseImpl ( servletRequest, servletResponse ); requestGlobals.storeRequestResponse ( request, response ); } return handler.service ( servletRequest, servletResponse ); } }; configuration.add("StoreRestSession", storeRestSession, "before:ResteasyRequestFilter"); } Probably it's possible to achieve the same goal by overriding RestEasy request filter. On Fri, Jan 24, 2014 at 11:07 PM, Ilya Obshadko <ilya.obsha...@gmail.com>wrote: > Just run into this thread with a similar problem. I'm implementing REST > service (using tapestry-resteasy) for mobile clients. > > I've already found a solution: > > public void contributeHttpServletRequestHandler ( > OrderedConfiguration<HttpServletRequestFilter> configuration, > > @Inject @Symbol(SymbolConstants.CHARSET) final String > applicationCharset, > > @Primary final SessionPersistedObjectAnalyzer<?> analyzer, > > final RequestGlobals requestGlobals ) { > > > HttpServletRequestFilter storeRequestResponse = > newHttpServletRequestFilter () { > > public boolean service ( HttpServletRequest servletRequest, > HttpServletResponse servletResponse, > > HttpServletRequestHandler handler ) throwsIOException { > > > > Request request = new RequestImpl ( servletRequest, > applicationCharset, new TapestrySessionFactoryImpl ( false, analyzer, > servletRequest ) ); > > Response response = new ResponseImpl ( servletRequest, > servletResponse ); > > requestGlobals.storeRequestResponse ( request, response ); > > return handler.service ( servletRequest, servletResponse > ); > > } > > }; > > > configuration.add("StoreRequestResponse", storeRequestResponse, > "before:*"); > > } > > But it doesn't look very elegant. Is there any better way to expose > ApplicationStateManager to RestEasy service? > > > > On Fri, Jun 28, 2013 at 12:04 PM, Thiago H de Paula Figueiredo < > thiag...@gmail.com> wrote: > >> On Thu, 27 Jun 2013 19:46:20 -0300, Jon Williams < >> williams.jonat...@gmail.com> wrote: >> >> Hi, >>> >> >> Hi! >> >> My problem has gone away. >>> A short FYI on how I got past this problem... >>> >>> First I tried adding a new request Builder method in QaModule using the >>> shadowbuilder service that would build my TestRequest. But that didn't >>> work because of a Request service implementation collision with predeclared >>> (in TapModule) service Request.class interface implementation. Only 1 >>> Request >>> interface implementation is allowed, and TapModule beats me to the punch. >>> >> >> You've already found a very good solution, but I'd like to mention you >> could also use service overriding, so your Request implementation is used >> and not Tapestry's. >> >> >> -- >> Thiago H. de Paula Figueiredo >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> >> For additional commands, e-mail: users-h...@tapestry.apache.org >> >> > > > -- > Ilya Obshadko > > -- Ilya Obshadko