Setting node properties programatically throwing exceptions | Community
Skip to main content
Community Advisor
October 16, 2015
Solved

Setting node properties programatically throwing exceptions

  • October 16, 2015
  • 5 replies
  • 4832 views

I am trying to set dc:title property from metadataNode somehow it is throwing exception, I am able to set other properties without any problem

My code is like this

 metadataNode.setProperty("dc:title", "My title" ); // doesn't work throws exception Multivalued property can not be set to a single value (an array of length one is OK): property 

 metadataNode.setProperty("dc:description", " My description"); //works fine no problem  

 originalContentNode.setProperty("jcr:mimeType", "application/pdf");//  throws version exception com.day.cq.dam.core.impl.handler.xmp.NCommXMPHandler Stack Trace: com.adobe.granite.asset.api.AssetException: Unable to create version for asset [ /content/dam/mypdfs/es/MYMail.pdf]: 

 

23.10.2013 23:41:41.331 *WARN* [JobHandler: /etc/workflow/instances/2013-10-23/model_7321294166569:/content/dam/mypdfs/MyPA2.pdf/jcr:content/renditions/original] com.day.cq.dam.commons.metadata.SimpleXmpToJcrMetadataBuilder Cannot set xmp property (dc:title): Multivalued property can not be set to a single value (an array of length one is OK): property /content/dam/mypdfs/MyPA2.pdf/jcr:content/metadata/dc:title javax.jcr.ValueFormatException: Multivalued property can not be set to a single value (an array of length one is OK): property /content/dam/mypdfs/MyPA2.pdf/jcr:content/metadata/dc:title
    at org.apache.jackrabbit.core.PropertyImpl.checkSetValue(PropertyImpl.java:274)
    at org.apache.jackrabbit.core.PropertyImpl.setValue(PropertyImpl.java:726)
    at org.apache.jackrabbit.core.NodeImpl$SetPropertyOperation.perform(NodeImpl.java:2054)
    at org.apache.jackrabbit.core.NodeImpl$SetPropertyOperation.perform(NodeImpl.java:1998)
    at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
    at org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.java:1920)
    at org.apache.jackrabbit.core.NodeImpl.setProperty(NodeImpl.java:1890)
    at com.day.cq.dam.commons.metadata.SimpleXmpToJcrMetadataBuilder.setProperty(SimpleXmpToJcrMetadataBuilder.java:767)
    at com.day.cq.dam.commons.metadata.SimpleXmpToJcrMetadataBuilder.storeXmp(SimpleXmpToJcrMetadataBuilder.java:149)
    at com.day.cq.dam.commons.metadata.SimpleXmpToJcrMetadataBuilder.storeAsXmp(SimpleXmpToJcrMetadataBuilder.java:594)
    at com.day.cq.dam.core.process.ExtractMetadataProcess.saveMetadata(ExtractMetadataProcess.java:158)
    at com.day.cq.dam.core.process.ExtractMetadataProcess.execute(ExtractMetadataProcess.java:125)
    at com.day.cq.workflow.compatibility.CQWorkflowProcessRunner.execute(CQWorkflowProcessRunner.java:93)
    at com.adobe.granite.workflow.core.job.HandlerBase.executeProcess(HandlerBase.java:208)
    at com.adobe.granite.workflow.core.job.JobHandler.process(JobHandler.java:139)
    at org.apache.sling.event.jobs.JobUtil$1.run(JobUtil.java:378)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

 

 

