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