users@jersey.java.net

Re: [Jersey] 0.6 -> 0.7 problem with jetty

From: Martin Grotzke <martin.grotzke_at_freiheit.com>
Date: Fri, 06 Jun 2008 09:54:14 +0200

On Thu, 2008-06-05 at 19:25 +0200, Jean Aurambault wrote:
> Not sure to understand for the POM. What do I have to put in the pom.xml
> ? I use spring 2.5

For spring-2.5 it should be enough to have this in the pom.xml
(regarding jersey):

        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey</artifactId>
            <version>0.8-ea-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-spring</artifactId>
            <version>0.8-ea-SNAPSHOT</version>
        </dependency>

For spring-2.0 the jersey-spring depencency should look like this:

        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-spring</artifactId>
            <version>0.8-ea-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-webmvc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

The jetty/spring setup stuff of the jersey-spring AbstractResourceStuff
is this:
    
    
    public AbstractResourceTest() {
        _springConfig = System.getProperty( "applicationContext", "applicationContext-spring25.xml" );
        _resourcePackages = System.getProperty( "resourcePackages", "com.sun.jersey.spring;com.sun.jersey.spring25" );
        _port = 9999;
        _servletPath = "/jersey-spring";
    }

    /* (non-Javadoc)
     * @see junit.framework.TestCase#setUp()
     */
    @BeforeClass
    @SuppressWarnings("unused")
    public void setUp() throws Exception {
        startJetty( _port, _servletPath );
    }

    private void startJetty( int port, String servletPath ) throws Exception {
        LOG.info( "Starting jetty on port " + port + "..." );

         _server = new Server(port);
         final Context context = new Context(_server, "/", Context.SESSIONS);
         
         final Map<String,String> contextParams = new HashMap<String, String>();
         contextParams.put( "contextConfigLocation", "classpath:" + _springConfig );
         context.setInitParams( contextParams );
         
         
         final ServletHolder springServletHolder = new ServletHolder( ContextLoaderServlet.class );
         
         springServletHolder.setInitOrder( 1 );
         context.addServlet( springServletHolder, "/*" );
         
         
         final ServletHolder sh = new ServletHolder(SpringServlet.class);
         sh.setInitParameter( "com.sun.jersey.config.property.resourceConfigClass",
                 PackagesResourceConfig.class.getName() );
         sh.setInitParameter( PackagesResourceConfig.PROPERTY_PACKAGES,
                 _resourcePackages );
         sh.setInitOrder( 2 );
         context.addServlet(sh, servletPath + "/*");
         
         _server.start();
         LOG.info( "Successfully started jetty." );
    }


Perhaps this helps.

Cheers,
Martin


