Hi folks, I'm looking for a bit of advice here...

I'm building a JAX-WS Provider web service using the CXF toolkit. The
Provider class is created by CXF (actually via Spring but I don't use
Spring myself) via a no-arg constructor on starting the application.
NB When I say Provider in this message, I mean a JAX-WS Provider
(http://java.sun.com/javase/6/docs/api/javax/xml/ws/Provider.html) not
a Guice Provider.

Now, the Provider has various dependencies (handlers for different
SOAP operations) which I want Guice to inject as they in turn contain
lots of other injectable dependencies. I can't control the creation of
the Provider myself, so I was thinking of creating the Injector in the
Provider's constructor with a module binding the handlers in, and
doing an injectMembers( this ) to inject them into fields of the
Provider.

This works, but it makes testing the Provider with mock handlers more
complicated, as my unit tests want to override these injections.

I could make the injected fields non-final and write setter methods
for them, so the unit tests can override the default implementations
with the mocks. However this has two drawbacks:

1. It'd slow my tests down, as the real objects that aren't being
tested still get constructed.

2. If there's an error in constructing one of these objects then a
test will fail, even though the test isn't testing these objects.

Another option is to delay the injection to the first time the
invoke() method of the provider is called, using something like this:

if( ! injectionHasBeenDone ) {
  Injector i = Guice.createInjector( new ProductionModule() );
  i.injectMembers( this );
}

but that seems a bit ugly somehow, and it'd mean the first user of the
web service gets a bit of a delay.

What's the best practice for doing this kind of thing? I can't help
feeling like I'm missing some obvious bit of Guice that would help
here.

Thanks!

Andrew.

-- 
:: http://biotext.org.uk/ ::

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to google-guice@googlegroups.com
To unsubscribe from this group, send email to 
google-guice+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to