AnsweredAssumed Answered

Create new version with Behaviours/Policies

Question asked by zhihailiu on Dec 16, 2016
Latest reply on Dec 19, 2016 by zhihailiu

I have a rather simple behaviour/policy implementation. When an aspect "signedDateAspect" is added to a document, check and set the value for the property "signedDate". The code (relevant part) is below.



public class SignedDateAspectPolicy implements NodeServicePolicies.OnAddAspectPolicy {


public void init() {

  this.onAddAspectBehavior = new JavaBehaviour(this, "onAddAspect", NotificationFrequency.TRANSACTION_COMMIT);

MycContentModel.ASPECT_SIGNED_DATE, this.onAddAspectBehavior);


public void onAddAspect(NodeRef nodeRef, QName aspectTypeQName) {
  Serializable propSignedDate = this.nodeService.getProperty(nodeRef, MycContentModel.PROP_SIGNED_DATE);

  if (propSignedDate == null) {
    Date propModified = (Date) this.nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIED);
    this.nodeService.setProperty(nodeRef, MycContentModel.PROP_SIGNED_DATE, propModified);



It works fine until a new version of the document is uploaded. Steps to replicate:

1. Upload a document - pass

2. Add the aspect - pass

3. Upload a new version - fail


The error in log is

Caused by: org.alfresco.service.cmr.repository.InvalidNodeRefException: Node does not exist: workspace://SpacesStore/e3a32cce-de90-4957-b026-7ef683e8a713 (status:Status[id=12279changeTxnId=3cc18e2f-c628-40cd-9f71-640a86de9d39, dbTxnId=4550, deleted=true])


I had to add a check at the beginning of onAddAspect method.


if (!this.nodeService.exists(nodeRef)) {


What is the node "workspace://SpacesStore/e3a32cce-de90-4957-b026-7ef683e8a713" that is created in this process? Why doesn't it exist (did it get deleted)? Could someone explain the inner working of how a new version is created in Alfresco? Thanks.