I must be missing something obvious so I'm open to any suggestions. The environment is Content Server 10.5 patched to 2017-12 running on Windows/IIS, being called from a Java 1.8 application. I'm replacing permissions on a large number of objects using CWS from Java and when I pass an array containing copies of existing NodeRight to updateNodeRightsContext(), in order to remove the existing permissions, bad things happen resulting in a thread.out on the server with stack trace ("Status: An unknown feature was specified"). On the other hand if I copy the individual parts of each NodeRight to a new NodeRight object and add those to the array the call succeds perfectly. Here's the simplified code fragment: thisNodeRights = soapServices.docManClient().getNodeRights(thisNode.getID());; List thisNodeRightsOld = new ArrayList<>(); // copying the existing rights this way causes a thread crash // thisNodeRightsOld.add(thisNodeRights.getOwnerRight()); // but copying the existing rights this way works NodeRight oor = new NodeRight(); if (null != thisNodeRights.getOwnerRight()) { oor.setType(thisNodeRights.getOwnerRight().getType()); oor.setRightID(thisNodeRights.getOwnerRight().getRightID()); oor.setPermissions(thisNodeRights.getOwnerRight().getPermissions()); thisNodeRightsOld.add(oor); } ChunkedOperationContext thisNodeRightsDeleteContext = soapServices.docManClient().updateNodeRightsContext(thisNode.getID(), RightOperation.DELETE, thisNodeRightsOld, RightPropagation.TARGET_ONLY); soapServices.docManClient().updateNodeRights(thisNodeRightsDeleteContext);
Attached is an example of a trace.out produced when I add a NodeRight directly to the array, instead of reconstructing it. Looking at the trace I can see the expected bag of permissions copied in from the source object, and all those values all look valid and complete, so why is it unhappy?