users@jersey.java.net

Re: [Jersey] Using Guice with JAX-RS

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Wed, 01 Oct 2008 16:34:34 +0100

Hi Ido,

On Oct 1, 2008, at 3:39 PM, Ido Tamir wrote:

>
> Hi,
> thank you very much for the clear description. However I got huge
> stacktraces from guice, and it
> took me quite long to appreciate that it works nevertheless.
> I think it works like this: guice just complains loudly that it is not
> configured/ does not find anything appropriate and then jersey takes
> over.
>
> Basically what I get is (see below, its too long, and I shortened it
> considerably).
> This comes up at startup of the servlet.
>

If a ComponentProvider is registered, then Jersey will ask it for
every component it needs to instantiate (providers and resource
classes, Jersey specific or application-specific). If the component
provider returns null then Jersey will instantiate using it's own
component provider.

So i think the Guice ComponentProvider needs to be prepared to handle
such errors.

In this specific case you are seeing a Jersey-specific JAXB message
body readers/writers attempting to be instantiated. These are created
an servlet initialization time.


> I have an additional question:
>
> I get the expected reply from the normal helloworldresource with
> @GET
> @Produces("text/plain")
> public String getClichedMessage() {
> return "Hello World";
> }
>
> but the browser shows (besides "Hello World" in the satuts line:
> localhost.localdomain contacted waiting for reply....
>
> So is there some stream not closed or is this expected?
>

That does not look right, what happens when you try using curl?


> I could send you a zipped maven project which unfortunately
> depends on http://maven.kamalook.de as a repository
> for guice and warp-persist, because these are not on ibiblio.
>

A zip file and dependencies on all sorts of maven repos is fine as
long as i can run and debug it :-)

Paul.