23.10.2013 23:41:40.307 *ERROR* [JobHandler: /etc/workflow/instances/2013-10-23/model_7320686838388:/content/dam/mypdfs/es/MYMail.pdf/jcr:content/metadata] com.day.cq.dam.core.impl.handler.xmp.NCommXMPHandler Stack Trace: com.adobe.granite.asset.api.AssetException: Unable to create version for asset [ /content/dam/mypdfs/es/MYMail.pdf]: 
    at com.adobe.granite.asset.core.impl.AssetVersionManagerImpl.createVersion(AssetVersionManagerImpl.java:83)
    at com.day.cq.dam.core.impl.AssetManagerImpl.createRevision(AssetManagerImpl.java:336)
    at com.day.cq.dam.core.impl.AssetImpl.createRevision(AssetImpl.java:401)
    at com.day.cq.dam.core.impl.handler.xmp.NCommXMPHandler.version(NCommXMPHandler.java:212)
    at com.day.cq.dam.core.impl.handler.xmp.NCommXMPHandler.writeXmp(NCommXMPHandler.java:147)
    at com.day.cq.dam.core.impl.handler.xmp.NCommXMPHandler.writeXmp(NCommXMPHandler.java:129)
    at com.day.cq.dam.core.process.XMPWritebackProcess.writeXmp(XMPWritebackProcess.java:192)
    at com.day.cq.dam.core.process.XMPWritebackProcess.execute(XMPWritebackProcess.java:131)
    at com.day.cq.workflow.compatibility.CQWorkflowProcessRunner.execute(CQWorkflowProcessRunner.java:93)
    at com.adobe.granite.workflow.core.job.HandlerBase.executeProcess(HandlerBase.java:208)
    at com.adobe.granite.workflow.core.job.JobHandler.process(JobHandler.java:139)
    at org.apache.sling.event.jobs.JobUtil$1.run(JobUtil.java:378)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.jcr.RepositoryException: org.apache.jackrabbit.core.state.ItemStateException: Failed to store bundle: 45b1e6f9-1201-4c15-8224-4b6b65888303: java.io.IOException: Unexpected error while writing NAME value.
    at org.apache.jackrabbit.core.version.InternalVersionManagerBase.checkin(InternalVersionManagerBase.java:621)
    at org.apache.jackrabbit.core.version.InternalVersionManagerImpl$4.run(InternalVersionManagerImpl.java:416)
    at org.apache.jackrabbit.core.version.InternalVersionManagerImpl$DynamicESCFactory.doSourced(InternalVersionManagerImpl.java:724)
    at org.apache.jackrabbit.core.version.InternalVersionManagerImpl.checkin(InternalVersionManagerImpl.java:412)
    at org.apache.jackrabbit.core.version.InternalXAVersionManager.checkin(InternalXAVersionManager.java:238)
    at org.apache.jackrabbit.core.version.VersionManagerImplBase.checkoutCheckin(VersionManagerImplBase.java:188)
    at org.apache.jackrabbit.core.VersionManagerImpl.access$100(VersionManagerImpl.java:73)
    at org.apache.jackrabbit.core.VersionManagerImpl$1.perform(VersionManagerImpl.java:122)
    at org.apache.jackrabbit.core.VersionManagerImpl$1.perform(VersionManagerImpl.java:115)
    at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
    at org.apache.jackrabbit.core.VersionManagerImpl.perform(VersionManagerImpl.java:96)
    at org.apache.jackrabbit.core.VersionManagerImpl.checkin(VersionManagerImpl.java:115)
    at org.apache.jackrabbit.core.VersionManagerImpl.checkin(VersionManagerImpl.java:101)
    at com.adobe.granite.asset.core.impl.AssetVersionManagerImpl.createVersion(AssetVersionManagerImpl.java:66)
    ... 14 more
