Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService")  [in template "20907#20945#18442168" at line 3, column 39]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign JournalArticleLocalService = ...  [in template "20907#20945#18442168" at line 3, column 1]
----
1COPIA 
2<#assign journalArticleId = .vars['reserved-article-id'].data>	 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService")> 
4<#assign article = JournalArticleLocalService.getArticle(groupId, journalArticleId)>	 
5 
6<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryLocalService")>	 
7<#assign articleCats = AssetCategoryLocalService.getCategories("com.liferay.portlet.journal.model.JournalArticle", article.getResourcePrimKey()?number)> 
8 
9<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetEntryLocalService") /> 
10<#assign asset = assetEntryLocalService.getEntry('com.liferay.portlet.journal.model.JournalArticle', article.resourcePrimKey) > 
11<#assign DLYServices = serviceLocator.findService("DLYServices-portlet","net.izfe.liferay.services.service.CustomServiceService") /> 
12<#assign listUtil = staticUtil["com.liferay.portal.kernel.util.ListUtil"] /> 
13<#assign kar_style = "">	 
14<#list asset.getTags() as tag> 
15    <#if tag.name = "kars"> 
16        <#assign kar_style = "kars">	 
17    </#if> 
18</#list> 
19 
20<#assign journalArticleTitle = .vars['reserved-article-title'].data > 
21 
22<#-- VARIABLES --> 
23<#if false>  <#-- DESARROLLO = true --> 
24	<#assign temaVocabularyId = 554756> 
25	<#assign videoCategoryId = 1404351> 
26	<#assign conversionCorrectaCategoryId = 1363331> 
27    <#assign ddmStructureId = "1286807"> 
28	<#if locale.getLanguage() == 'es'> 
29		<#assign siteUrl = 'https://gipuzkoa.sare.gipuzkoa.net/es/web/multimedia'> 
30		<#assign ruta_tema = 'https://gipuzkoa.sare.gipuzkoa.net/es/web/multimedia/tematicas?p_p_id=122_INSTANCE_jDs46ffrbvzD&p_r_p_564233524_categoryId=' > 
31	<#else> 
32		<#assign siteUrl = 'https://gipuzkoa.sare.gipuzkoa.net/eu/web/multimedia'> 
33		<#assign ruta_tema = 'https://gipuzkoa.sare.gipuzkoa.net/eu/web/multimedia/tematikak?p_p_id=122_INSTANCE_jDs46ffrbvzD&p_r_p_564233524_categoryId=' > 
34	</#if>	 
35<#else> 
36	<#assign temaVocabularyId = 920242> 
37	<#assign videoCategoryId = 3916721> 
38	<#assign conversionCorrectaCategoryId = 3917242> 
39    <#assign ddmStructureId = "3916988"> 
40	<#if locale.getLanguage() == 'es'> 
41		<#assign siteUrl = 'https://www.gipuzkoa.eus/es/web/multimedia'> 
42		<#assign ruta_tema = 'https://www.gipuzkoa.eus/es/web/multimedia/tematicas?p_p_id=122_INSTANCE_jDs46ffrbvzD&p_r_p_564233524_categoryId=' > 
43	<#else> 
44		<#assign siteUrl = 'https://www.gipuzkoa.eus/eu/web/multimedia'> 
45		<#assign ruta_tema = 'https://www.gipuzkoa.eus/eu/web/multimedia/tematikak?p_p_id=122_INSTANCE_jDs46ffrbvzD&p_r_p_564233524_categoryId=' > 
46	</#if>	 
47</#if> 
48 
49<#assign video_url = "https://multimedia.gipuzkoa.eus/media/video/" > 
50<#assign video_og = video_url + journalArticleId + ".240.mp4"  > 
51 
52 
53<#if request.attributes.CURRENT_URL? has_content> 
54	<#assign serviceContext = staticUtil["com.liferay.portal.service.ServiceContextThreadLocal"].getServiceContext()> 
55	<#assign portalURL = serviceContext.getThemeDisplay().getPortalURL() /> 
56	<#assign currentURL = request.attributes.CURRENT_URL /> 
57	<#assign absoluteURL = portalURL + currentURL /> 
58	 
59	 
60	<#assign httpServletRequest = serviceContext.getRequest() /> 
61	<#assign moc = httpServletRequest.setAttribute("META_TAG_og:url", absoluteURL) /> 
62	<#assign moc = httpServletRequest.setAttribute("META_TAG_og:title", .vars['reserved-article-title'].data) /> 
63	<#assign moc = httpServletRequest.setAttribute("META_TAG_og:image", .vars['Thumbnail'].getData()) /> 
64	<#assign moc = httpServletRequest.setAttribute("META_TAG_og:video:url", video_og) /> 
65</#if> 
66 
67<#if locale.getLanguage() == 'es'> 
68	<#assign descargar = 'Descargar vídeo'> 
69	<#assign relacionados = 'Vídeos relacionados'> 
70	<#assign textoDescargar = 'Te ofrecemos los vídeos en distintas calidades: HD, 720, 576 y 240. Selecciona la calidad que necesitas y descarga el vídeo'> 
71	<#assign calidad = 'Calidad'> 
72	<#assign incluido = 'Incluido en la comunicación:'> 
73	<#assign compartir = 'Compartir vídeo'> 
74	<#assign shareRss = 'Compartir en redes sociales'> 
75	<#assign embedText = 'Incrustar vídeo en web'> 
76<#else> 
77	<#assign descargar = 'Bideoa deskargatu'> 
78	<#assign relacionados = 'Erlazionatutako bideoak'> 
79	<#assign textoDescargar = 'Bideoa kalitate desberdinetan eskaintzen dizugu: HD, 720, 576 eta 240. Aukeratu behar duzun kalitatea eta deskargatu bideoa.'> 
80	<#assign calidad = 'Kalitatea'> 
81	<#assign incluido = 'Komunikazioaren barnean:'> 
82	<#assign compartir = 'Bideoa partekatu'> 
83	<#assign shareRss = 'Sare sozialetan partekatu'> 
84	<#assign embedText = 'Webgunean bideoa txertatu'> 
85</#if> 
86 
87<#assign serviceContext = staticUtil["com.liferay.portal.service.ServiceContextThreadLocal"].getServiceContext()> 
88<#assign themeDisplay = serviceContext.getThemeDisplay() /> 
89<#assign isMobile = browserSniffer.isMobile(themeDisplay.getRequest()) /> 
90 
91<div id="ficha" class="padding-bottom-80"> 
92	 
93	<div class="row-fluid"> 
94		<div class="span8 padding-bottom-40"> 
95			<h2>${.vars['reserved-article-title'].data}</h2> 
96			<#if .vars['deskribapena']? has_content> 
97				<p>${.vars['deskribapena'].getData()}</p> 
98			<#else> 
99				<p>&nbsp;</p> 
100			</#if> 
101			<div class="article-footer"> 
102				<p class="entry-meta avant-font-bold"> 
103					<time class="updated entry-time"> 
104						<#if .vars['data']? has_content> 
105							<#assign data_string = .vars['data'].getData() > 
106						<#else> 
107							<#assign data_string = '' > 
108						</#if> 
109						<#if (data_string == '')>										 
110							 
111						<#else> 
112							<#assign data = data_string?number />	 
113							<#if locale.getLanguage() == 'es'> 
114								${data?number_to_date?string('dd/MM/yyyy')} 
115							<#else> 
116				    			${data?number_to_date?string('yyyy/MM/dd')} 
117							</#if> 
118						</#if> 
119					</time> 
120					<#if articleCats?size gt 0 > 
121					 
122						<#assign links_cats = []> 
123						<#list 0..articleCats?size-1 as x> 
124							<#if articleCats[x].vocabularyId == temaVocabularyId> 
125								<#assign enlace = "<a class='avant-font-book uppercase' href='${ruta_tema}${articleCats[x].categoryId}'>${articleCats[x].getTitle(locale)}</a>" > 
126								<#assign links_cats = links_cats + [enlace]>										 
127							</#if> 
128						</#list> 
129						<#list links_cats as item> 
130							${item}<#if item_has_next> / </#if> 
131						</#list> 
132						 
133					</#if>	 
134				</p> 
135			</div> 
136		</div> 
137	</div> 
138 
139	<#if .vars['ekitaldiId']? has_content> 
140		<#assign ekitaldiId = .vars['ekitaldiId'].data>	 
141		<#if ekitaldiId != '' >	 
142			<#if JournalArticleLocalService.hasArticle(groupId, ekitaldiId) > 
143				<#assign ekitaldiArticle = JournalArticleLocalService.getArticle(groupId, ekitaldiId)> 
144				<div class="row-fluid"> 
145					<div class="span8"> 
146						<p class="avant-font-bold">${incluido} <a class="avant-font-book" href="${siteUrl}/-/${ekitaldiArticle.urlTitle}">${ekitaldiArticle.getTitle(locale)}</a></p> 
147					</div> 
148				</div> 
149			</#if> 
150		</#if> 
151	</#if> 
152 
153	<div class="row-fluid"> 
154		<div class="span8"> 
155			<div class="media-wrapper ${kar_style}"> 
156                          <div class="dfg-logo">&nbsp</div> 
157				<#if .vars['iraupena']? has_content>			 
158					<#assign seconds = .vars['iraupena'].getData()?number > 
159				<#else> 
160					<#assign seconds = 0 > 
161				</#if> 
162				<#if seconds gt 0> 
163					<#-- <#assign seconds = seconds > --> 
164					<#assign minutes = seconds / 60 > 
165					<#assign hours = minutes / 60 > 
166					 
167					<#assign seconds = seconds % 60 > 
168					<#assign minutes = minutes % 60 > 
169					<#assign hours = hours % 24 >					 
170					 
171					<#if hours gt 0> 
172						<#if seconds lt 10> 
173							<#assign seconds = '0' + seconds?string > 
174						</#if> 
175						<#if minutes lt 10> 
176							<#assign minutes = '0' + minutes?string > 
177						</#if>									 
178							<span class="duration">${hours}:${minutes}:${seconds}</span> 
179					<#else> 
180						<#if seconds lt 10> 
181							<#assign seconds = '0' + seconds?string > 
182						</#if> 
183							<span class="duration">${minutes}:${seconds}</span> 
184					</#if> 
185				</#if>				 
186				 
187				<#if .vars['url_migrazioa']? has_content> 
188         <#if .vars['url_migrazioa'].getData() == '-'> 
189					<video id="player1" width="640" height="360" style="max-width:100%;" poster="${.vars['Thumbnail'].getData()}" preload="none" controls="" playsinline="" webkit-playsinline=""> 
190					 <#if isMobile> 
191						<source src="${video_url}${journalArticleId}.240.mp4" type="video/mp4"> 
192					 <#else> 
193						<source src="${video_url}${journalArticleId}.720.mp4" type="video/mp4"> 
194					 </#if> 
195					</video> 
196         <#else> 
197          <#assign videoMigSrc = .vars['url_migrazioa'].getData()?replace("watch?v=", "embed/") > 
198          <iframe width="100%" height="555" title="${journalArticleTitle}" src="${videoMigSrc}?rel=0&amp;showinfo=0" style="border:0px;" allow="autoplay; encrypted-media" allow="fullscreen"></iframe> 
199         </#if> 
200        </#if> 
201 
202 
203         
204         
205			</div> 
206		</div> 
207   
208		<div class="span4"> 
209			<div class="row-fluid" style="border-bottom:1px solid #dedede;"> 
210				<div class="span6">					 
211					<div class="share"> 
212						<a class="avant-font-bold inline-popup" href="#compartir"><span class="download-ico">&nbsp;</span>${compartir}</a> 
213					</div>					 
214					<div class="white-popup mfp-move-horizontal mfp-hide" id="compartir"> 
215						<h3>${compartir}</h3> 
216						<h4 class="avant-font-bold padding-bottom-20">${shareRss}</h4> 
217						<div class="social padding-top-20"> 
218						<ul> 
219							<li class="facebook"> 
220								<a  
221								href="https://www.facebook.com/sharer/sharer.php?u=${siteUrl}/-/${article.urlTitle}"  
222								id="facebook-share"  
223								onclick="javascript:window.open(this.href,'','menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=283,width=605');return false;"  
224								rel="external"  
225								target="_blank"  
226								title="Compartir en Facebook [Se abrirá en ventana nueva]"> 
227									<span class="ico"> 
228										<span class="text-indent">Facebook</span> 
229									</span>  
230								</a> 
231							</li> 
232							<li class="twitter"> 
233								<a 
234								href="https://twitter.com/home?status=${journalArticleTitle}%20${siteUrl}/-/${article.urlTitle}"  
235								id="twitter-share"  
236								onclick="javascript:window.open(this.href,'','menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=216,width=680');return false;"  
237								title="Compartir en Twitter"> 
238									<span class="ico"> 
239										<span class="text-indent">Twitter</span> 
240									</span> 
241								</a> 
242							</li> 
243							<li class="email"> 
244								<a  
245								href="mailto:?body=${journalArticleTitle}%20${siteUrl}/-/${article.urlTitle}"  
246								id="mail-share"  
247								title="Compartir por e-mail"> 
248									<span class="ico"> 
249										<span class="text-indent">E-mail</span> 
250									</span> 
251								</a> 
252							</li> 
253							<#if isMobile> 
254							<li class="whatsapp"> 
255								<a data-="" data-action="share/whatsapp/share"  
256								href="whatsapp://send?text=${journalArticleTitle}%20${siteUrl}/-/${article.urlTitle}"  
257								id="whatsapp-share"  
258								title="Compartir con WhatsApp"> 
259									<span class="ico"> 
260										<span class="text-indent">Whatsapp</span>  
261									</span> 
262								</a> 
263							</li> 
264							</#if> 
265						</ul> 
266						</div> 
267						<div class="padding-top-40"> 
268							<h4 class="avant-font-bold padding-bottom-20">${embedText}</h4> 
269							<label for="textareashare" class="hide-accessible">${embedText}</label> 
270							<textarea id="textareashare" cols="100" rows="4" style="width: 90%;"><video id="player1" width="640" height="360" style="max-width:100%;" poster="${.vars['Thumbnail'].getData()}" preload="none" controls="" playsinline="" webkit-playsinline=""><#if .vars['url_migrazioa'].getData() == '-'><source src="${video_url}${journalArticleId}.720.mp4" type="video/mp4"><#else><source src="${.vars['url_migrazioa'].getData()}" type="video/mp4"></#if></video></textarea> 
271						</div> 
272						<button title="Close (Esc)" type="button" class="mfp-close">×</button> 
273					</div>					 
274				</div> 
275				<div class="span6"> 
276					<div class="download"> 
277						<a class="avant-font-bold inline-popup" href="#resolution"><span class="download-ico">&nbsp;</span>${descargar}</a> 
278					</div> 
279					 
280					<#if .vars['url_migrazioa']? has_content> 
281						<div id="resolution" class="white-popup mfp-move-horizontal mfp-hide"> 
282							<h3>${descargar}</h3> 
283							<p class="avant-font-book">${textoDescargar}</p> 
284							<h4>${calidad}</h4> 
285							<#if .vars['url_migrazioa'].getData() == '-'> 
286								<ul>				 
287									<li><a target="_blank" href="${video_url}${journalArticleId}.1080.mp4" download="${.vars['reserved-article-title'].data}_1080.mp4">Full HD (1080px)</a></li> 
288									<li><a target="_blank" href="${video_url}${journalArticleId}.720.mp4" download="${.vars['reserved-article-title'].data}_720.mp4">HD (720px)</a></li> 
289									<li><a target="_blank" href="${video_url}${journalArticleId}.576.mp4" download="${.vars['reserved-article-title'].data}_576.mp4">SD (576px)</a></li> 
290									<li><a target="_blank" href="${video_url}${journalArticleId}.240.mp4" download="${.vars['reserved-article-title'].data}_240.mp4">LD (240px)</a></li> 
291								</ul> 
292							<#else> 
293								<ul>				 
294									<li><a target="_blank" href="${.vars['url_migrazioa'].getData()}" download="${.vars['url_migrazioa'].getData()}">${descargar}</a></li> 
295								</ul>					 
296							</#if> 
297						</div> 
298					</#if>	 
299				</div>				 
300			</div>		 
301		 
302			<!-- Relacionados --> 
303            <#assign term1 = DLYServices.createTermCategory(videoCategoryId?string, "must") /> 
304            <#assign term2 = DLYServices.createTermCategory(conversionCorrectaCategoryId?string, "must") /> 
305            <#assign termsArray = [ term1, term2 ]> 
306            <#assign httpServletRequest = serviceContext.getRequest()> 
307             
308            <#if articleCats?size gt 0 > 
309                <#assign termsArrayCats = [ ]> 
310                	<#list 0..articleCats?size-1 as x> 
311                		<#if articleCats[x].vocabularyId == temaVocabularyId>	 
312                            <#assign term = DLYServices.createTermCategory(articleCats[x].categoryId?string, "should") /> 
313                            <#assign termsArrayCats = termsArrayCats + [term]> 
314                             
315                		</#if> 
316                	</#list>	 
317                <#assign termsArray = termsArray + [listUtil.fromArray(termsArrayCats)]>	 
318            </#if> 
319             
320            <#assign termsList = listUtil.fromArray(termsArray)/> 
321            <#assign sorts = [] > 
322            <#assign relatedArticles = DLYServices.getLatestApprovedArticles( 
323                httpServletRequest,  
324                termsList,  
325                groupId,  
326                ddmStructureId, 
327                sorts, 
328                0, 
329                4)> 
330             
331									 
332				 
333			 
334			<#assign mostrados = 0 /> 
335			<#list relatedArticles as relatedArticle> 
336			 
337				<#if relatedArticle.getResourcePrimKey() != article.getResourcePrimKey()> 
338                 
339					<#if mostrados == 3> 
340						<#break> 
341					<#elseif mostrados == 0> 
342					    <div class="row-fluid padding-top-20"> 
343        					<h3>${relacionados}</h3> 
344        				</div> 
345					</#if> 
346					 
347					<#assign docXml = saxReaderUtil.read(relatedArticle.getContentByLocale(locale)) > 
348					<#assign video_imagen = docXml.valueOf("//dynamic-element[@name='Thumbnail']/dynamic-content/text()") /> 
349					<#assign iraupena = docXml.valueOf("//dynamic-element[@name='iraupena']/dynamic-content/text()") >						 
350					<#if !iraupena? has_content> 
351						<#assign iraupena = 0> 
352					</#if>						 
353					<div class="row-fluid padding-top-20"> 
354						<div class="span5">					 
355							<a href="${siteUrl}/-/${relatedArticle.urlTitle}"> 
356								<div class="content-holder" style="background-image: url('${video_imagen}'); "> 
357									<#assign seconds = iraupena?number > 
358									<#if seconds gt 0> 
359										<#-- <#assign seconds = seconds > --> 
360										<#assign minutes = seconds / 60 > 
361										<#assign hours = minutes / 60 > 
362			 
363										<#assign seconds = seconds % 60 > 
364										<#assign minutes = minutes % 60 > 
365										<#assign hours = hours % 24 >					 
366			 
367										<#if hours gt 0> 
368											<#if seconds lt 10> 
369												<#assign seconds = '0' + seconds?string > 
370											</#if> 
371											<#if minutes lt 10> 
372												<#assign minutes = '0' + minutes?string > 
373											</#if>									 
374											<span class="avant-font-bold duration">${hours}:${minutes}:${seconds}</span> 
375										<#else> 
376											<#if seconds lt 10> 
377												<#assign seconds = '0' + seconds?string > 
378											</#if> 
379												<span class="avant-font-bold duration">${minutes}:${seconds}</span> 
380										</#if> 
381									</#if> 
382								</div> 
383							</a>						 
384						</div> 
385						<div class="span7"> 
386							<a href="${siteUrl}/-/${relatedArticle.urlTitle}" class="avant-font-bold">${relatedArticle.getTitle(locale)}</a> 
387						</div> 
388					</div> 
389				 
390					<#assign mostrados = mostrados + 1 /> 
391				</#if>						 
392			</#list> 
393		</div>	 
394	</div> 
395</div>