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

Reply via email to