【问题标题】:Java InvocationTargetExceptionJava 调用目标异常
【发布时间】:2013-11-29 00:27:44
【问题描述】:

我使用 EMC Documentum 基础类在 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();

【问题讨论】:

  • 除非您可以发布该行的代码,否则您需要询问 documentum 支持。
  • 为什么有些控制台文本被删除了?如果您不能告诉我们问题是什么,我们将无法帮助您解决问题。
  • 显然你把空值放到一个集合(地图、集合或类似的东西)。也许缺少某些属性?
  • @AJMansfield 实际上这些是我不想透露的特定于组织的包名称。但相信我,它们只是发生异常的方法名称

标签: java exception-handling nullpointerexception documentum invocationtargetexception


【解决方案1】:

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

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

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

【讨论】:

  • 好吧,com.documentum 是 JAR。我不明白为什么当我通过 eclipse 运行项目时没有引起。将其打包在 JAR 中会带来很多问题
  • 在这种情况下,我想知道将项目导出为可运行 JAR 的最佳/不太容易出错的步骤
【解决方案2】:

这是最可能的问题:

您已敲击其名称的其中一个类中的静态初始值设定项正在将具有null 键或null 值的条目添加到Hashtable,这不允许null 键或值。

它使用Hashtable 作为存储一堆持久属性和所有这些的地方,我猜测其中一个条目的值是null(这是一种非常合理的指示方式某些功能不可用或类似情况)。

现在已弃用的 Hashtable 需要替换为更现代的 HashMap

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

【讨论】:

  • 顺便说一句,我知道,Hashtable 不是正式的@Depricated。但是 javadoc 非常清楚地表明你不应该再使用它了。
【解决方案3】:

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

Hashtable#putPreferenceManager.readPersistenceProperties 调用,所以很可能是因为属性文件中缺少某些内容,因此值为 null。

此 NPE 导致无法加载 DfClient 类。

【讨论】:

    【解决方案4】:

    DfPreferences 是加载 DFC 配置文件 dfc.properties 的类。肯定有问题。

    【讨论】:

      【解决方案5】:

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

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

      需要注意的几点:

      • 您必须将 Composer 安装文件夹中的 dfc.properties 文件替换为 Content Server 中的文件
      • Composer 中的导出到 JAR 向导与 Eclipse 中的有点不同

      【讨论】:

        【解决方案6】:

        这通常是由于 dfc.properties 不正确造成的。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-28
          • 2018-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-15
          • 2023-02-22
          • 2019-01-22
          相关资源
          最近更新 更多