yes, that's what I have in my web.xml On Fri, Oct 12, 2012 at 12:10 PM, Dan Retzlaff <[email protected]> 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 > <[email protected]>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 <[email protected]> >> 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 < >> [email protected]>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 <[email protected]> >> 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 >> >> > <[email protected]>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 <[email protected]> >> >> 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 < >> >> >> [email protected]>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: [email protected] >> >> >> >> For additional commands, e-mail: [email protected] >> >> >> >> >> >> >> >> >> >> >> >> >> >> --------------------------------------------------------------------- >> >> >> 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] >> >> >> >> >> >> --------------------------------------------------------------------- >> 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]
