留言板

Error al importar un lar borrando los layouts

Mercedes Herranz,修改在9 年前。

Error al importar un lar borrando los layouts

New Member 帖子: 7 加入日期: 13-1-16 最近的帖子
Buenas,

A ver si alguno le ha surgido este problema. Usando el API de liferay 6.1.2 GA2, al intentar importar un lar (tanto publico como privado) a un usuario ya existente, e intentar borrar sus páginas:

Esta operación se esta realizando desde un webservice, y la llamada sería está:

LayoutLocalServiceUtil.importLayouts(userId, groupId, privateLayout, LARImporter.getParameterMap(), larFile);


En el mapa, la propiedad de borrar layouts, esta a true, si la pongo a false, lo importa perfectamente pero no borrar las páginas que tiene el usuario.

parameters.put(PortletDataHandlerKeys.DELETE_MISSING_LAYOUTS,  new String[] { Boolean.TRUE.toString() });  


El mapa completo sería este:


parameters.put(
	            PortletDataHandlerKeys.CATEGORIES,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.DELETE_MISSING_LAYOUTS,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.DELETE_PORTLET_DATA,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.LAYOUT_SET_PROTOTYPE_LINK_ENABLED,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.LAYOUT_SET_SETTINGS,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.LAYOUTS_IMPORT_MODE,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.LOGO,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.PERMISSIONS,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.PORTLET_DATA,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.PORTLET_SETUP,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.PORTLET_USER_PREFERENCES,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.PORTLETS_MERGE_MODE,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.PUBLIC_LAYOUT_PERMISSIONS,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.PUBLISH_TO_REMOTE,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.THEME,
	            new String[] {Boolean.FALSE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.THEME_REFERENCE,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.USER_ID_STRATEGY,
	            new String[] {Boolean.TRUE.toString()});
	        parameters.put(
	            PortletDataHandlerKeys.USER_PERMISSIONS,
	            new String[] {Boolean.TRUE.toString()});


Y salta la siguiente excepción al poner el atributo PortletDataHandlerKeys.DELETE_MISSING_LAYOUTS a true:


Caused by: java.lang.NullPointerException
at com.liferay.portal.kernel.util.ParamUtil.getLong(ParamUtil.java:616)
at com.liferay.portal.service.impl.LayoutLocalServiceStagingAdvice.deleteLayout(LayoutLocalServiceStagingAdvice.java:84)
at com.liferay.portal.service.impl.LayoutLocalServiceStagingAdvice.invoke(LayoutLocalServiceStagingAdvice.java:130)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:71)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:57)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:57)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:57)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:57)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:211)
at $Proxy27.deleteLayout(Unknown Source)
at com.liferay.portal.service.LayoutLocalServiceUtil.deleteLayout(LayoutLocalServiceUtil.java:435)
at com.liferay.portal.lar.LayoutImporter.deleteMissingLayouts(LayoutImporter.java:196)
at com.liferay.portal.lar.LayoutImporter.doImportLayouts(LayoutImporter.java:774)
at com.liferay.portal.lar.LayoutImporter.importLayouts(LayoutImporter.java:147)
at com.liferay.portal.service.impl.LayoutLocalServiceImpl.importLayouts(LayoutLocalServiceImpl.java:1408)
... 132 more


Trazando el código de Liferay parece que no encuentra la siguiente propiedad:
long layoutSetBranchId = ParamUtil.getLong(serviceContext, "layoutSetBranchId");


¿Alguna idea?

Gracias de antemano.
Un saludo
Mercedes Herranz,修改在9 年前。

RE: Error al importar un lar borrando los layouts

New Member 帖子: 7 加入日期: 13-1-16 最近的帖子
Ya lo hemos conseguido solucionado, o eso parece.

El problema es que como no vamos a través del ciclo normal de una petición, sino a través de una llamada a un web service, cuando intenta recuperar el servicecontext es null. Como solución, antes de llamar al API de liferay para importar el lar, instanciamos el servicecontext:


ServiceContextThreadLocal.pushServiceContext(new ServiceContext());
LayoutLocalServiceUtil.importLayouts(userId, groupId, privateLayout, getConfigLayout(clearOld), larFile);


Un saludo