web-dev-qa-db-fra.com

Tomcat ne parvient pas à déployer .war

J'essaie de suivre this tutoriel sur la création d'un simple service Web REST, mais je parviens toutefois à le déployer sur Tomcat, ce qui génère une exception:

FAIL - Application at context path /restful could not be started
FAIL - Encountered exception org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/restful]]

J'ai cherché une solution et trouvé cette question et cette une et ils me font penser qu'il s'agit d'un problème de mappage de servlets, mais je ne sais pas comment le résoudre!

Voici mon fichier de log:

18/12/2012 9:57:16 AM org.Apache.catalina.startup.HostConfig deployWAR
SEVERE: Error deploying web application archive /opt/Tomcat7/webapps/restful.war
Java.lang.IllegalStateException: ContainerBase.addChild: start:
org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/restful]]
    at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:904)
    at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:877)
    at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:633)
    at org.Apache.catalina.startup.HostConfig.deployWAR(HostConfig.Java:977)
    at org.Apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.Java:1655)
    at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:441)
    at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:303)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:138)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
    at Java.lang.Thread.run(Thread.Java:619)

voici mon fichier web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://Java.Sun.com/xml/ns/javaee" version="3.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee
        http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <servlet>
    <servlet-name>RestfulContainer</servlet-name>
    <servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.Sun.jersey.config.property.packages</param-name>
        <param-value>com.mcnz.ws</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>RestfulContainer</servlet-name>
    <url-pattern>/resources/*</url-pattern>
  </servlet-mapping>    

</web-app>

et au risque de vous donner beaucoup trop d’informations, voici un extrait de la structure de mon dossier:

.:
WEB-INF

./WEB-INF:
classes
lib
web.xml

./WEB-INF/classes:
com

./WEB-INF/classes/com:
mcnz

./WEB-INF/classes/com/mcnz:
ws

./WEB-INF/classes/com/mcnz/ws:
HelloWorldResource.class
HelloWorldResource.Java

./WEB-INF/lib:
asm-3.1.jar
jackson-core-asl-1.9.2.jar
jackson-jaxrs-1.9.2.jar
jackson-mapper-asl-1.9.2.jar
jackson-xc-1.9.2.jar
jersey-client-1.16.jar
jersey-core-1.16.jar
jersey-json-1.16.jar
jersey-server-1.16.jar
jettison-1.1.jar
jsr311-api-1.1.1.jar
15
Pete

Comme le montre le commentaire ci-dessus, le problème s'est avéré que l'application web.xml faisait référence à une classe Java dans une définition de servlet. Le problème a été corrigé en s'assurant que l'application contenait réellement cette classe. Le fichier JAR manquant a été localisé et placé dans le répertoire WEB-INF/lib.

10
EJK

J'ai rencontré un problème similaire lors de l'exécution de ncwms sur Apache Tomcat/8.5.38 Apparemment, je devais maintenant ajouter quelques bibliothèques Java supplémentaires qui avaient été supprimées dans la dernière version de Java.

(Voir les détails ici: Comment résoudre Java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException dans Java 9 )

La modification était dans ce fichier: /Opt/Tomcat/bin/catalina.sh

Java_OPTS="$Java_OPTS $JSSE_OPTS --add-modules Java.xml.bind"

Mais même cela ne suffisait pas pour NMCs. Des problèmes d'importation des jeux de données se sont posés par la suite. Je suis donc revenu à une version différente de Java:

Java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
0
user3788120