>
> Jean
>
>
> Paul Sandoz wrote:
> > Jean Aurambault wrote:
> >> Hi Paul,
> >>
> >> I have already seen this thread and I don't think this is the
> >> problem. It might be my jetty configuration which is not compliant
> >> with the Jersey's SpringServlet. I change mine to make it work
> >> following your recommendation about the
> >> ComponentProvider.getInjectableInstance.
> >
> > OK.
> >
> >
> >> That's a bad solution but I don't have much time right now and I
> >> don't know much about jetty ...
> >>
> >
> > Me neither.
> >
> > I looked at your code and i cannot see much difference to that of the
> > test code. You are using a context listener, the test code is using a
> > servlet instead, but i changed the test code to use a context
> > listener, and it worked just fine i.e. the modified test jetty init
> > code was the same in structure as yours.
> >
> > Perhaps it is a pom issue? the pom [1] supports both 2.0.5 and 2.5.2
> > and is based on profiles "spring20" and "spring25" respectively (the
> > latter is the default).
> >
> > Paul.
> >
> > [1]
> > http://download.java.net/maven/2/com/sun/jersey/jersey-spring/0.8-ea-SNAPSHOT/jersey-spring-0.8-ea-SNAPSHOT.pom
> >
> >
> >
> >> thanks for your help,
> >>
> >> Jean.
> >>
> >> Paul Sandoz wrote:
> >>> Hi Jean,
> >>>
> >>> Do you have multiple spring jars in your classpath?
> >>>
> >>> See here:
> >>>
> >>> http://forum.springframework.org/archive/index.php/t-11230.html
> >>>
> >>> Paul.
> >>>
> >>> Jean Aurambault wrote:
> >>>> My mistake I was trying to use jersey's SpringServlet and my unit
> >>>> tests were still using the old I had in the project...
> >>>>
> >>>> Anyway using jersey's springServlet,I have now a problem related to
> >>>> WebApplicationContext:
> >>>>
> >>>> java.lang.IllegalStateException: Root context attribute is not of
> >>>> type WebApplicationContext:
> >>>> org.springframework.web.context.support.XmlWebApplicationContext_at_11fb8c6:
> >>>> display name [Root WebApplicationContext]; startup date [Thu Jun 05
> >>>> 11:17:55 CEST 2008]; root of context hierarchy
> >>>> at
> >>>> org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(WebApplicationContextUtils.java:75)
> >>>>
> >>>> at
> >>>> org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:93)
> >>>>
> >>>> at
> >>>> com.sun.jersey.spi.spring.container.servlet.SpringServlet.initiate(SpringServlet.java:146)
> >>>>
> >>>> at
> >>>> com.sun.jersey.spi.container.servlet.ServletContainer.load(ServletContainer.java:328)
> >>>>
> >>>> at
> >>>> com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:136)
> >>>>
> >>>> at
> >>>> org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:433)
> >>>>
> >>>> at
> >>>> org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:342)
> >>>>
> >>>> at
> >>>> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463)
> >>>> at
> >>>> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
> >>>>
> >>>> at
> >>>> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >>>>
> >>>> at
> >>>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> >>>>
> >>>> at
> >>>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> >>>>
> >>>> at org.mortbay.jetty.Server.handle(Server.java:313)
> >>>> at
> >>>> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
> >>>>
> >>>> at
> >>>> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830)
> >>>>
> >>>> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
> >>>> at
> >>>> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
> >>>> at
> >>>> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
> >>>> at
> >>>> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:227)
> >>>>
> >>>> at
> >>>> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> >>>>
> >>>>
> >>>> Here is my configuration for Jetty:
> >>>>
> >>>> ServletHolder serveHolder = new
> >>>> ServletHolder(SpringServlet.class);
> >>>> serveHolder.setInitParameter(
> >>>> "com.sun.jersey.config.property.resourceConfigClass",
> >>>> "com.sun.jersey.api.core.PackagesResourceConfig");
> >>>>
> >>>> serveHolder.setInitParameter("com.sun.jersey.config.property.packages",
> >>>> "com.yahoo.l10nservice.resources;com.yahoo.l10nservice.providers");
> >>>> server = new Server(port);
> >>>> Context context = new Context(server, "/", Context.SESSIONS);
> >>>> ContextLoaderListener listener = new ContextLoaderListener();
> >>>> context.addEventListener(listener);
> >>>> context.setResourceBase("src/test/resources");
> >>>> context.getInitParams().put("contextConfigLocation",
> >>>> "classpath:applicationContext.xml
> >>>> classpath:applicationContextTest.xml");
> >>>> context.addServlet(serveHolder, "/*");
> >>>>
> >>>> Jean.
> >>>>
> >>>>
> >>>> Paul Sandoz wrote:
> >>>>> Hi Jean,
> >>>>>
> >>>>> Are you using a custom ComponentProvider? If so is the method
> >>>>>
> >>>>> ComponentProvider.getInjectableInstance
> >>>>>
> >>>>> returning null ? If so can you modify it to return the single
> >>>>> method parameter.
> >>>>>
> >>>>> If not can you send the code for the root resource class in question?
> >>>>>
> >>>>> Paul.
> >>>>>
> >>>>> Jean Aurambault wrote:
> >>>>>> Hi all,
> >>>>>>
> >>>>>> I tried the 0.8 snapshot and now I have another error !! any idea?
> >>>>>>
> >>>>>> java.lang.NullPointerException
> >>>>>> at
> >>>>>> sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:36)
> >>>>>>
> >>>>>> at
> >>>>>> sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:18)
> >>>>>>
> >>>>>> at java.lang.reflect.Field.get(Field.java:358)
> >>>>>> at
> >>>>>> com.sun.jersey.spi.resource.ResourceClassInjector.inject(ResourceClassInjector.java:270)
> >>>>>>
> >>>>>> at
> >>>>>> com.sun.jersey.impl.resource.SingletonProvider.init(SingletonProvider.java:69)
> >>>>>>
> >>>>>> at
> >>>>>> com.sun.jersey.spi.resource.ResourceProviderFactory.createProvider(ResourceProviderFactory.java:132)
> >>>>>>
> >>>>>> at
> >>>>>> com.sun.jersey.impl.model.ResourceClass.init(ResourceClass.java:174)
> >>>>>> at
> >>>>>> com.sun.jersey.impl.application.WebApplicationImpl.getResourceClass(WebApplicationImpl.java:250)
> >>>>>>
> >>>>>> at
> >>>>>> com.sun.jersey.impl.application.WebApplicationImpl.processRootResources(WebApplicationImpl.java:681)
> >>>>>>
> >>>>>> at
> >>>>>> com.sun.jersey.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:568)
> >>>>>>
> >>>>>> at
> >>>>>> com.yahoo.l10nservice.servlet.SpringServlet.initiate(SpringServlet.java:108)
> >>>>>>
> >>>>>> at
> >>>>>> com.sun.jersey.spi.container.servlet.ServletContainer.load(ServletContainer.java:328)
> >>>>>>
> >>>>>> at
> >>>>>> com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:136)
> >>>>>>
> >>>>>> at
> >>>>>> org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:433)
> >>>>>>
> >>>>>> at
> >>>>>> org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:342)
> >>>>>>
> >>>>>> at
> >>>>>> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463)
> >>>>>>
> >>>>>> at
> >>>>>> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
> >>>>>>
> >>>>>> at
> >>>>>> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >>>>>>
> >>>>>> at
> >>>>>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> >>>>>>
> >>>>>> at
> >>>>>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> >>>>>>
> >>>>>> at org.mortbay.jetty.Server.handle(Server.java:313)
> >>>>>> at
> >>>>>> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
> >>>>>>
> >>>>>> at
> >>>>>> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830)
> >>>>>>
> >>>>>> at
> >>>>>> org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
> >>>>>> at
> >>>>>> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
> >>>>>> at
> >>>>>> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
> >>>>>> at
> >>>>>> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:227)
> >>>>>>
> >>>>>> at
> >>>>>> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> >>>>>>
> >>>>>>
> >>>>>> Jean.
> >>>>>>
> >>>>>>
> >>>>>> Paul Sandoz wrote:
> >>>>>>> Lars Tackmann wrote:
> >>>>>>>> On Tue, Jun 3, 2008 at 5:52 PM, Paul Sandoz
> >>>>>>>> <Paul.Sandoz_at_sun.com> wrote:
> >>>>>>>>> I wonder if it is my fault. This is the rather embarrassing
> >>>>>>>>> piece of code:
> >>>>>>>>>
> >>>>>>>>> public BaseRule(UriTemplate template) {
> >>>>>>>>> assert template != template; <- !!!!!!!!!!!!
> >>>>>>>>>
> >>>>>>>>> this.template = template;
> >>>>>>>>> }
> >>>>>>>>>
> >>>>>>>>> Find bugs spotted it, but i did not spot that find bugs did
> >>>>>>>>> until after 0.7
> >>>>>>>>> was released. However, it seemed to be benign and did not
> >>>>>>>>> result in any
> >>>>>>>>> failures to unit tests or running the examples, otherwise i
> >>>>>>>>> would have
> >>>>>>>>> noticed and fixed it immediately.
> >>>>>>>>
> >>>>>>>> Indeed it is fixed in the latest maven pom snapshot, which can be
> >>>>>>>> obatined by adding the following lines to pom.xml
> >>>>>>>>
> >>>>>>>
> >>>>>>> Great. Glad the maven stuff is working :-)
> >>>>>>>
> >>>>>>> Paul.
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>>> ---------------------------------------------------------------------
> >>>>>>
> >>>>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> >>>>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
> >>>>>>
> >>>>>
> >>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> >>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
> >>>>
> >>>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> >> For additional commands, e-mail: users-help_at_jersey.dev.java.net
> >>
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net