2

サーブレットからjackrabbit-standalone-2.4.2.jarを使用してリポジトリにアクセスしようとすると、上記のエラーが発生します。すでにシッククライアントアプリが動作していて、できるだけ多くのコードを再利用したいので、ジャックラビット戦争は使用しませんでした。私はこれが可能だと思っていました。

テストするために、小さなWebアプリケーションを作成しました。zipファイルを添付できないため、以下のdoPost()メソッドをコピーします。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Repository repository = new TransientRepository(
       "repository.xml", //embedded within the war
       "path/to/home/dir");
    Session session = null;
    try {
        session = repository.login();
        System.out.println("root node identifier: " +
        session.getRootNode().getIdentifier());
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        session.logout();
    }
}

htmlフォームからこのサーブレットに投稿すると、例外は2つの部分になります。

java.lang.NoClassDefFoundError: javax/jcr/Repository
java.lang.ClassNotFoundException: javax.jcr.Repository

jcr-2.0.jarを追加すると、別のエラーが発生します。

java.lang.NoClassDefFoundError: org/apache/jackrabbit/core/TransientRepository
4

2 に答える 2

0

ClassNotFoundExceptionそのクラスがクラスパスになかったため、元々取得しました。あなたはそれを修正しました。これNoClassDefFoundErrorは、クラスクラスパスにあることを意味しますが、初期化に問題がありました。この区別の詳細については、この質問も参照してください。

したがって、クラスTransientRepositoryはそこにありますが、おそらく、によって参照されるクラスTransientRepositoryはありません。これは、クラスパスに他の必要なjarファイルを含めなかった可能性が高いことを意味します。依存関係(必要なjarファイル)の完全なリストについては、を参照するjackrabbit-standalone-2.4.2.jarか、Jackrabbitのドキュメントを参照してください。また、すべてのjarファイルがあることを意味している可能性がありますが、jarファイルの少なくとも1つが間違ったバージョンです。

于 2012-08-16T08:47:12.707 に答える
0

ClassNotFoundExceptionそのクラスがクラスパスになかったため、元々取得しました。あなたはそれを修正しました。

これNoClassDefFoundErrorは、クラスがクラスパスにあることを意味しますが、初期化に問題がありました。

于 2012-08-16T13:22:29.220 に答える