我在尝试访问存储库时遇到上述错误 使用来自servlet的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表单发布到这个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
答案 0 :(得分:0)
您最初获得ClassNotFoundException
因为该类不在类路径中。你已经修好了。 NoClassDefFoundError
表示类路径中的类是,但初始化时出现问题。有关此区别的详细信息,另请参阅this question。
所以类TransientRepository
就在那里,但很可能是TransientRepository
引用的类。这意味着您很可能没有在类路径中包含其他必需的jar文件。有关依赖项的完整列表(所需的jar文件),请参阅jackrabbit-standalone-2.4.2.jar
,或查看Jackrabbit文档。它也可能意味着您拥有所有jar文件,但至少有一个jar文件版本错误。
答案 1 :(得分:0)
您最初获得ClassNotFoundException
因为该类不在类路径中。你已经修好了。
NoClassDefFoundError
表示类在类路径中,但初始化时出现问题。