Rtc ImmutablePropertyException在更改枚举字段';通过rationalteamconcertapi实现的价值
在我正在使用的RTC API工具的新RTC工作项中,通过更改某些基于枚举的字段来解决此问题 基本上,我第一次更改字段时会得到一个ImmutablePropertyException,但下一次它会正常工作 希望排除异常。我正在使用RTC实际返回给我的值作为字段的有效枚举值 分配RTC工作项字段:odc.impact字段值-> 完整性[odc.impact.literal.l4] 异常:无法分配值, 即使在枚举列表中找到它:[未分配, 可安装性、标准、完整性] com.ibm.team.repository.common.internal.ImmutablePropertyException位于 com.ibm.team.repository.common.internal.util.ItemUtil$ProtectAdapter.notifyChanged(ItemUtil.java:2070) 在 org.eclipse.emf.common.notify.impl.basicontifierimpl.eNotify(basicontifierimpl.java:380) 在 com.ibm.team.repository.common.model.impl.StringExtensionEntryImpl.setTypedValue(StringExtensionEntryImpl.java:178) 在 com.ibm.team.repository.common.model.impl.StringExtensionEntryImpl.setValue(StringExtensionEntryImpl.java:360) 位于org.eclipse.emf.common.util.BasicEMap.putEntry(BasicEMap.java:303) 位于org.eclipse.emf.common.util.BasicEMap.put(BasicEMap.java:584) org.eclipse.emf.common.util.BasicEMap$DelegatingMap.put(BasicEMap.java:799) 在 com.ibm.team.repository.common.model.impl.ItemImpl.setStringExtension(ItemImpl.java:1228) 在 com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.setEnumeration(WorkItemImpl.java:3779) 在 com.ibm.team.workitem.common.internal.model.impl.WorkItemImpl.setValue(WorkItemImpl.java:2915) 位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) invoke(NativeMethodAccessorImpl.java:95) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56) 位于java.lang.reflect.Method.invoke(Method.java:620) com.ibm.team.repository.common.internal.util.ItemStore$ItemInvocationHandler.invoke(ItemStore.java:597) 位于com.sun.proxy.$Proxy18.setValue(未知源) com.rtc.vda.WorkItemInitialization.setAttributeValuex(WorkItemInitialization.java:237) 在 com.rtc.vda.WorkItemInitialization.setAttributeValue(WorkItemInitialization.java:210) 在 com.rtc.vda.WorkItemInitialization.execute(WorkItemInitialization.java:186) 在 com.ibm.team.workitem.client.WorkItemOperation.execute(WorkItemOperation.java:85) 在 com.ibm.team.workitem.client.WorkItemOperation.doRun(WorkItemOperation.java:272) 在 com.ibm.team.workitem.client.WorkItemOperation.run(WorkItemOperation.java:242) 在 com.ibm.team.workitem.client.WorkItemOperation.run(WorkItemOperation.java:189) 在com.rtc.vda.rtculities.createWorkItem(rtculities.java:191)上 com.rtc.vda.RTCMain.main(RTCMain.java:178) 赋值:odc.impact->Integrity[odc.impact.literal.l4] 这是用于设置枚举值的代码段:Rtc ImmutablePropertyException在更改枚举字段';通过rationalteamconcertapi实现的价值,rtc,Rtc,在我正在使用的RTC API工具的新RTC工作项中,通过更改某些基于枚举的字段来解决此问题 基本上,我第一次更改字段时会得到一个ImmutablePropertyException,但下一次它会正常工作 希望排除异常。我正在使用RTC实际返回给我的值作为字段的有效枚举值 分配RTC工作项字段:odc.impact字段值-> 完整性[odc.impact.literal.l4] 异常:无法分配值, 即使在枚举列表中找到它:[未分配, 可安装性、标准、完整性] com.ibm.team.reposi
public boolean setAttributeValueEx (IWorkItem w, String attributeKey, String valueName) {
// (REO) Get the attribute
IAttribute a = customAttributesMap.get(attributeKey);
// (REO) Buffer of valid values for error reporting
StringBuffer b = new StringBuffer();
try {
// (REO) Get the enumeration for this attribute from the repository (DO NOT CACHE IT OR YOU WILL HAVE PROBLEMS)
IWorkItemClient workItemClient = (IWorkItemClient) rtcParameters.getTeamRepository().getClientLibrary(IWorkItemClient.class);
IEnumeration<? extends ILiteral> rtcAttrEnumeration = workItemClient.resolveEnumeration(a, curMonitor);
// (REO) Find an enum value that matches this string and assign it
for (ILiteral literal : rtcAttrEnumeration.getEnumerationLiterals()) {
String vName = literal.getName();
String vId = literal.getIdentifier2().getStringIdentifier();
b.append(",");
b.append(vName);
if (valueName.equalsIgnoreCase(vName)) {
String msg2 = "Assigning: " + a.getIdentifier() + " -> " + vName + " [" + vId + "]";
RTCMain.out(msg2);
w.setValue(a, literal.getIdentifier2()); // (REO) SOURCE OF PERIODIC EXCEPTION
return true;
}
}
} catch (Exception e) {
RTCMain.out("EXCEPTION: Could not assign value, even though it was found in the enumeration list:\n\t[" + b + "]");
e.printStackTrace();
RTCMain.out("");
return false;
}
RTCMain.out("VALUE NOT FOUND: Valid values are:" + b);
return false;
}
public boolean setAttributeValuex(IWorkItem w,String attributeKey,String valueName){
//(REO)获取属性
IAttribute a=CustomAttributeMap.get(attributeKey);
//(REO)用于错误报告的有效值缓冲区
StringBuffer b=新的StringBuffer();
试一试{
//(REO)从存储库中获取此属性的枚举(不要缓存它,否则会出现问题)
IWorkItemClient workItemClient=(IWorkItemClient)rtcParameters.getTeamRepository().getClientLibrary(IWorkItemClient.class);
IEnumeration您只需要使用传递给execute()调用的workingCopy.getWorkItem()对象,而不是成员变量中的缓存版本。workingCopy对象上的属性不是不变的,可以正常工作
public class WorkItemCreator extends WorkItemOperation {
...
@Override
protected void execute(WorkItemWorkingCopy workingCopy, IProgressMonitor monitor) throws TeamRepositoryException {
IWorkItem newWorkItem = workingCopy.getWorkItem();
// Set attribute values on newWorkItem to avoid ImmutablePropertyExceptions