users@jersey.java.net

[Jersey] Re: Explicitly declare the root resource and provider classes - not working for provider class

From: Farrukh Najmi <farrukh_at_wellfleetsoftware.com>
Date: Wed, 29 Feb 2012 09:02:10 -0500

I was using a org.glassfish.grizzly.servlet.ServletHandler to create the
HttpServer as follows:

import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.grizzly.http.server.ServerConfiguration;
import org.glassfish.grizzly.http.server.StaticHttpHandler;
import org.glassfish.grizzly.servlet.ServletHandler;

...
URI uri = ...
ServletHandler servletHandler = new ServletHandler();
HttpServer server = GrizzlyServerFactory.createHttpServer(uri,
servletHandler, false);

So I tried the following to use jersey ContainerFactory to create my
handler so it takes into account my ResourceConfig (so I can explicitly
set root resource and provider classes so I can run my jersey server
inside a webstart / jnlp launched app):

ServletHandler servletHandler =
ContainerFactory.createContainer(ServletHandler.class, resourceConfig);
HttpServer server = GrizzlyServerFactory.createHttpServer(uri,
servletHandler, false);


The problem I get is:

No container provider supports the type class
org.glassfish.grizzly.servlet.ServletHandler
     
com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:196)
     
com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:134)

I am on my 5th day trying to get an app with a jersey server endpoint
that worked fine standalone to work in javawebstart environment.

I feel I am close but at the end of my knowledge of jersey to get this
seemingly simple problem solved:

How to explicitly declare the root resource and provider classes when
using a ServletHandler in creating the Grizzly server.

Any other ideas from the jesrey dev team?

On 02/28/2012 08:04 PM, Glen Mazza wrote:
> Just more detective work, basically see what Jersey does
> behind-the-scenes. Go to grepcode on "GrizzlyServerFactory" -- line
> 75 in the Main.java I linked to below. You'll see what Jersey does:
> http://grepcode.com/file/repo1.maven.org/maven2/com.sun.jersey/jersey-grizzly2/1.11/com/sun/jersey/api/container/grizzly2/GrizzlyServerFactory.java#GrizzlyServerFactory.createHttpServer%28java.net.URI%2Ccom.sun.jersey.api.container.grizzly2.ResourceConfig%29
>
> I see an HttpHandler in that method, so I'll leave the rest to you as
> an exercise. :)
>
> Glen
>
>
> On 02/28/2012 07:36 PM, Farrukh Najmi wrote:
>> On 02/28/2012 01:22 PM, Glen Mazza wrote:
>>> On 02/28/2012 01:04 PM, Farrukh Najmi wrote:
>>>> BTW, when I set breakpoints inside my getClasses() and
>>>> getSingletons() methods of my "class HubSubscriber extends
>>>> javax.ws.rs.core.Application" I find they are never called!
>>>
>>> Did you remember to wire your Application subclass in like here:
>>> http://java.net/projects/jersey/sources/svn/content/tags/jersey-1.11/jersey/samples/jacksonjsonprovider/src/main/java/com/sun/jersey/samples/jacksonjsonprovider/Main.java?rev=5665
>>> (lines 72-75)? Also, I'd try a System.out.println() in those two
>>> methods to confirm they're not being called -- it could be the
>>> debugger is wrong for some reason.
>>
>> I did not do that! So that explains why the getClasses() and
>> getSingletons() methods are not being called.
>>
>> Now here is my problem. I am using the following method
>> <http://grepcode.com/file/repo1.maven.org/maven2/com.sun.jersey/jersey-grizzly2/1.10/com/sun/jersey/api/container/grizzly2/GrizzlyServerFactory.java#GrizzlyServerFactory.createHttpServer%28java.net.URI%2Ccom.sun.jersey.api.container.grizzly2.HttpHandler%2Cboolean%29>
>> to create my HttpServer. I need to specify an HttpHandler. So how do
>> I pass it a ResourceConfig instance? I think there is a way to create
>> an HttpHandler with a specified ResourceConfig but I do not know how
>> to do that. Any advice?
>>
>> Thanks again for your kind help.

-- 
Regards,
Farrukh Najmi
Web: http://www.wellfleetsoftware.com