Martin, In this case it would be just as easy to inject a specific bean.
I did it this way because it matched some other examples that I saw. Daniel On Oct 16, 2012 1:08 AM, "Martin Grigorov" <mgrigo...@apache.org> wrote: > Hi Daniel, > > public class HomePage extends WebPage { > private static final long serialVersionUID = 1L; > @Inject private Injector injector; > > public HomePage(final PageParameters parameters) { > super(parameters); > > add(new Label("version", > getApplication().getFrameworkSettings().getVersion())); > > // TODO Add your page's components here > QuickLink quickLink = injector.getInstance(QuickLink.class); > add(new Label("quickLink ", quickLink.buildQuickLink())); > } > } > > Why do you inject the Injector and then ask it for beans instead of > injecting the bean directly and use it ? > > On Mon, Oct 15, 2012 at 6:51 PM, Daniel Watrous > <daniel.watr...@gmail.com> wrote: > > Dan, > > > > Thanks for all your help. I finally worked through all the details and > > have it working. Here's my write up: > > > > http://software.danielwatrous.com/wicket-guice-including-unittests/ > > > > The last bit I needed clarification on was how to pass parameters to > > the WicketFilter. I think the integration between Wicket and Guice is > > clean and flexible. > > > > Thanks again, > > Daniel > > > > On Fri, Oct 12, 2012 at 12:35 PM, Daniel Watrous > > <daniel.watr...@gmail.com> wrote: > >> yes, that's what I have in my web.xml > >> > >> On Fri, Oct 12, 2012 at 12:10 PM, Dan Retzlaff <dretzl...@gmail.com> > wrote: > >>> 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 > >>>> > >>>> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > > > -- > Martin Grigorov > jWeekend > Training, Consulting, Development > http://jWeekend.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >