Uploaded image for project: 'PUBLIC - Liferay Portal Community Edition'
  1. PUBLIC - Liferay Portal Community Edition
  2. LPS-135321

FragmentEntryLinkStagedModelDataHandler doesn't work if classNameId changes between origin/destination

Details

    Description

      ClassNameId can change among databases, but isn't updated during the import process which can lead to exceptions like the following one when importing a LAR file:

      Caused by: java.lang.RuntimeException: Unable to get class name from id 27701
      	at com.liferay.portal.util.PortalImpl.getClassName(PortalImpl.java:1627)
      	at com.liferay.portal.kernel.util.PortalUtil.getClassName(PortalUtil.java:564)
      	at com.liferay.layout.content.page.editor.web.internal.util.ContentUtil._getLayoutDisplayPageObjectProvider(ContentUtil.java:372)
      	at com.liferay.layout.content.page.editor.web.internal.util.ContentUtil._getFragmentEntryLinkMappedLayoutDisplayPageObjectProviders(ContentUtil.java:311)
      	at com.liferay.layout.content.page.editor.web.internal.util.ContentUtil.getFragmentEntryLinkMappedLayoutDisplayPageObjectProviders(ContentUtil.java:76)
      	at com.liferay.layout.content.page.editor.web.internal.model.listener.FragmentEntryLinkModelListener._updateLayoutClassedModelUsage(FragmentEntryLinkModelListener.java:226)
      	at com.liferay.layout.content.page.editor.web.internal.model.listener.FragmentEntryLinkModelListener.onAfterUpdate(FragmentEntryLinkModelListener.java:81)
      	at com.liferay.layout.content.page.editor.web.internal.model.listener.FragmentEntryLinkModelListener.onAfterUpdate(FragmentEntryLinkModelListener.java:52)
      	at com.liferay.portal.kernel.service.persistence.impl.BasePersistenceImpl.update(BasePersistenceImpl.java:717)
      	at com.liferay.fragment.service.impl.FragmentEntryLinkLocalServiceImpl.updateFragmentEntryLink(FragmentEntryLinkLocalServiceImpl.java:598)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.liferay.portal.spring.aop.AopMethodInvocationImpl.proceed(AopMethodInvocationImpl.java:50)
      	at com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:69)
      	at com.liferay.portal.spring.aop.AopMethodInvocationImpl.proceed(AopMethodInvocationImpl.java:57)
      	at com.liferay.portal.service.ServiceContextAdvice.invoke(ServiceContextAdvice.java:60)
      	at com.liferay.portal.spring.aop.AopMethodInvocationImpl.proceed(AopMethodInvocationImpl.java:57)
      	at com.liferay.portal.spring.aop.AopInvocationHandler.invoke(AopInvocationHandler.java:49)
      	at com.sun.proxy.$Proxy842.updateFragmentEntryLink(Unknown Source)
      	at com.liferay.fragment.internal.exportimport.staged.model.repository.FragmentEntryLinkStagedModelRepository.updateStagedModel(FragmentEntryLinkStagedModelRepository.java:157)
      	at com.liferay.fragment.internal.exportimport.staged.model.repository.FragmentEntryLinkStagedModelRepository.updateStagedModel(FragmentEntryLinkStagedModelRepository.java:36)
      	at com.liferay.fragment.internal.exportimport.data.handler.FragmentEntryLinkStagedModelDataHandler.doImportStagedModel(FragmentEntryLinkStagedModelDataHandler.java:240)
      	at com.liferay.fragment.internal.exportimport.data.handler.FragmentEntryLinkStagedModelDataHandler.doImportStagedModel(FragmentEntryLinkStagedModelDataHandler.java:45)
      	at com.liferay.exportimport.kernel.lar.BaseStagedModelDataHandler.importStagedModel(BaseStagedModelDataHandler.java:367)
      	... 67 more
      

       

       

      Steps to Reproduce:

      1. Create a site named Site1.
      2. In Site1 create a new web content named WC1.
      3. In Site1 create a new Page Template collection named collection.
      4. Inside that collection create a new Content Page Template named PageTemplate.
      5. Edit PageTemplate adding a ContentDisplay fragment.
      6. Edit the fragment configuration adding WC1 as selected item and use as template Basic Web Content and publish the page template.
      7. Export the site and download the generated lar.
      8. Start a 6.2 and perform an upgrade (this is needed to force a different classNameId for JournalArticle).
      9. Create a site named Site2 in this last installation.
      10. Import the generated LAR.

       

      Expected Results:

      Import is successful.

       

      Actual Results:

      Import fails due to wrong classNameId. 

       

      Attachments

        Issue Links

          Activity

            People

              gabor.lovas Gábor Lovas
              mariano.alvaro Mariano Álvaro
              Fortunato Maldonado Fortunato Maldonado
              Mariano Álvaro Mariano Álvaro
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:
                1 year, 43 weeks, 4 days ago

                Packages

                  Version Package
                  7.3.10.3 DXP SP3
                  7.3.X