我正在jython 2.7中开发IBM FileNet P8 Platform 5.2.1 Content Engine单元测试应用程序。
# Verify a directory
def testDirectory(self):
directoryConfigurationList = []
url = self.serverUrl + "?tenantId=" + self.tenantName
connection = Factory.Connection.getConnection(url)
domain = Factory.Domain.fetchInstance(connection, self.tenantName, None)
if (domain is not None):
dc_set = domain._DirectoryConfigurations.iterator()
while dc_set.hasNext():
dc = dc_set.next()
print dc._DisplayName
我收到错误:
类型错误:共享已修改属性的超类型具有 MRO conflict[attribute=remove, supertypes=[, 'com.filenet.api.collection.DependentObjectList'>], type=CmIndexPartitionConstraintList]
在线 dc_set = domain._DirectoryConfigurations.iterator() 我现在不知道为什么。任何这方面的帮助将不胜感激。以下指向 IBM 5.2.1 知识中心的链接可能会有所帮助:
- http://www.ibm.com/support/knowledgecenter/SSNW2F_5.2.1/com.ibm.p8.ce.dev.java.doc/com/filenet/api/collection/DirectoryConfigurationList.html
- http://www.ibm.com/support/knowledgecenter/en/SSNW2F_5.2.1/com.ibm.p8.ce.dev.java.doc/com/filenet/api/collection/DependentObjectList.html?view=embed
问题不在于您的fileNet代码,看起来Jython不希望看到一个也是可迭代的地图。我认为它具有在每个上安装 iter 然后发生冲突的逻辑。遗憾的是,同时实现 Map 和 Iterable 的类型没有任何错误。Jython 应该服从 Iterable for iter,但看起来它需要和增强才能做到这一点。
如果检查DependentObjectList
接口规范,则会在超类型接口中看到其超类型接口java.util.Collection, EngineCollection, java.lang.Iterable, java.util.List, java.io.Serializable
。
我相信自 Jython 2.7b1 以来,这个问题可能已修复。
更新:
我一直在挖掘我们之前在 Java 中开发的代码,我们使用以下逻辑将引擎集合转换为基于列表的集合
public static <T> List<T> convertToList(EngineCollection engineCollection) {
Iterator<T> engineCollectionIterator = engineCollection.iterator();
List<T> collection = new ArrayList<T>();
CollectionUtils.addAll(collection , engineCollectionIterator);
return collection ;
}