我正在开发一个 Rhapsody Java 插件,它与 RTC 连接以获取一些数据。当我将代码作为 Java 应用程序运行时,该代码在 Eclipse 中运行良好。但是当我在 Rhapsody 中加载与插件相同的代码时, getTeamRepository(repoURI) 会抛出异常。
m_monitor = (IProgressMonitor) new NullProgressMonitor();
TeamPlatform.startup();
if(TeamPlatform.isStarted())
{
try
{
m_iTeamRepository = TeamPlatform.getTeamRepositoryService().getTeamRepository(repoUri);
m_iTeamRepository.registerLoginHandler(new DefaultLoginHandler(l_userTID, l_userPassword));
m_iTeamRepository.login(m_monitor);
}
catch(Exception e)
{
m_rhapsodyActiveApplication.writeToOutputWindow("Log", "\nException occurred while logging in User:"+l_userTID+"!");
e.printStackTrace();
}
}
异常日志:
[2024-09-13 02:24:51 Proc=28524 Thr=15928 App=0xf8dde68] 插件 消息:调用插件方法时出现异常:
插件:exportFeatureLineUp.ExportFeatureLineUpPlugin 方法:RhpPluginInvokeItem Sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处的 java.lang.reflect.InitationTargetException sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) 在 java.lang.reflect.Method.invoke(Method.java:508) 处 com.telelogic.rhapsody.core.JavaPluginsManager.callPluginMethod(未知 来源)由: java.lang.ExceptionInInitializerError 引起,位于 java.lang.J9VMInternals.ensureError(J9VMInternals.java:148) 处 java.lang.J9VMInternals.recordInitializationFailure(J9VMInternals.java:137) 在 com.ibm.team.repository.client.internal.TeamRepository。(TeamRepository.java:446) 在 com.ibm.team.repository.client.internal.TeamRepositoryService.createSharedTeamRepository(TeamRepositoryService.java:526) 在 com.ibm.team.repository.client.internal.TeamRepositoryService.getTeamRepository(TeamRepositoryService.java:113) 在 com.ibm.team.repository.client.internal.TeamRepositoryService.getTeamRepository(TeamRepositoryService.java:132) 在exportFeatureLineUp.ExportFeatureLineUp.loginToRTC(XYZ.java:942) 在exportFeatureLineUp.ExportFeatureLineUp.runPlugin(XYZ.java:1031) 在 exportFeatureLineUp.ExportFeatureLineUpPlugin.RhpPluginInvokeItem(ExportFeatureLineUpPlugin.java:25)
原因:java.lang.IllegalArgumentException:类型名称 Contributor 和命名空间 URI com.ibm.team.repository 不匹配 解析为 IItemType。
在 com.ibm.team.repository.common.internal.querypath.AbstractQueryPathModel$Implementation.getItemType(AbstractQueryPathModel.java:197) 在 com.ibm.team.repository.common.query.IQuery$Factory.newInstance(IQuery.java:129) 在 com.ibm.team.repository.client.internal.ContributorManager.createAllContributorsQuery(ContributorManager.java:72) 在 com.ibm.team.repository.client.internal.ContributorManager。(ContributorManager.java:60)
发生此错误是因为在 Rhapsody 安装中的现有插件中,没有人使用此值进行标识:
想象一下 Spring 无法解析带有类型、名称和“命名空间”的 bean(这是 Eclipse 和 Rhapsody 行话中“扩展点”的奇特名称)。
我没有找到很多关于“如何通过代码显示现有 IItemTypes”的链接,只是这个链接包含有关如何直观地创建它们的视频,也许它可以指导您做什么。
https://www.ibm.com/support/pages/how-can-i-add-custom-type-list-predefined-types-built-rhapsody
如果我是你,我会在 IDE 中搜索如何获取所有现有类型,并将 URI 作为参数或类型 (IItemType) 传递。
抱歉,我无法提供更多帮助,如果您当前没有参与付费客户的项目,IBM 不会轻易提供此软件:(。