SpringServletContainerInitializer ne peut pas être converti en javax.servlet.ServletContainerInitializer
Je tente de déplacer un xml Spring MVC application à Java Configuration app. Il semble y avoir une incompatibilité avec les différents java.servlet classes disponibles dans maven. Par exemple, certains offrent la addServlet() la méthode et certains ne le font pas.
Voici ma config classe:
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) throws ServletException {
AnnotationConfigWebApplicationContext rootContext =
new AnnotationConfigWebApplicationContext();
rootContext.register(JpaSandboxConf.class);
ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet());
registration.setLoadOnStartup(1);
registration.addMapping("/myapp/*");
}
}
Qui semble plutôt controversé. Afin d'obtenir le
container.addServlet()
méthode, je l'ai inclus dans mon pom:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>7.0.30</version>
</dependency>
J'ai essayé ceci, mais le ServletContext classe à partir de l'entrée ci-dessous ne fonctionne PAS (en ce qu'il didnot fournir les addServlet () (méthode):
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>com.springsource.javax.servlet</artifactId>
<version>2.5.0</version>
<scope>provided</scope>
</dependency>
Lorsque je tente de l'exécuter à l'aide de cette
mvn clean tomcat7:run
J'ai malheureusement obtenir
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/]]
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
at java.util.concurrent.FutureTask.get(FutureTask.java:111)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1130)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:782)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1568)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1558)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
... 7 more
Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer
at org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1543)
at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1464)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1190)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:825)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:300)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
Je vois que l'un de classe est à venir à partir de framework Spring et l'autre de javax.servlet, mais une fois de plus, la méthode n'existe pas au Printemps à condition de la classe (ce qui est frustrant, parce que cet exemple existe dans le Ressort 3.2 documentation elle-même.
Je suis à l'aide de Printemps 3.2. Je ne suis PAS à l'aide d'Eclipse (tous les exemples sont basés sur Eclipse, je suis dans l'Ide). C'est un projet maven
J'apprécie votre aide.
source d'informationauteur Brian Dolan | 2013-03-10
Vous devez vous connecter pour publier un commentaire.
Une meilleure servlet api 3.0 dépendance à l'entrée dans le pom est disponible ici - https://github.com/SpringSource/greenhouse/tree/servlet3vous devez également la marque de la portée de l'
provided
sinon le pot sera inclus dans la version finale de la guerre qui va interférer avec le pot par le conteneur, ce qui semble être votre cas.J'ai eu un problème similaire sans Printemps, où
mvn tomcat7:run
n'a pas de travail, en dépit de la servlet déploiement d'OpenShift l'amende juste. Comme par Biju Kunjummen réponse, le problème pour moi est qui servlet-api, j'était en train de rassembler contre.Cassé:
Fixe:
Pas très bien pourquoi, mais ça fonctionne maintenant.
J'ai été confrontée au même problème wis gradle plugin tomcat. J'ai mis à jour la version de tomcat à 8 et il a travaillé.
J'ai utilisé
providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
pour résoudre le problème
Je suis confronté à la même erreur lors de l'utilisation de Tomcat dans Eclipse.
- Je résoudre cela en allant à l'onglet Serveurs > double-cliquez sur le Tomcat et décochez la case "Servir les modules sans publication"