I am developing a webscript to add electronic signatures to a PDF document in Alfresco Share. I have a webscript in the repository which takes the input stream from the node, generates a new version, takes the output stream, and then calls a business method to insert the signature:
InputStream is = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT).getContentInputStream() ;
Map<String, Serializable> versionProperties = new HashMap<String, Serializable>();
versionProperties.put(VersionModel.PROP_VERSION_TYPE, VersionType.MINOR);
Version newVersion = versionService.createVersion(nodeRef, versionProperties) ;
OutputStream os = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true).getContentOutputStream() ;
[…]
signer.sign(is, os, […]) ;
This works correctly if I use <transaction>none</transaction>
in the webscript descriptor; if it is set to <transaction>required</transaction>
, the original version is overwritten, rather than a new one being generated.Unfortunately, in this configuration if the signing method fails, a useless new version is generated.I am not sure what is the better strategy to solve this problem: should I set transaction to required and manage streams differently, or should I leave it as it is and insert a transaction in the webscript?Any suggestion is highly welcome…