0

我使用 EMC Documentum Foundation Classes 在 documentum 存储库中执行了一些操作。代码工作正常。我将项目导出为可运行的 JAR,然后尝试运行它。但是我得到了以下错误,我无法理解它。

在此处输入图像描述

这是 DocMovementHandler.getSession() 的代码实际上这不是新代码,而是用于获取文档会话的常规代码

public IDfSession getSession(String userName, String password)
{
    DfClientX clientx = null;
    IDfClient client = null;
    IDfSession session = null;
    try {
        // create a client object using a factory method in DfClientX
        clientx = new DfClientX();
        client = clientx.getLocalClient();   //takes time

        // call a factory method to create the session manager
        IDfSessionManager sessionMgr = client.newSessionManager();

        // create an IDfLoginInfo object and set its fields
        IDfLoginInfo loginInfo = clientx.getLoginInfo();
        loginInfo.setUser(userName);
        loginInfo.setPassword(password);

        // set single identity for all docbases
        sessionMgr.setIdentity("xyz_repo", loginInfo);
        session = sessionMgr.getSession("xyz_repo");   //takes time 
        //sessionMgr.beginTransaction();
        System.out.println("Session obtaied.");         
    }
    catch (DfServiceException dse)
    {
        DfLogger.debug(this, "Error while beginning transaction. ", null, dse);
        dse.printStackTrace();
    }

    catch (Exception e) 
    {
        DfLogger.debug(this, "Error while creating a new session. ", null, e);
        e.printStackTrace();
    } 
    return session;
}

第 38 行是client = clientx.getLocalClient();

4

6 回答 6

3

InvocationTargetException是一个包装器。它说,“在这个反射调用后面发生了一个异常”,你使用 getCause() 来获取内部异常。

堆栈跟踪包含内部异常。这是一个ExceptionInInitializerError. 那是另一个包装。它说,“无论您做什么都会导致加载一个新类,并且该类的静态初始化程序引发了异常”。

此链中的最后一个例外是NullPointerException. 这就是你需要解决的问题。这意味着你需要调试这个com.documentum东西。正如评论指出的那样,这并不容易。

于 2013-11-15T15:21:57.043 回答
1

这是最可能的问题:

您已敲击其名称的其中一个类中的静态初始化程序正在向 a 添加一个带有null键或null值的条目Hashtable,这不允许null键或值。

它使用Hashtable作为存储一堆持久属性和所有这些的地方,我的猜测是其中一个条目的值是null(这是一种完全合理的方式来表明某些功能不可用或类似的东西)。

现在不推荐使用Hashtable的需要替换为更现代的HashMap.

如果它是一个库,你不能只是修改,你应该用更新的版本替换整个库。

于 2013-11-15T15:29:54.380 回答
0

这里有一些线索可能会有所帮助。由NullPointerException抛出Hashtable#put,这通常是因为键或值为空。

Hashtable#put由 调用PreferenceManager.readPersistenceProperties,因此很可能是因为属性文件中缺少某些内容,因此值为空。

此 NPE 导致DfClient无法加载类。

于 2013-11-15T15:24:49.807 回答
0

DfPreferences 是加载 DFC 配置文件 dfc.properties 的类。它一定有什么问题。

于 2013-11-28T13:25:33.407 回答
0

Ohkay 我没有指出根本原因,但找到了每次都肯定有效的解决方案。EMC 提供了一种名为 Documentum Composer 的 Eclipse 风格,用于处理 Documentum 项目。由于 Eclipse 变体,我们可以在其中创建其他类型的项目,如普通 Java 项目、动态 Web 项目、Web 服务。因此,我在 Documetnum Composer 中重新创建了我的项目并将其导出为 JAR,并且它工作正常。

我尝试了很多次,并且一直有效。

需要注意的几点:

  • 您必须将 Composer 安装文件夹中的 dfc.properties 文件替换为 Content Server 中的文件
  • Composer 中的 Export to JAR 向导与 Eclipse 中的有点不同
于 2013-11-28T16:12:02.450 回答
0

这通常是由 dfc.properties 不正确引起的。

首选项存储在全局注册表存储库中,连接详细信息应在 dfc.properties 中指定。如果不是,这(或可能发生类似错误)。

此外,请始终尝试清除缓存并使用正确版本的 dfc jar(v6.7 内容服务器需要 6.7 jar 等...)。

于 2014-04-22T13:45:13.783 回答