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

Reply via email to