Yes, CustomFilter = CustomWicketFilter... Those aren't our actual names. And yes, we provide filter parameters too. I just omitted them since they weren't relevant to the Guice-based application instantiation I was describing.
Do you have this in your web.xml? <filter> <filter-name>guiceFilter</filter-name> <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> </filter> <filter-mapping> <filter-name>guiceFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> On Fri, Oct 12, 2012 at 6:01 PM, Daniel Watrous <daniel.watr...@gmail.com>wrote: > Dan, > > Thanks. I've got unittests running now, but the WicketFilter doesn't > seem to be processing. All I get when I run the applicaiton shows a > jetty produced directory listing. > > In the snippet you provided before I think that CustomFilter and > CustomeWicketFilter should be the same thing. Is that right? > > In my previous approach, when I bound the WicketFilter I included some > parameters, like this: > filter("/*").through(WicketFilter.class, > createWicketFilterInitParams()); > > With this function > > private Map<String, String> createWicketFilterInitParams() { > Map<String, String> wicketFilterParams = new HashMap<String, > String>(); > wicketFilterParams.put(WicketFilter.FILTER_MAPPING_PARAM, "/*"); > wicketFilterParams.put("applicationClassName", > "com.hp.honeybadger.web.WicketApplication"); > return wicketFilterParams; > } > > I'm now trying to figure out how to make sure that the wicket filter > is called... > > Daniel > > On Fri, Oct 12, 2012 at 11:03 AM, Dan Retzlaff <dretzl...@gmail.com> > wrote: > > I follow you. WicketTester doesn't know about GuiceFilter, so you'll > need a > > different way of getting your Injector into your Wicket Application. > Rather > > than getting the Injector from your servlet context attributes, I'm > > suggesting that you let Guice instantiate your Application so you can > > @Inject the injector like any other dependency. The binding code I posted > > previously does the (non-test) setup; for the test itself it's as simple > as > > https://gist.github.com/3880246. > > > > Hope that helps. By the way, I enjoyed your Wicket+EC2 article. Thanks > for > > that. :) > > > > On Fri, Oct 12, 2012 at 4:08 PM, Daniel Watrous < > daniel.watr...@gmail.com>wrote: > > > >> Dan, > >> > >> I'm not talking about my application. I'm talking about unittests. > >> I've followed the Guice recommended way to integrate with servlets > >> using the GuiceFilter. > >> > >> Now I'm trying to make the Wicket unittests work and I need the > >> injector to be available in WicketTester. > >> > >> Daniel > >> > >> On Thu, Oct 11, 2012 at 6:10 PM, Dan Retzlaff <dretzl...@gmail.com> > wrote: > >> > For what it's worth, we instantiate our applications through Guice. > >> Having > >> > your application "go get" its Injector kind of violates the DI > concept. > >> > > >> > filter("/*").through(WicketFilter.class); > >> > bind(WebApplication.class).to(CustomWebApplication.class); > >> > bind(WicketFilter.class).to(CustomWicketFilter.class); > >> > > >> > @Singleton > >> > private static class CustomFilter extends WicketFilter { > >> > @Inject private Provider<WebApplication> webApplicationProvider; > >> > @Override > >> > protected IWebApplicationFactory getApplicationFactory() { > >> > return new IWebApplicationFactory() { > >> > @Override > >> > public WebApplication createApplication(WicketFilter filter) { > >> > return webApplicationProvider.get(); > >> > } > >> > @Override > >> > public void destroy(WicketFilter filter) { > >> > } > >> > }; > >> > } > >> > } > >> > > >> > On Thu, Oct 11, 2012 at 11:49 PM, Daniel Watrous > >> > <daniel.watr...@gmail.com>wrote: > >> > > >> >> Dan, > >> >> > >> >> I think you're right. Since in the WicketApplication init() function > I > >> >> attempt to get the bootStrapInjector like this: > >> >> Injector bootStrapInjector = (Injector) > >> >> this.getServletContext().getAttribute(Injector.class.getName()); > >> >> > >> >> I just can't figure out how to get the injector into the > >> >> ServletContext before init() is run in my WicketApplication. > >> >> > >> >> Daniel > >> >> > >> >> On Wed, Oct 10, 2012 at 6:10 PM, Dan Retzlaff <dretzl...@gmail.com> > >> wrote: > >> >> > Daniel, > >> >> > > >> >> > What you're doing should work, but I think you're giving > >> >> > your GuiceComponentInjector a null Injector. Unit tests don't go > >> through > >> >> > web.xml to set up its context listeners, so > >> >> > your GuiceServletContextListener never has a chance to construct > and > >> >> > register an Injector with the ServletContext. > >> >> > > >> >> > Dan > >> >> > > >> >> > On Wed, Oct 10, 2012 at 5:30 PM, Daniel Watrous < > >> >> daniel.watr...@gmail.com>wrote: > >> >> > > >> >> >> Hi, > >> >> >> > >> >> >> I've integrated Guice into Wicket successfully, but I'm struggling > >> >> >> with the unittests. I'm not sure how to get the injector into my > >> >> >> HomePage class. Here's my setup. > >> >> >> > >> >> >> I'm using GuiceFilter with a GuiceServletContextListener. That > >> creates > >> >> >> the injector and a ServletModule which defines the > WicketApplication. > >> >> >> I followed: > >> >> >> http://code.google.com/p/google-guice/wiki/ServletModule > >> >> >> > >> >> >> Here's some of MyGuiceServletConfig extends > >> GuiceServletContextListener > >> >> >> > >> >> >> @Override > >> >> >> protected Injector getInjector() { > >> >> >> return Guice.createInjector(createServletModule(), new > >> >> >> MongoHoneybadgerModule()); > >> >> >> } > >> >> >> > >> >> >> private ServletModule createServletModule() { > >> >> >> return new ServletModule() { > >> >> >> ... > >> >> >> > >> >> >> In my WicketApplication extends WebApplication I have this init() > >> method > >> >> >> > >> >> >> @Override > >> >> >> public void init() > >> >> >> { > >> >> >> super.init(); > >> >> >> Injector bootStrapInjector = (Injector) > >> >> >> this.getServletContext().getAttribute(Injector.class.getName()); > >> >> >> getComponentInstantiationListeners().add(new > >> >> >> GuiceComponentInjector(this, bootStrapInjector)); > >> >> >> } > >> >> >> > >> >> >> Now, in my HomePage.java class I have > >> >> >> > >> >> >> public class HomePage extends WebPage { > >> >> >> private static final long serialVersionUID = 1L; > >> >> >> @Inject private Injector injector; > >> >> >> > >> >> >> public HomePage(final PageParameters parameters) { > >> >> >> super(parameters); > >> >> >> SomeType myobj = injector.getInstance(SomeType.class); > >> >> >> > >> >> >> add(new Label("version", myobj.getValue())); > >> >> >> } > >> >> >> } > >> >> >> > >> >> >> This all runs great inside a web container as a servlet. > >> >> >> > >> >> >> The PROBLEM: I'm getting a NullPointerException on the line where > I > >> >> >> reference the injector: > >> >> >> SomeType myobj = injector.getInstance(SomeType.class); > >> >> >> > >> >> >> My test class is what was generated by the wicket quickstart. I'm > not > >> >> >> sure how to make an injector available in setUp. > >> >> >> > >> >> >> @Before > >> >> >> public void setUp() { > >> >> >> tester = new WicketTester(new WicketApplication()); > >> >> >> } > >> >> >> > >> >> >> Any ideas? > >> >> >> > >> >> >> Thanks, > >> >> >> Daniel > >> >> >> > >> >> >> > --------------------------------------------------------------------- > >> >> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > >> >> >> For additional commands, e-mail: users-h...@wicket.apache.org > >> >> >> > >> >> >> > >> >> > >> >> --------------------------------------------------------------------- > >> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > >> >> For additional commands, e-mail: users-h...@wicket.apache.org > >> >> > >> >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > >> For additional commands, e-mail: users-h...@wicket.apache.org > >> > >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >