2

尝试使用来自 servlet 的 jackrabbit-standalone-2.4.2.jar 访问存储库时,出现上述错误。我没有使用jackrabbit war,因为我已经有一个胖客户端应用程序在运行,并且我想尽可能多地重用代码。我只是假设这样做是可能的。

为了测试,我创建了一个小型 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 表单发布到这个 servlet 时,异常有两个部分:

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意味着该类位于类路径中,但初始化它时出现问题。

于 2012-08-16T13:22:29.220 回答
0

您最初得到的是ClassNotFoundException因为该类不在类路径中。你已经解决了。这NoClassDefFoundError意味着该类位于类路径中,但初始化它时出现问题。有关此区别的详细信息,另请参阅此问题

所以类TransientRepository是存在的,但很可能是引用的类TransientRepository不存在。这意味着您很可能没有在类路径中包含其他必需的 jar 文件。有关依赖项的完整列表(所需的 jar 文件),请参阅jackrabbit-standalone-2.4.2.jar或 Jackrabbit 文档。这也可能意味着您拥有所有 jar 文件,但至少有一个 jar 文件是错误的版本。

于 2012-08-16T08:47:12.707 回答