S'ha produït un error mentre es processava la plantilla.
Java method "com.educaixa.common.impl.EduCaixaCommonImpl.getDocumentMetadataInJSON(String, com.liferay.portal.kernel.theme.ThemeDisplay)" threw an exception when invoked on com.educaixa.common.impl.EduCaixaCommonImpl object "com.educaixa.common.impl.EduCaixaCommonImpl@49b5b96d"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign siteMeta = UtilsService.getDo...  [in template "76121110924137#32361#RECURSO-MICROSITE" at line 109, column 9]
----
1<#-- get services --> 
2<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
3<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign UtilsService = serviceLocator.findService("com.educaixa.common.service.EduCaixaCommonService")/> 
5<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
6<#assign dLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") /> 
7<#assign valoracionesDisplay = serviceLocator.findService("com.educaixa.services.service.RatingStatsLocalService")/> 
8<#assign LiteralsToolsServiceUtil = serviceLocator.findService("com.aqua.literals.util.LiteralsToolsService")/> 
9<#assign language = themeDisplay.getLocale()/> 
10<#assign groupId = themeDisplay.getScopeGroupId()/> 
11<#assign restultsLiteral = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.resultados") /> 
12<#assign recurso = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.recurso") /> 
13<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
14<#assign httpServletRequest = serviceContext.getRequest() /> 
15<#assign UserBookmarkLocalService = serviceLocator.findService("com.educaixa.services.service.UserBookmarkLocalService") /> 
16 
17<#-- get the content categories --> 
18<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
19<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
20 
21<#-- get the results URL and valoration value--> 
22<#assign results_url = "https://${request.serverName}/${locale.getLanguage()}${restultsLiteral}?q=" /><#assign valoracionesDisplayAverage = 0/> 
23<#if valoracionesDisplay.fetchByResourcePK(scopeGroupId,themeDisplay.getCompanyId(),article.getResourcePrimKey()) ??> 
24    <#assign valoracionesDisplayValue = valoracionesDisplay.findByResourcePK(scopeGroupId,themeDisplay.getCompanyId(),article.getResourcePrimKey()) /> 
25    <#assign valoracionesDisplayAverage = valoracionesDisplayValue.getAverageGlobalScore() /> 
26</#if> 
27 
28<#assign journalArticleId = .vars['reserved-article-id'].data/> 
29<#assign userId =themeDisplay.getUserId()/> 
30<#assign isUserBookmark = UserBookmarkLocalService.isUserBookmark(themeDisplay.getCompanyId(),userId,journalArticleId,groupId)/> 
31 
32<#-- Resource type --> 
33<#assign resourceType = LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.recurso.microsite") /> 
34<#assign imgType = "/o/educaixa-theme/images/interaccion-icon.png"> 
35 
36<#-- Escape title text --> 
37<#assign titleEscaped = "" /> 
38<#if titulo.getData()??> 
39    <#assign titleEscaped = titulo.getData()?replace('<p>','','r')/> 
40    <#assign titleEscaped = titleEscaped?replace('</p>','','r')/> 
41    <#assign titleEscaped = titleEscaped?replace('<div>','','r')/> 
42    <#assign titleEscaped = titleEscaped?replace('</div>','','r')/> 
43    <#assign titleEscaped = titleEscaped?replace('<h1>','','r')/> 
44    <#assign titleEscaped = titleEscaped?replace('</h1>','','r')/> 
45</#if> 
46 
47<#assign subtituloEscaped = "" /> 
48<#if subtitulo.getData()??> 
49    <#assign subtituloEscaped = subtitulo.getData() /> 
50    <#assign subtituloEscaped = subtituloEscaped?replace('<p>','','r')/> 
51    <#assign subtituloEscaped = subtituloEscaped?replace('</p>','','r')/> 
52</#if> 
53 
54<#-- get image alt --> 
55<#if image_alt?? && image_alt.getData()?? && image_alt.getData() != ""> 
56    <#assign altImage = image_alt.getData() /> 
57<#else> 
58    <#assign altImage = titleEscaped /> 
59</#if> 
60 
61<#-- get image banner --> 
62<#if imagenficha ?? && imagenficha.getData() ?? && imagenficha.getData() != ""> 
63    <#assign imageSrc = imagenficha.getData() /> 
64<#else>     
65    <#assign imageSrc = "/o/educaixa-theme/images/blured-lights-recursos.png" /> 
66</#if> 
67 
68<#-- get the content categories --> 
69<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data) /> 
70<#assign asset = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
71 
72<#assign language = themeDisplay.getLocale()/> 
73<#assign nivel_educativo = []> 
74<#assign area_conocimiento = []> 
75<#assign competencias = []> 
76<#assign objectius = []> 
77 
78<#list asset.getCategories() as cur_category> 
79    <#if cur_category.vocabularyId == 10515> 
80        <#assign nivel_educativo = nivel_educativo + [cur_category.getTitle(language)]> 
81    <#elseif cur_category.vocabularyId == 6> 
82        <#assign area_conocimiento = area_conocimiento + [cur_category.getTitle(language)]> 
83    <#elseif cur_category.vocabularyId == 401> 
84        <#assign competencias = competencias + [cur_category.getTitle(language)]> 
85    <#elseif cur_category.vocabularyId == 43203> 
86        <#assign objectius = objectius + [cur_category.getTitle(language)]> 
87    </#if> 
88</#list> 
89 
90<#assign thesaurusCategories = UtilsService.getThesaurusCategories(asset) /> 
91<#assign tagsCategories = UtilsService.getTagsCategories(asset) /> 
92<#assign categories = thesaurusCategories + tagsCategories /> 
93 
94<#-- Login --> 
95<#assign is_signed_in = themeDisplay.isSignedIn()/> 
96<#assign plid = portalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), "EducaixaMyeducaixaLogin") /> 
97<#assign loginURL = portletURLFactory.create(httpServletRequest, "EducaixaMyeducaixaLogin", plid, "RENDER_PHASE") /> 
98${loginURL.setParameter("mvcPath", "/login_modal.jsp")} 
99${loginURL.setWindowState("POP_UP")} 
100 
101<#if docprincipal.getData()??> 
102	<#assign docUrl = docprincipal.getData() /> 
103 
104	<#-- Si la URL viene relativa (sin protocolo/host), le añadimos el portalURL actual --> 
105	<#if docUrl?starts_with("/")> 
106		<#assign docUrl = themeDisplay.getPortalURL() + docUrl /> 
107	</#if> 
108 
109	<#assign siteMeta = UtilsService.getDocumentMetadataInJSON(docUrl, themeDisplay) /> 
110</#if> 
111 
112<#-- Banner section--> 
113<div class="container vertical image-view"> 
114    <div class="row"> 
115        <img src="${imageSrc}" alt="${altImage}" width="900px" height="458px" class="video-player"> 
116        <div class="box-img col-lg square"> 
117            <#if resourceType != ""> 
118                <p class="box-img-pre-rec" >${recurso} - ${resourceType} </p> 
119            </#if> 
120            <#if titulo?has_content> 
121                <h1 class="box-img-title-rec">${titleEscaped}</h1> 
122            </#if> 
123            <#if subtitulo?has_content> 
124                <p class="box-img-sub-title-rec">${subtituloEscaped}</p> 
125            </#if> 
126            <p class="box-img-categ-rec"> 
127                <#if categories?has_content> 
128                    <#list categories as category> 
129                        <#-- redirects to the results page with the tag--> 
130                        <a onClick="updateTagsCicks('${category.getTitle(locale)}');" href="${results_url}${category.getTitle(locale)}" >${category.getTitle(locale)}</a> 
131                    </#list> 
132                </#if> 
133            </p> 
134            <hr> 
135            <#if siteMeta?? && siteMeta.get(0)?? && siteMeta.get(0).url?? && siteMeta.get(0).url != ""> 
136            	<button class="card-button-purple color-caixa-purple background-white" id="myBtn" onclick="window.open('${siteMeta.get(0).url}', '_blank'); return false;">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.common.link.ver")}</button>            
137            </#if> 
138            <div class="card-actions flex"> 
139                <div class="statistics"> 
140                    <svg viewBox="0 0 36 36" class="circular-chart orange"><line x1="18" y1="-5" x2="18" y2="5" stroke="black" stroke-width="2"></line> 
141                        <path class="circle-bg" d="M18 2.0845 
142                            a 15.9155 15.9155 0 0 1 0 31.831 
143                            a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
144                        <path class="circle" stroke-dasharray="${valoracionesDisplayAverage*20}, 100" d="M18 2.0845 
145                            a 15.9155 15.9155 0 0 1 0 31.831 
146                            a 15.9155 15.9155 0 0 1 0 -31.831"></path> 
147                        <text x="18" y="22" class="percentage">${valoracionesDisplayAverage}</text> 
148                    </svg> 
149                </div> 
150                <div class="share"> 
151                    <button id="share"></button> 
152                    <div class="a2a_kit a2a_kit_size_32 a2a_default_style tooltip" data-a2a-title="${titleEscaped}" data-a2a-icon-color="#009AD8"> 
153                            <a class="a2a_button_facebook"></a> 
154                            <a class="a2a_button_x"></a> 
155                            <a class="a2a_button_whatsapp"></a> 
156                            <a class="a2a_button_email"></a> 
157                        </div> 
158                </div> 
159                <div class="bookmark"> 
160					<#if is_signed_in> 
161						<#if isUserBookmark> 
162							<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},false);" data-articleid="${journalArticleId}" class="bookmark bookmarked"></button>  
163						<#else> 
164							<button id="bookmark" onClick="updateUserBookmark(${journalArticleId},true);" data-articleid="${journalArticleId}" class="bookmark"></button> 
165						</#if> 
166					<#else> 
167						<button id="bookmark" onClick="event.stopPropagation();openPopup('${loginURL}','','500', '650')"></button> 
168					</#if> 
169                </div> 
170            </div> 
171        </div> 
172    </div> 
173</div> 
174 
175<#-- Categories section--> 
176<div class="container vertical info-view"> 
177    <div class="row"> 
178        <#if nivel_educativo?size != 0 > 
179            <div class="col-lg col-xs-6 col-sm"> 
180                <h2 class="purple-title">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.ficha.nivel.educativo")}</h2> 
181                <ul> 
182                    <#list nivel_educativo as item> 
183                        <li class="marked">${item}</li> 
184                    </#list> 
185                </ul> 
186            </div> 
187        </#if> 
188         
189        <#if area_conocimiento?size != 0 > 
190            <div class="col-lg col-xs-6 col-sm"> 
191                <h2 class="purple-title">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.ficha.area.conocimiento")}</h2> 
192                <ul> 
193                    <#list area_conocimiento as item> 
194                        <li class="marked">${item}</li> 
195                    </#list> 
196                </ul> 
197            </div> 
198        </#if> 
199        <#if area_conocimiento?size != 0 > 
200             <div class="col-lg col-xs-6 col-sm"> 
201                <h2 class="purple-title">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.ficha.competencias")}</h2> 
202                <ul> 
203                    <#list competencias as item> 
204                        <li class="marked">${item}</li> 
205                    </#list> 
206                </ul> 
207            </div> 
208        </#if> 
209    	<#if siteMeta?? && siteMeta.get(0) ?? && siteMeta.get(0).idioma?? && siteMeta.get(0).idioma != ""> 
210        	<div class="col-lg col-xs-6 col-sm"> 
211                <h2 class="purple-title">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.ficha.idioma")}</h2> 
212                <ul> 
213                    <#assign idioma = siteMeta.get(0).idioma?keep_after('"')?keep_before('"') /> 
214                    <li class="marked">${idioma} </li> 
215                </ul> 
216            </div> 
217        </#if> 
218        <#if siteMeta?? && siteMeta.get(0) ?? && siteMeta.get(0).ano?? && siteMeta.get(0).ano != ""> 
219            <div class="col-lg col-xs-6 col-sm"> 
220                <h2 class="purple-title">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.ficha.ano")}</h2> 
221                <ul> 
222                    <#assign year = siteMeta.get(0).ano /> 
223                    <li class="marked">${year} </li> 
224                </ul> 
225            </div> 
226        </#if> 
227    </div> 
228    <hr class="line-12">  
229</div> 
230 
231<#-- Content section--> 
232<div class="container vertical info-content"> 
233    <div class="row"> 
234        <div class="col-lg-7 col-xs-12"> 
235            <#if introduccion?has_content> 
236                <h2 class="obj-rec-title"> 
237                    <b style="color: #7B2FA1;">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.recurso.descripcion")}</b> 
238                </h2> 
239                <p class="description-text-rec"> 
240                    ${introduccion.getData()} 
241                </p> 
242            </#if> 
243            <#if objetivosdidacticos?? && objetivosdidacticos.getData()?? && objetivosdidacticos.getData() != ""> 
244                <h2 class="obj-rec-title"><b>${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.recurso.objetivos")}</b></h2> 
245                <div class="description-text-rec" style="margin-top: 4%;"> 
246                    ${objetivosdidacticos.getData()} 
247                </div> 
248            <#elseif objetivosText?? && objetivosText.getData()?has_content> 
249                <h2 class="obj-rec-title"> 
250                    <b>${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.seccion.recurso.objetivos")}</b> 
251                </h2> 
252                <div class="row"> 
253            	    <#list objetivosText.getSiblings() as cur_objetivosText> 
254            	        <#if cur_objetivosText.getData()?has_content && cur_objetivosText.getData()??> 
255                    	    <div class="col-md-6 mt-3"> 
256                    	    	<div class="objetivo"><h4>#${cur_objetivosText?index + 1}</h4></div> 
257                    	    	<div >${cur_objetivosText.getData()}</div> 
258                    	    </div> 
259                	    </#if> 
260            	    </#list> 
261                </div> 
262            </#if> 
263            <#if competenceGeneralDescription?? && competenceGeneralDescription.getData()?? && competenceGeneralDescription.getData() != ""> 
264                <h2 class="obj-rec-title"> 
265                    <b>${competenceGeneralDescription.getData()}</b> 
266                </h2> 
267                <div class="compet-rec-dropdown"> 
268                    <#-- 
269                    Por ahora no está el campo relleno. HAbilitar cuando se solicite   
270                    <li class="compet-rec-sub accordion">${competenceGeneralDescription.competenceTitle.getData()}</li>--> 
271                    <div class="compet-rec-sub-info panel">${competenceGeneralDescription.competenceTitle.competenceDesc.getData()}</div> 
272                </div> 
273            </#if> 
274			<#assign existDownload = false /> 
275            <#if materialrelacionado.getData()?has_content || linkTxt.getSiblings()?has_content || materialrelacionado.titulomaterial.getSiblings()?has_content > 
276                <div class="row"> 
277                    <h2 class="obj-rec-title">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.materials.and.downloads")}</h2> 
278                    <#if materialesTexto.getData()?has_content> 
279                        <div> 
280                            ${materialesTexto.getData()} 
281                        </div> 
282                    </#if> 
283                    <#if linkTxt.internalLink.getData()?has_content> 
284                        <#list linkTxt.getSiblings() as linkTxt> 
285                            <ul> 
286                                <li class="resource-lis"> 
287	                                <#if linkTxt.internalLink.getData()?has_content && is_signed_in> 
288	                                    <a href="${linkTxt.internalLink.getData()}"> 
289	                                <#elseif linkTxt.externalLink.getData()?has_content && is_signed_in> 
290	                                    <a href="${linkTxt.externalLink.getData()}" target="_blank"> 
291	                                <#else> 
292	                                    <a onClick="openPopup('${loginURL}','','500', '650')"> 
293	                                </#if> 
294	                                    	<span>${linkTxt.getData()}</span> 
295	                                    </a> 
296	                                    <br> 
297									<#assign existDownload = true /> 
298                                </li> 
299                            </ul> 
300                        </#list> 
301                    </#if> 
302					<#assign materialDescargable = false /> 
303                    <#if materialrelacionado.getSiblings()?has_content> 
304                        <ul> 
305                            <#list materialrelacionado.getSiblings() as material> 
306                                <#if material.getData()?has_content> 
307									<#assign existDownload = true /> 
308									<#assign materialDescargable = true /> 
309                                    <#assign file = dLFileEntryLocalService.getFileEntryByUuidAndGroupId(material.getData()?keep_after_last("/")?keep_before("?"),groupId) /> 
310                                    <#if file?? && file != ""> 
311	                                    <li class="resource-lis"> 
312	                                        <#if is_signed_in> 
313				                                <#if material.getData()?contains("?t")> 
314													<#assign materialUrl = material.getData()[0..(material.getData()?last_index_of("/") - 1)]/> 
315			                                	<#else> 
316													<#assign materialUrl = material.getData()[0..material.getData()?length]/> 
317												</#if> 
318	                                            <a href="${material.getData()}" target="_blank" onClick="addGTMEvent('contenido', 'descarga recursos', '${materialUrl}')"> 
319	                                        <#else> 
320	                                            <a onClick="openPopup('${loginURL}','','500', '650')"> 
321	                                        </#if> 
322		                                            <span>${material.titulomaterial.getData()}</span> 
323		                                            <span> (${file.getMimeType()?keep_after_last("/")?upper_case} ${file.getSize()[0..(file.getSize()?length - 4)]}Kb)</span> 
324	                                            </a> 
325	                                            <br> 
326	                                    </li> 
327                                    </#if> 
328                                </#if> 
329                            </#list> 
330                        </ul> 
331                    </#if> 
332                </div> 
333                <#if descargable.getData()?has_content && materialDescargable> 
334                	<div class = "row"> 
335                        <#if is_signed_in> 
336                        	<#if descargable.getData()?contains("?t")> 
337								<#assign descargableUrl = descargable.getData()[0..(descargable.getData()?last_index_of("/")- 1)]/> 
338                            <#else> 
339								<#assign descargableUrl = descargable.getData()[0..descargable.getData()?length]/> 
340							</#if> 
341                            <p class="center"><a href="${descargable.getData()}" class="link-rec" onClick="addGTMEvent('contenido', 'descarga recursos', '${descargableUrl}')">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.download.all")}</a></p> 
342                        <#else> 
343                            <p class="center"><a href="#" onClick="openPopup('${loginURL}','','500', '650')" class="link-rec">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.download.all")}</a></p> 
344                        </#if> 
345						<#assign existDownload = true /> 
346                    </div> 
347                </#if> 
348				<#if !existDownload> 
349					<div> 
350						<span>${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.download.nocontent")}</span> 
351                    </div> 
352				</#if> 
353            </#if> 
354            <#if casosuso.getData()?has_content> 
355                <h2 class="obj-rec-title">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.example.use")}</h2> 
356                <p class="desc-rec">${casosuso.getData()}</p> 
357            </#if> 
358            <#if otrainfodidactica.getData()?has_content> 
359                <h2 class="obj-rec-title">${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.other.didactic.info")?upper_case}</h2> 
360                <p class="desc-rec">${otrainfodidactica.getData()}</p> 
361            </#if> 
362        </div>         
363        <#-- Register content --> 
364		<#if journalArticleLocalService.fetchArticle(groupId, "CAPTACION_RECURSO") ??> 
365		<#assign register = journalArticleLocalService.getArticle(groupId, "CAPTACION_RECURSO")/>  
366			<#if register?? && register != ""> 
367	            <#assign registerContent = journalArticleLocalService.getArticleContent(register, register.DDMTemplateKey, "VIEW", themeDisplay.getLocale(),NULL, themeDisplay) />  
368	        </#if> 
369	        <#assign registerContent = journalArticleLocalService.getArticleContent(register, register.DDMTemplateKey, "VIEW", themeDisplay.getLocale(),NULL, themeDisplay) />  
370		  	<div class= "captacion-ficha"> 
371		  		${registerContent} 
372	  		</div> 
373	    </#if> 
374    </div> 
375</div> 
376<style> 
377.objetivo{ 
378    color: #7B2FA1; 
379} 
380.contenido-dcha-item > span { 
381    width: 100%; 
382    height: 1px; 
383    display: inline-block; 
384} 
385.asset-full-content.clearfix.mb-5.default-asset-publisher.no-title > .align-items-center.d-flex.mb-2 { 
386  max-width: 1140px; 
387  margin: 0 auto; 
388  margin-bottom: 0px; 
389  margin-top:20px; 
390} 
391 
392p.component-title.h4 span.header-back-to > a.taglib-icon::after { 
393  content: "${LiteralsToolsServiceUtil.getLiteral(groupId, language, "com.educaixa.atras")}"; 
394  color:#009AD8; 
395} 
396 
397 
398.asset-full-content.clearfix.mb-5.default-asset-publisher.no-title > .align-items-center.d-flex.mb-2 .lexicon-icon.lexicon-icon-angle-left { 
399    fill: #009AD8; 
400    width: 15px; 
401    height: 15px; 
402    margin-right: 10px; 
403} 
404.container.vertical.image-view.ficha-evidencias .box-img.col-lg.square { 
405    box-shadow: 1px 1px 8px #d0d0d0; 
406} 
407</style> 
408<script> 
409$( document ).ready(function() { 
410    initAddThis(); 
411    $("span.header-back-to a").attr('onClick',''); 
412    $("span.header-back-to a").attr("href","/es/landing-recursos"); 
413    <#if language=='ca_ES'> 
414		$("span.header-back-to a").attr("href","/ca/landing-recursos"); 
415	</#if>	 
416}); 
417</script>