7

私は Eclipse で Web アプリケーションを作成しており、XStream Serialization Library を使用して My JSON を生成しています。

サーブレットによって呼び出されるクラスに JSON を構築するコードをカプセル化しました。次に、カプセル化されたクラスにはテスト用のメインメソッドがあり、実行するとすべて正常に動作するようです。

ただし、サーブレットからクラスの呼び出しを使用するとjava.lang.NoClassDefFoundError、XStream ライブラリをロードしていないというエラーが表示されます。ビルド パスが間違っていると思いますが、XStream ライブラリをプロジェクトのビルド パスに設定したので、動作するはずです。

ここで何がうまくいかない可能性がありますか?

以下は正確な例外です。

java.lang.ClassNotFoundException: com.thoughtworks.xstream.io.HierarchicalStreamDriver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at SecurePaymentAjaxData.doPost(SecurePaymentAjaxData.java:44)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

xstream クラスを使用する関連コードは次のとおりです。

XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("CallDataUpdate", CallDataUpdate.class);
xstream.alias("CardStatus", CardStatus.class);
String jsonData = xstream.toXML(updateData);

このコードは、Java アプリケーションとして実行すると問題なく動作することを強調します。これは、ライブラリのロードに関係していると確信しています。どこが間違っているのかわかりません。

4

4 に答える 4

11

ビルド方法とデプロイ方法には違いがあることを忘れないでください。つまり、XStream に対してビルドしている可能性がありますが、展開用に .war ファイルにもパッケージ化する必要があります。

結果の .war ファイルを展開し (jar tvf {filename}内容を確認するため)、そこにあるかどうかを確認します (.jar ファイルが下にあるWEB-INF/lib)。そうではないと思います。

于 2009-05-13T11:28:27.417 に答える
10

私は問題を見つけました:

プロジェクトを右クリックしてプロパティを選択すると、「Java EE モジュールの依存関係」を設定して、使用しているモジュールを含めることができます。

ちょっとプレストそれは動作します。

于 2009-05-13T11:30:26.760 に答える
9

JavaEEモジュールの依存関係が進むべき道のようです。ただし、Eclipse Heliosではメニュー名が変更されました。その特定のメニューは、現在「DeploymentAssembly」の下にあります。

于 2010-12-10T14:07:59.927 に答える
0

犯しやすい間違いは、WEB_INF の下のディレクトリの名前を間違えることです。lib ではなく libs という名前を付けました。コンパイルは正常に行われますが、Tomcat はエラーをスローします。

于 2009-09-08T15:38:06.367 に答える