Caused by: org.apache.jackrabbit.core.state.ItemStateException: Failed to store bundle: 45b1e6f9-1201-4c15-8224-4b6b65888303: java.io.IOException: Unexpected error while writing NAME value.
    at com.day.crx.persistence.tar.PersistenceManagerUtils.serializeBundle(PersistenceManagerUtils.java:125)
    at com.day.crx.persistence.tar.TarPersistenceManager.storeBundle(TarPersistenceManager.java:372)
    at org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.putBundle(AbstractBundlePersistenceManager.java:799)
    at org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.storeInternal(AbstractBundlePersistenceManager.java:714)
    at org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.store(AbstractBundlePersistenceManager.java:590)
    at com.day.crx.persistence.tar.TarPersistenceManager.access$001(TarPersistenceManager.java:180)
    at com.day.crx.persistence.tar.TarPersistenceManager$1.store(TarPersistenceManager.java:539)
    at com.day.crx.persistence.tar.TarPersistenceManager.tryStore(TarPersistenceManager.java:586)
    at com.day.crx.persistence.tar.TarPersistenceManager.storeTransaction(TarPersistenceManager.java:549)
    at com.day.crx.persistence.tar.TarPersistenceManager.store(TarPersistenceManager.java:536)
    at org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedItemStateManager.java:788)
    at org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemStateManager.java:1537)
    at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:400)
    at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:375)
    at org.apache.jackrabbit.core.version.InternalVersionManagerBase$WriteOperation.save(InternalVersionManagerBase.java:248)
    at org.apache.jackrabbit.core.version.InternalVersionManagerBase.checkin(InternalVersionManagerBase.java:618)
    ... 27 more
Caused by: java.io.IOException: Unexpected error while writing NAME value.
    at org.apache.jackrabbit.core.persistence.util.BundleWriter.writeState(BundleWriter.java:312)
    at org.apache.jackrabbit.core.persistence.util.BundleWriter.writeBundle(BundleWriter.java:131)
    at org.apache.jackrabbit.core.persistence.util.BundleBinding.writeBundle(BundleBinding.java:164)
    at com.day.crx.persistence.tar.PersistenceManagerUtils.serializeBundle(PersistenceManagerUtils.java:120)
    ... 42 more

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Naidu_Jakkana

dc:title property might have defined as multi-valued property. otherwise you can try even  String []title={"My title"}; metadataNode.setProperty("dc:title", title ).

Hope this helps.

Thanks

Jv

5 replies

VeenaVikraman
Community Advisor
Community Advisor
October 16, 2015

Hi

   As far as i coould analyze, i guess you are trying to set a multivalued property to a node. May be u try setting a String variable as

 

String title = "My title" and if you do metadataNode.setProperty("dc:title", title ); 

this issue may get resolved 

 

Thanks

Veena 

MshajiCommunity AdvisorAuthor
Community Advisor
October 16, 2015

I tried everything it is updating the property and saving it in CRXDE, but I see the exception in error.log.

Any property starting with dc:  ( dublin core ) standards is throwing this exception, rest of the properties look fine. Program is working fine but internally it is throwing this exception when session.save is called.

Naidu_Jakkana
Naidu_JakkanaAccepted solution
Level 2
October 16, 2015

dc:title property might have defined as multi-valued property. otherwise you can try even  String []title={"My title"}; metadataNode.setProperty("dc:title", title ).

Hope this helps.

Thanks

Jv

October 16, 2015

you can check whether the property a multiple one like this:

final Property property = metadataNode.getProperty("dc:title");
      if (property.isMultiple()) {

metadataNode.setProperty("dc:title", new String[]{"My title"} );

} else {

metadataNode.setProperty("dc:title", "My title" );

}

MshajiCommunity AdvisorAuthor
Community Advisor
October 16, 2015

I already have the following methods but still it is throwing the exception

  private void setMetadata(Node node, String property, String value, ValueFactory vf)
      throws Exception {

    if (node.hasProperty(property)) {
      javax.jcr.Property prop = node.getProperty(property);
      Value propValue = vf.createValue(value);
      if (prop.isMultiple()) {

        List updatedVals = new ArrayList();
        updatedVals.addAll(Arrays.asList(propValue));
        node.setProperty(property, (Value[]) updatedVals.toArray(new Value[updatedVals.size()]),
            prop.getType());
      } else {
        node.setProperty(property, propValue, prop.getType());
      }
    } else {
      node.setProperty(property, value);
    }

 

  }