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

Reply via email to