繁体   English   中英

Java InvocationTargetException

[英]Java InvocationTargetException

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

在此处输入图片说明

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

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();

InvocationTargetException是包装器。 它说:“此反射调用后发生异常”,然后使用getCause()获取内部异常。

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

该链中的最后一个异常是NullPointerException 那就是您需要解决的问题。 这意味着您需要调试com.documentum 正如评论所指出的那样,这并非易事。

这是最可能出现的问题:

其中一个已被其名称击中的类中的静态初始值设定项正在向Hashtable添加带有null键或null值的条目,该表不允许null键或值。

它使用Hashtable作为存储一堆持久性属性以及所有其他属性的地方,我的猜测是其中一个条目的null (这是一种完全合理的方式,用于指示某些功能不可用或某些东西像那样)。

现在已不再使用的Hashtable需要替换为更现代的HashMap

如果它是一个库,您不能仅仅对其进行修改,则应使用更新的版本替换整个库。

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

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

此NPE导致无法加载DfClient类。

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

哦,我并没有指出根本原因,但是找到了每次都能使用的解决方案。 EMC提供了一种称为Documentum Composer的Eclipse,可以与Documentum Projects一起使用。 由于Eclipse的变化,我们可以在其中创建其他类型的项目,例如普通Java项目,动态Web项目,Web服务。 因此,我在Documetnum Composer中重新创建了我的项目,并将其导出为JAR和它起作用的whoaaaa。

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

需要注意的几点:

  • 您必须用Content Server中的一个替换Composer安装文件夹中的dfc.properties文件。
  • Composer中的“导出到JAR”向导与Eclipse中的有点不同

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM