this シンプルなREST= Webサービスの作成に関するチュートリアルですが、Tomcatにデプロイすると例外がスローされます。
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]]
私は解決策を探してこれを見つけました question そしてこれ one そして彼らはそれがサーブレットマッピングの問題だと思いますそれ!
ログファイルは次のとおりです。
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)
ここに私の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>
そして、あまりにも多くの情報を提供するリスクがあるので、ここに私のフォルダ構造のリストを示します:
.:
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
上記のコメントが示すように、問題は、アプリケーションのweb.xmlがサーブレット定義でJavaクラスを参照していることであることが判明しました。不足しているjarファイルが見つかり、WEB-INF/libディレクトリに置かれました。
Apache Tomcat/8.5.38でncwmsを実行する際に同様の問題に遭遇しました。明らかに、最新のJavaバージョンで削除されたいくつかのJavaライブラリを追加する必要がありました。
(詳細はこちらをご覧ください: Java.lang.NoClassDefFoundErrorの解決方法:Java 9 のjavax/xml/bind/JAXBException)
変更はこのファイルにありました:/opt/Tomcat/bin/catalina.sh
Java_OPTS="$Java_OPTS $JSSE_OPTS --add-modules Java.xml.bind"
しかし、これでもncwmsには十分ではありませんでした。後でデータセットのインポートで問題が発生したため、別のバージョンの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)