How can I programatically create a new version of an asset with new content?



I have 2 assets in the dam, lets call them A and B.

How can I programatically make a new version of A, and use the content of B as that new version?


AssetManager. createRevision makes a new version of A just fine, and I tried AssetManager.createAsset on the path of A using the stream I grabbed from asset B, but it doesnt go through.


A new version gets created but I'm having trouble adding B's content. It doesn't matter what happens to B as it will be deleted afterwards.



Accepted Solutions (1)

Accepted Solutions (1)



Hi @peter-g 


Yes, as you mentioned we need to use assetManager.createRevision() to create initial version of asset before replacing content of Asset A by Asset B. please check below code which will create version & replace content as expected.


try (ResourceResolver resourceResolver = request.getResourceResolver()){
AssetManager assetManager = resourceResolver.adaptTo(AssetManager.class);
Resource resourceAssetA = resourceResolver.getResource("/content/dam/test/jane_doe.jpg");
Resource resourceAssetB = resourceResolver.getResource("/content/dam/test/larry_spiller.jpg");

if(resourceAssetA!= null && resourceAssetB!= null) {
Asset assetA = resourceAssetA.adaptTo(Asset.class);
Asset assetB = resourceAssetB.adaptTo(Asset.class);
assetManager.createRevision(assetA, "message to create initial version of asset", assetA.getName());
Rendition renditionAssetB = assetB.getOriginal();
assetManager.createAsset(assetA.getPath(), renditionAssetB.getStream(), renditionAssetB.getMimeType(), false);

} catch (Exception e) {



Before creating version & replacing asset content :






After creating version & replacing asset content :





After deleting original asset(Asset B) from which content is copied from , it will not affect to asset(Asset A) which has copied content.








Answers (1)

Answers (1)




Each time a page/asset is modified cq creates a version of the same. This modified resource modification time is set in jcr:lastModified property of the page/asset. Manipulation of this property can be done to save future date and activate page on that date though its not preferred way. You can store the future date as a property in the page/asset. Then you could write a workflow or a scheduled job which activates pages/assets with a future date.