Je développe une application simple en utilisant Jersey 1.x, Guice et en essayant de tourner sur Tomcat. J'ai utilisé le filtre Guice et Guice Listener ainsi que les ressources et l'application.Problème avec Jersery1.x, Guice et Tomcat
Ci-dessous mon web.xml:
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<display-name>Guice Listener</display-name>
<listener-class>com.simple.application.GuiceListener</listener-class>
</listener>
Et en utilisant GuiceListener j'injectais toutes mes dépendances,
public class GuiceListener extends GuiceServletContextListener {
private Injector injector;
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
try {
super.contextDestroyed(servletContextEvent);
} finally {
injector = null;
}
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
injector = Guice.createInjector(new SimpleServlet());
super.contextInitialized(servletContextEvent);
injector.injectMembers(this);
}
@Override
protected Injector getInjector() {
return injector;
}
}
Et voilà comment mon Servlet ressemble
public class SimpleServlet extends JerseyServletModule {
@Override
protected void configureServlets() {
configureGuiceServlet();
}
private void configureGuiceServlet() {
bind(SimpleResource.class).in(Scopes.SINGLETON);
serve("/service/*").with(GuiceContainer.class);
bind(Manager.class).to(ManagerImpl.class);
}
}
Et je créé une ressource avec une méthode GET,
@Path("/stuff")
public class SimpleResource {
private final ManagerImpl manager;
@Inject
public SimpleResource(final ManagerImpl manager) {
this.manager = manager;
}
@GET
@Path("{id}")
@Produces(MediaType.TEXT_HTML)
public String submitData(@PathParam("id") final String id) {
String welcomeScreen = manager.getWelcomeScreen();
return "This is" + welcomeScreen + id;
}
}
J'ai utilisé Constructor Injection pour injecter des classes.
Et voilà comment ma demande semble
public class SimpleApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
return ImmutableSet.<Class<?>>builder()
.add(SimpleResource.class)
.build();
}
}
je déploie ce sur Tomcat 7 et lorsque je tente de frapper le point final d'application, je reçois 404,
http://localhost:9999/simple-0.0.1-SNAPSHOT/service/stuff/id
I peut voir dans les journaux que toutes les classes sont instanciées avec succès.
Ce sont les dépendances dans mon pom.
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.18.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-guice</artifactId>
<scope>compile</scope>
<version>1.18.6</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<scope>compile</scope>
<version>3.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<scope>compile</scope>
<version>14.0</version>
</dependency>
</dependencies>
Y at-il quelque chose qui me manque en ce qui concerne Tomcat avec guice?
Comme mentionné j'ai changé mon servlet d'étendre à partir JerseyServletModule au lieu de ServletModule, et aussi suggéré que je changé le SimpleResource et SimpleServlet, mais je reçois toujours 404 comme mentionné. Ceci est un lien vers les changements https://github.com/sasidhar06/simpleproject – user1767288
Pouvez-vous modifier votre message pour mettre à jour votre code à ce qu'il est maintenant s'il vous plaît afin que je puisse voir ce que c'est maintenant? –
J'ai modifié mon message pour voir à quoi ressemble mon code maintenant – user1767288