我已使用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();
答案 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,并将其导出。
我尝试了很多次,这一直都很有效。
需要注意的一些要点:
答案 5 :(得分:0)
这通常是由dfc.properties不正确引起的。
首选项存储在全局注册表存储库中,连接详细信息应在dfc.properties中指定。如果没有,这(或可能发生类似的错误)。
此外,总是尝试清除缓存并使用正确版本的dfc jar(v6.7内容服务器需要6.7个jar等)。