[英]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#put
由PreferenceManager.readPersistenceProperties
调用,因此很可能是因为属性文件中缺少某些内容,因此该值为null。
此NPE导致无法加载DfClient
类。
DfPreferences是加载DFC配置文件dfc.properties的类。 它一定有问题。
哦,我并没有指出根本原因,但是找到了每次都能使用的解决方案。 EMC提供了一种称为Documentum Composer的Eclipse,可以与Documentum Projects一起使用。 由于Eclipse的变化,我们可以在其中创建其他类型的项目,例如普通Java项目,动态Web项目,Web服务。 因此,我在Documetnum Composer中重新创建了我的项目,并将其导出为JAR和它起作用的whoaaaa。
我尝试了很多次,并且一直有效。
需要注意的几点:
这通常是由于dfc.properties不正确引起的。
首选项存储在全局注册表存储库中,连接详细信息应在dfc.properties中指定。 如果不是,这(或可能发生类似的错误)。
另外,请始终尝试清除缓存并使用dfc jar的正确版本(v6.7内容服务器需要6.7 jar,等等。)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.