2010-11-17 8 views
2

J'ai deux classes de ressources simples dans mon application de service Web configurée par Spring. L'une racine (/ rapports) fonctionne correctement en tout chemin après qui retourne une 404. Voici les classes de ressources:Jersey avec Spring donnant toujours 404 pour les sous-ressources

package com.factorlab.ws.reports; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Scope; 
import org.springframework.stereotype.Component; 

@Component 
@Scope("prototype") 
@Path("reports") 
public class ReportsResource { 

    @Autowired 
    private TestItemResource timelineResource; 

    @Path("testitem") 
    public TestItemResource getTimelinResource() { 
     return timelineResource; 
    } 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getTestText() { 
     return "Success!\n"; 
    } 
} 

et le sous-ressource est ici:

package com.factorlab.ws.reports; 

import javax.ws.rs.GET; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import org.springframework.context.annotation.Scope; 
import org.springframework.stereotype.Component; 

@Component 
@Scope("prototype") 
public class TestItemResource { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String hello() { 
     return "Success!\n"; 
    } 
} 

Je Déployez l'application à Jetty dans une webapp appelée factorlab-ws. curl http://localhost:8080/factorlab-ws/reports donne du succès. Cependant curl http://localhost:8080/factorlab-ws/reports/testitem donne un statut 404.

En outre, j'ai mis des points d'arrêt dans chacune des méthodes dans ReportsResouce. getTestText() se bloque bien, mais getTimelineResource() ne le fait pas, ce qui implique qu'il n'entre jamais dans cette méthode.

Que pourrais-je manquer?

Répondre

0

J'ai trouvé le problème - il était dans mon web.xml. J'avais configuré plusieurs chemins pour le mappage de servlet à la servlet Jersey Spring, mais cela n'a pas fonctionné. Qu'est-ce que le travail était:

<servlet-mapping> 
    <servlet-name>jersey-spring</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Je ne pouvais pas tout autre application pour travailler - me donner 404 est sur tout, sauf pour l'url motif explicite. Donc, cela résout mon problème, mais est-ce que quelqu'un sait si c'est un bug? Ou y a-t-il une raison pour laquelle cela est censé être la façon dont cela fonctionne?

+0

Le modèle d'URL de "/" ne fonctionnait pas pour moi; cependant, il était utile d'activer le suivi https://blogs.oracle.com/sandoz/entry/tracing_in_jersey. –