users@jersey.java.net

Re: Jersey with Spring always giving 404 for subresources

From: Jason Erickson <jason_at_jasonerickson.com>
Date: Wed, 17 Nov 2010 14:48:42 -0800

Thanks, but I found this blog post that suggested basically the same thing, but it didn't work. http://sleeplessinslc.blogspot.com/2009/03/sub-resources-with-jerseyspring-jax-rs.html

One thing that did work was adding a servlet mapping in my web.xml to explicitly look for /reports/testitem. That could work for this toy problem, but doesn't solve the issue for things like /users/{id} since I can't very well explicitly put servlet mapping per entity in my web.xml. Plus, even for this toy problem, that's kind of ugly isn't it? Is there something about web.xml that I don't understand? Here is mine:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
        <display-name>FactorLab Web Services</display-name>
        <context-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
        <filter>
                <filter-name>HibernateFilter</filter-name>
                <filter-class>com.factorlab.ws.HibernateSessionRequestFilter</filter-class>
        </filter>
        <filter-mapping>
                <filter-name>HibernateFilter</filter-name>
                <url-pattern>/obs/*</url-pattern>
        </filter-mapping>
        <filter-mapping>
                <filter-name>HibernateFilter</filter-name>
                <url-pattern>/phenomenonGroups/*</url-pattern>
        </filter-mapping>
        <filter-mapping>
                <filter-name>HibernateFilter</filter-name>
                <url-pattern>/reports/*</url-pattern>
        </filter-mapping>
        <listener>
                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <servlet>
                <servlet-name>jersey-spring</servlet-name>
                <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
                <init-param>
                        <param-name>com.sun.jersey.config.property.packages</param-name>
                        <param-value>com.factorlab.ws</param-value>
                </init-param>
                <init-param>
                        <param-name>com.sun.jersey.config.property.WadlGeneratorConfig</param-name>
                        <param-value>com.factorlab.ws.FactorLabWADLGenerator</param-value>
                </init-param>
        </servlet>
        <servlet-mapping>
                <servlet-name>jersey-spring</servlet-name>
                <url-pattern>/obs/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
                <servlet-name>jersey-spring</servlet-name>
                <url-pattern>/phenomenonGroups/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
                <servlet-name>jersey-spring</servlet-name>
                <url-pattern>/reports/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
                <servlet-name>jersey-spring</servlet-name>
                <url-pattern>/reports/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
                <servlet-name>default</servlet-name>
                <url-pattern>*.html</url-pattern>
        </servlet-mapping>
</web-app>