> thank you very much,
> ido
>
>
>
>
>
> ---
> com.google.inject.ConfigurationException: Error at
> com.sun.jersey.impl.provider.entity.XMLRootElementProvider
> $App.<init>(XMLRootElementProvider.java:72)
> Could not find a suitable constructor in
> com.sun.jersey.impl.provider.entity.XMLRootElementProvider$App.
> Classes must
> have either one (and only one) constructor annotated with @Inject or a
> zero-argument constructor.
> at
> com.google.inject.BinderImpl
> $RuntimeErrorHandler.handle(BinderImpl.java:426)
> at
> com
> .google.inject.AbstractErrorHandler.handle(AbstractErrorHandler.java:
> 30)
> at
> com
> .google
> .inject
> .ConstructorInjector.findConstructorIn(ConstructorInjector.java:105)
> at
> com
> .google.inject.ConstructorInjector.<init>(ConstructorInjector.java:37)
> at com.google.inject.InjectorImpl$7.create(InjectorImpl.java:601)
> at com.google.inject.InjectorImpl$7.create(InjectorImpl.java:594)
> at com.google.inject.util.ReferenceCache.create(ReferenceCache.java:
> 53)
> at
> com
> .google
> .inject
> .util
> .AbstractReferenceCache.internalCreate(AbstractReferenceCache.java:59)
> at
> com
> .google
> .inject.util.AbstractReferenceCache.get(AbstractReferenceCache.java:
> 116)
> at com.google.inject.InjectorImpl.getConstructor(InjectorImpl.java:
> 765)
> at
> com.google.inject.InjectorImpl.getImplicitBinding(InjectorImpl.java:
> 973)
> at
> com.google.inject.InjectorImpl.getInternalFactory(InjectorImpl.java:
> 308)
> at com.google.inject.InjectorImpl.getProvider(InjectorImpl.java:693)
> at com.google.inject.InjectorImpl.getProvider(InjectorImpl.java:689)
> at com.google.inject.InjectorImpl.getInstance(InjectorImpl.java:728)
> at
> at
> .ac
> .imp
> .fuge
> .guice
> .GuiceComponentProvider.getInstance(GuiceComponentProvider.java:31)
> at
> at
> .ac
> .imp
> .fuge
> .guice
> .GuiceComponentProvider.getInstance(GuiceComponentProvider.java:39)
> at
> com.sun.jersey.impl.application.WebApplicationImpl
> $AdaptingComponentProvider.getInstance(WebApplicationImpl.java:345)
> at
> com
> .sun
> .jersey
> .impl
> .application
> .ComponentProviderCache.getComponent(ComponentProviderCache.java:187)
> at
> com
> .sun
> .jersey
> .impl
> .application
> .ComponentProviderCache
> .getProvidersAndServices(ComponentProviderCache.java:122)
> at
> com
> .sun
> .jersey
> .impl
> .application
> .MessageBodyFactory.getProviderMap(MessageBodyFactory.java:133)
> at
> com
> .sun
> .jersey
> .impl
> .application.MessageBodyFactory.initReaders(MessageBodyFactory.java:
> 107)
> at
> com
> .sun
> .jersey
> .impl.application.MessageBodyFactory.init(MessageBodyFactory.java:102)
> at
> com
> .sun
> .jersey
> .impl
> .application.WebApplicationImpl.initiate(WebApplicationImpl.java:642)
> at at.ac.imp.fuge.guice.GuiceServlet.initiate(GuiceServlet.java:32)
> at
> com
> .sun
> .jersey
> .spi.container.servlet.ServletContainer.load(ServletContainer.java:
> 522)
> at
> com
> .sun
> .jersey
> .spi.container.servlet.ServletContainer.init(ServletContainer.java:
> 181)
> at
> com
> .sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:
> 208)
> at
> com
> .sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:
> 148)
> at
> com
> .sun
> .grizzly
> .http.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:
> 621)
> at
> com
> .sun
> .grizzly
> .http.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:552)
> at
> com
> .sun
> .grizzly.http.DefaultProcessorTask.process(DefaultProcessorTask.java:
> 800)
> at
> com
> .sun
> .grizzly
> .http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:152)
> at
> com
> .sun
> .grizzly
> .DefaultProtocolChain
> .executeProtocolFilter(DefaultProtocolChain.java:137)
> at
> com
> .sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:
> 104)
> at
> com
> .sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:
> 90)
> at com.sun.grizzly.http.SelectorThread
> $1.execute(SelectorThread.java:649)
> at
> com
> .sun
> .grizzly
> .ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:67)
> at
> com
> .sun
> .grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56)
> at com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:
> 169)
> Error at
> com.sun.jersey.impl.provider.entity.XMLRootElementProvider
> $App.<init>(XMLRootElementProvider.java:72)
> Could not find a suitable constructor in
> com.sun.jersey.impl.provider.entity.XMLRootElementProvider$App.
> Classes must
> have either one (and only one) constructor annotated with @Inject or a
> zero-argument constructor.
> com.google.inject.ConfigurationException: Error at
> com.sun.jersey.impl.provider.entity.XMLRootElementProvider
> $Text.<init>(XMLRootElementProvider.java:78)
> Could not find a suitable constructor in
> com.sun.jersey.impl.provider.entity.XMLRootElementProvider$Text.
> Classes
> must have either one (and only one) constructor annotated with
> @Inject or a
> zero-argument constructor.
> at
> com.google.inject.BinderImpl
> $RuntimeErrorHandler.handle(BinderImpl.java:426)
> at
> com
> .google.inject.AbstractErrorHandler.handle(AbstractErrorHandler.java:
> 30)
> at
> com
> .google
> .inject
> .ConstructorInjector.findConstructorIn(ConstructorInjector.java:105)
> at
> com
> .google.inject.ConstructorInjector.<init>(ConstructorInjector.java:37)
> at com.google.inject.InjectorImpl$7.create(InjectorImpl.java:601)
> at com.google.inject.InjectorImpl$7.create(InjectorImpl.java:594)
> at com.google.inject.util.ReferenceCache.create(ReferenceCache.java:
> 53)
> at
> com
> .google
> .inject
> .util
> .AbstractReferenceCache.internalCreate(AbstractReferenceCache.java:59)
> at
> com
> .google
> .inject.util.AbstractReferenceCache.get(AbstractReferenceCache.java:
> 116)
> at com.google.inject.InjectorImpl.getConstructor(InjectorImpl.java:
> 765)
> at
> com.google.inject.InjectorImpl.getImplicitBinding(InjectorImpl.java:
> 973)
> at
> com.google.inject.InjectorImpl.getInternalFactory(InjectorImpl.java:
> 308)
> at com.google.inject.InjectorImpl.getProvider(InjectorImpl.java:693)
> at com.google.inject.InjectorImpl.getProvider(InjectorImpl.java:689)
> at com.google.inject.InjectorImpl.getInstance(InjectorImpl.java:728)
> at
> at
> .ac
> .imp
> .fuge
> .guice
> .GuiceComponentProvider.getInstance(GuiceComponentProvider.java:31)
> at
> at
> .ac
> .imp
> .fuge
> .guice
> .GuiceComponentProvider.getInstance(GuiceComponentProvider.java:39)
>
> --
> View this message in context: http://n2.nabble.com/Using-Guice-with-JAX-RS-tp1127230p1131547.html
> Sent from the Jersey mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>