cancel
Showing results for 
Search instead for 
Did you mean: 

Issue with adding an aspect with large multivalued list

opensrcguy
Champ in-the-making
Champ in-the-making
Hi All,
    We are facing an issue when we add a lengthy values (say more than 200 values) for an aspect which is having multivalued property of type(d:text) while creating the wcm content.

Approach :


1.We are creating the content through java backed webscripts.
2.In the webscript, we are adding the aspect for the web content.
3.The aspect has multivalued properties.
4.We added some 200 values (type List<String>) to the multivalued property of the aspect.
5.Then we are adding the aspect to the content.
6.We are not getting any exception while adding the aspect, but when this webscript operation is committed as a transaction in the backend, we are getting the following error stacktrace.

When we try debugging the alfresco source, we found that if it exceeds some limit , the value is not saved as null. And when it tries access the null value, it is throwing an nullpointer exception.

So is there a limit for an multivalued property in Alfresco ?

Error Stack trace :

15:37:20,212  ERROR [extensions.webscripts.AbstractRuntime] Exception from executeScript - redirecting to status template error: null
java.lang.NullPointerException
        at org.alfresco.repo.domain.PropertyValue$ValueType.convert(PropertyValue.java:512)
        at org.alfresco.repo.domain.PropertyValue.getValue(PropertyValue.java:1060)
        at org.alfresco.repo.avm.AVMNodeService.makeSerializableValue(AVMNodeService.java:207)
        at org.alfresco.repo.avm.AVMNodeService.getProperties(AVMNodeService.java:1120)
        at sun.reflect.GeneratedMethodAccessor320.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.alfresco.repo.service.StoreRedirectorProxyFactory$RedirectorInvocationHandler.invoke(StoreRedirectorProxyFactory.java:215)
        at $Proxy10.getProperties(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor320.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at org.alfresco.repo.node.MLPropertyInterceptor.invoke(MLPropertyInterceptor.java:173)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.alfresco.repo.node.MLPropertyInterceptor.invoke(MLPropertyInterceptor.java:173)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.alfresco.repo.node.NodeRefPropertyMethodInterceptor.invoke(NodeRefPropertyMethodInterceptor.java:212)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.alfresco.repo.node.NodeRefPropertyMethodInterceptor.invoke(NodeRefPropertyMethodInterceptor.java:212)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
        at $Proxy9.getProperties(Unknown Source)
        at org.alfresco.repo.node.integrity.IncompleteNodeTagger.processNode(IncompleteNodeTagger.java:401)
        at org.alfresco.repo.node.integrity.IncompleteNodeTagger.access$100(IncompleteNodeTagger.java:60)
        at org.alfresco.repo.node.integrity.IncompleteNodeTagger$1.doWork(IncompleteNodeTagger.java:385)
        at org.alfresco.repo.node.integrity.IncompleteNodeTagger$1.doWork(IncompleteNodeTagger.java:377)
        at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:508)
        at org.alfresco.repo.node.integrity.IncompleteNodeTagger.beforeCommit(IncompleteNodeTagger.java:391)
        at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.doBeforeCommit(AlfrescoTransactionSupport.java:738)
        at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.doBeforeCommit(AlfrescoTransactionSupport.java:718)
        at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.beforeCommit(AlfrescoTransactionSupport.java:674)
        at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:927)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:737)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:394)
        at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(SpringAwareUserTransaction.java:472)
        at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:343)
        at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:417)
        at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:434)
        at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:298)
        at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:319)
        at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:177)
        at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:116)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Unknown Source)


     Aspect defined in content Model :

           
 
   <aspect name="custom:Aspect">
        <title>Custom Aspect</title>
        <properties>
             <property name="custom:applications">
                  <type>d:text</type>
                  <multiple>true</multiple>
                  <index enabled="true"/>
             </property>                                      
        </properties>
   </aspect>

    Webscript code where we add aspect to the web content :

               

private void attachAspect( AssetInfo assetInfo, ContentVO contentVO ){
      Map<QName, Serializable> aspectValues = new HashMap<QName, Serializable>();
      List<String> applications = new ArrayList<String>();

      for( int i = 1; i < 200; i++ ){
           applications.add("Adding "+i);                       
       }

      aspectValues.put( PROP_QNAME_APPLICATIONS, (Serializable) applications );

      try{
        /* this.services = ServiceRegistry instance */
        this.services.getAssetService().addAspect( assetInfo, CUSTOM_ASPECT, aspectValues );
       }
       catch( Exception e ){
            e.printStackTrace();
       }
   }

    If anyone has some information regarding this to share , please post it here.
2 REPLIES 2

mrogers
Star Contributor
Star Contributor
Thanks for isolating a potential problem.   It probably needs to be raised in JIRA rather than just being discussed on the forums.

opensrcguy
Champ in-the-making
Champ in-the-making
Hi Rogers,

  Please find a jira ticket below:
http://issues.alfresco.com/jira/browse/ALF-9240

Till this issue is resolved or any hotfix is provided, is there any workaround we can do in our case.?  We were using Alfresco 3.3 Enterprise edition, and we are moving the project to production in a couple of weeks, we needed to  rectify this issue as soon a possible.

Regards,
Santhosh