Java InvocationTargetException

时间:2013-11-15 15:01:24

标签: java exception-handling nullpointerexception documentum invocationtargetexception

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

enter image description here

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

6 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

Hashtable#put调用

PreferenceManager.readPersistenceProperties,因此很可能是因为属性文件中缺少某些内容,因此该值为空。

此NPE导致无法加载DfClient类。

答案 2 :(得分:0)

这是最可能出现的问题:

其中一个类的静态初始化程序正在添加一个带有null键或null值的条目到Hashtable,这不允许{ {1}}键或值。

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

哦,我没有指出根本原因,但发现解决方案肯定会每次都有效。 EMC提供了一种称为Documentum Composer的Eclipse风格,可与Documentum Projects一起使用。从Eclipse变体开始,我们可以创建其他类型的项目,如普通Java项目,动态Web项目,Web服务。所以我在Documetnum Composer中重新创建了我的项目并将其导出为JAR,并将其导出。

我尝试了很多次,这一直都很有效。

需要注意的一些要点:

  • 您必须将Composer安装文件夹中的dfc.properties文件替换为Content Server中的文件
  • Composer中的Export to JAR向导与Eclipse中的一个向导
  • 略有不同

答案 5 :(得分:0)

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

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

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