Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")  [in template "20099#20135#4061450" at line 13, column 34]

----
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 assetLinkLocalService = servi...  [in template "20099#20135#4061450" at line 13, column 1]
----
1<#-- 
2Template ID: 4061451 
3Template Key: 4061450 
4Type: display 
5Mode: None 
6--> 
7 
8<#assign structureService = serviceLocator.findService("it.inera.structure.service.StructureService")> 
9 
10<#assign eventoStructureKey = structureService.getStructureEventoKey()> 
11 
12<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
13<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") /> 
14<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
15<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
16 
17<#assign currentArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) /> 
18 
19<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey() /> 
20<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) /> 
21<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() /> 
22<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(currentArticleAssetEntryId) /> 
23 
24<#assign eventi = [] > 
25<#assign altri = [] > 
26 
27 
28<#list currentArticleRelatedLinks as related_entry> 
29    <#assign relatedAssetEntryId = related_entry.getEntryId2() /> 
30    <#assign relatedAssetEntry = assetEntryLocalService.getEntry(relatedAssetEntryId) /> 
31    <#assign relatedAssetEntryPrimKey = relatedAssetEntry.getClassPK() /> 
32    <#assign relatedArticle = journalArticleLocalService.getLatestArticle(relatedAssetEntryPrimKey) /> 
33    <#assign relatedArticleId = relatedArticle.getArticleId() /> 
34    <#if relatedArticle.DDMStructureKey?has_content && relatedArticle.DDMStructureKey == eventoStructureKey > 
35  		<#assign eventi = eventi + [relatedArticle]> 
36  	<#else> 
37  		<#assign altri = altri + [relatedArticle]> 
38  	</#if> 
39</#list> 
40 
41<#assign vocabularyIdUmbria = structureService.getVocabularyIdByVocabularyName("Vocabolario Umbria") > 
42 
43<#assign widthCardImg = propsUtil.get("image.scale.allpage") /> 
44 
45<div class="container-fluid"> 
46    <div class="row"> 
47      <div class="header-block header-under-nav header-block-image-layer header-block-1 header-block-image"> 
48      	<#if image.getSiblings()?has_content>  
49		    <#assign cur_image = image.getSiblings()[0] /> 
50		    <#if cur_image.getData()?? && cur_image.getData() != "" >  
51		        <img class="bg" alt="${cur_image.getAttribute("alt")}" data-fileentryid="${cur_image.getAttribute("fileEntryId")}" src="${cur_image.getData()}" /> 
52		    </#if> 
53		</#if> 
54        <div class="container title"> 
55          <div class="row"> 
56            <div class="col-12"> 
57              <div class="title-1">${title.getData()}</div> 
58            </div> 
59          </div> 
60        </div> 
61      </div> 
62    </div> 
63</div> 
64<div class="container-fluid bg-white"> 
65    <div class="row"> 
66      <div class="container"> 
67        <div class="row"> 
68          <div class="col-12 col-md-10 offset-md-1 padding-top-em-2 padding-bottom-em-2"> 
69            <div class="text-block"> 
70              <div class="title-2">${subtitle.getData()}</div> 
71              <div class="text">${text.getData()}</div> 
72            </div> 
73          </div> 
74        </div> 
75      </div> 
76    </div> 
77</div> 
78<div class="container-fluid"> 
79    <div class="row"> 
80      <div class="map map-container map-banner"> 
81        <div class="map-content"> 
82          <div class="leaflet-interactive-map map-summary-territories" id="map-results" data-kml="../undefined"></div> 
83        </div> 
84      </div> 
85    </div> 
86</div> 
87 
88 
89<#if altri?size gt 0>  
90    <div class="container-fluid bg-white"> 
91        <div class="row"> 
92          <div class="container padding-top-em-3 padding-bottom-em-5"> 
93            <div class="row"> 
94              <div class="col-12"> 
95                <div class="d-flex flex-justify-content-between flex-align-items-baseline"> 
96                  <div class="text text-top-events"><@liferay.language key="label.vivi.il.territorio" /></div> 
97                </div> 
98              </div> 
99              <div class="col-12"> 
100                <div class="carousel-container carousel-no-ctrl transparent margin-top-em-1 margin-bottom-em-3 tns-overflow-show carousel-draggable"> 
101                  <div class="tns-carousel tns-carousel-no-ctrl"> 
102                  	<#list altri as altro> 
103                  		<#assign langId = themeDisplay.getLanguageId() /> 
104    					<#assign contentByLocale = altro.getContentByLocale(themeDisplay.getLanguageId()) /> 
105    					<#assign document = saxReaderUtil.read(contentByLocale) > 
106    					<#assign rootElement = document.getRootElement()> 
107    				 
108    					<#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 
109    					<#assign relatedTitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
110    					 
111    					<#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 
112    					<#assign relatedSottotitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
113                    	 
114                    	<#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='immagine_banner']")> 
115    					<#assign relatedImmagineBanner = "" > 
116    					 
117    					<#if xPathImmagineBanner?? && xPathImmagineBanner?has_content> 
118        		        	<#if xPathImmagineBanner.selectSingleNode(rootElement)?? && xPathImmagineBanner.selectSingleNode(rootElement)?has_content> 
119    							<#assign relatedImmagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()> 
120    						</#if> 
121    					</#if> 
122    					 
123    					<#assign xPathTestoAlternativoImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_banner']")> 
124    						<#assign relatedTestoAlternativoImmagineBanner = "" > 
125    						<#if xPathTestoAlternativoImmagineBanner?? && xPathTestoAlternativoImmagineBanner?has_content> 
126    	    		        	<#if xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?? && xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?has_content> 
127    								<#assign relatedTestoAlternativoImmagineBanner = xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement).getStringValue()> 
128    							</#if> 
129    						</#if> 
130    					 
131    					<#if relatedImmagineBanner?has_content && relatedImmagineBanner?trim?length gt 0 > 
132    						<#assign immagineBannerJson = relatedImmagineBanner?eval > 
133    						<#assign url = "/documents/${immagineBannerJson.groupId}/${immagineBannerJson.classPK}/${immagineBannerJson.title}/${immagineBannerJson.uuid}?width=${widthCardImg}"> 
134    					<#else> 
135    						<#assign url = "" > 
136    					</#if> 
137    					 
138    					<#assign xPathCoordinatePrincipali = saxReaderUtil.createXPath("dynamic-element[@name='coordinate_principali']")> 
139    					<#assign relatedCoordinatePrincipali = xPathCoordinatePrincipali.selectSingleNode(rootElement).getStringValue()> 
140    					 
141    					<#if relatedCoordinatePrincipali?has_content && relatedCoordinatePrincipali?trim?length gt 0 > 
142    						<#assign coordinatePrincipaliRelatedJson = relatedCoordinatePrincipali?eval > 
143    						<#assign latitudeRelated = coordinatePrincipaliRelatedJson.latitude > 
144    						<#assign longitudeRelated = coordinatePrincipaliRelatedJson.longitude > 
145    					<#else> 
146    						<#assign latitudeRelated = "" > 
147    						<#assign longitudeRelated = "" > 
148    					</#if> 
149    					 
150    					<#assign resourcePrimKey = altro.getResourcePrimKey() /> 
151    					<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) /> 
152    					<#assign assetEntryId = assetEntry.getEntryId() /> 
153    						 
154    					<#assign categories = assetCategoryLocalService.getAssetEntryAssetCategories(assetEntryId) > 
155    						 
156    					<#assign categoryNames = [] > 
157    						 
158    					<#list categories as category> 
159    						<#if vocabularyIdUmbria == category.getVocabularyId() > 
160    							<#assign categoryNames = categoryNames + [category.getTitle(themeDisplay.getLanguageId())] > 
161    						</#if> 
162    					</#list> 
163    					 
164    	                <div> 
165    	                  <div class="card card-1 card-offerta card-geolocalized card-territory" data-lat="${latitudeRelated}" data-lng="${longitudeRelated}" data-url="/-/${altro.getUrlTitle()}" data-title="${relatedTitolo}"> 
166    	                  	<a class="card-link" href="/-/${altro.getUrlTitle()}"></a> 
167    	                    <div class="card-header"> 
168    	                      <div class="card-header-bg aspect-ratio aspect-ratio-4-3"> 
169    	                      	<img src="${url}" alt="${relatedTestoAlternativoImmagineBanner}"> 
170    	                      </div> 
171    	                      <a class="link link-tripplanner link-tripplanner-top-right margin-top-em-2 margin-right-em-1" href="" data-id="${altro.getArticleId()}" data-tom="false"><i class="far fa-heart text-red"></i><i class="fas fa-heart text-red" style="display:none;"></i></a> 
172    	                      <div class="card-header-info"> 
173    	                      	  <#list categoryNames as categoryName> 
174    	                              <div class="badge badge-red">${categoryName}</div> 
175    	                              <a class="header-title title-5" href="#"></a> 
176    							  </#list> 
177    	                      </div> 
178    	                    </div> 
179    	                    <div class="card-body"> 
180    	                      <div class="card-body-title title-4">${relatedTitolo}</div> 
181    	                      <div class="card-body-subtitle">${relatedSottotitolo}</div> 
182    	                    </div> 
183    	                    <div class="card-info card-info-readmore"> 
184    	                      <div class="info hidden"><@liferay.language key="label.continua.a.leggere" /></div> 
185    	                    </div> 
186    	                    <div class="card-info"> 
187    	                    </div> 
188    	                  </div> 
189    	                </div> 
190                    </#list> 
191                  </div> 
192                </div> 
193              </div> 
194            </div> 
195          </div> 
196        </div> 
197    </div> 
198</#if> 
199 
200 
201<#if eventi?size gt 0 > 
202    <div class="container-fluid bg-gray"> 
203        <div class="container padding-top-em-3 padding-bottom-em-5"> 
204          <div class="row"> 
205            <div class="col-12"> 
206              <div class="d-flex flex-justify-content-between flex-align-items-baseline"> 
207                <div class="text text-top-events"><@liferay.language key="label.eventi" /></div> 
208              </div> 
209            </div> 
210            <div class="col-12"> 
211              <div class="carousel-container carousel-no-ctrl transparent margin-top-em-1 margin-bottom-em-3 tns-overflow-show carousel-draggable"> 
212                <div class="tns-carousel tns-carousel-no-ctrl"> 
213                  <#list eventi as evento > 
214                  	<#assign langId = themeDisplay.getLanguageId() /> 
215    				<#assign contentByLocale = evento.getContentByLocale(themeDisplay.getLanguageId()) /> 
216    				<#assign document = saxReaderUtil.read(contentByLocale) > 
217    				<#assign rootElement = document.getRootElement()> 
218    			 
219    				<#assign xPathTitolo = saxReaderUtil.createXPath("dynamic-element[@name='titolo']")> 
220    				<#assign relatedEventoTitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
221    				 
222    				<#assign xPathSottotitolo = saxReaderUtil.createXPath("dynamic-element[@name='sottotitolo']")> 
223    				<#assign relatedEventoSottotitolo = xPathTitolo.selectSingleNode(rootElement).getStringValue()> 
224    				 
225    				<#assign xPathImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='immagine_banner']")> 
226    				<#assign relatedImmagineBanner = "" > 
227    				 
228    				<#if xPathImmagineBanner?? && xPathImmagineBanner?has_content> 
229    		        	<#if xPathImmagineBanner.selectSingleNode(rootElement)?? && xPathImmagineBanner.selectSingleNode(rootElement)?has_content> 
230    						<#assign relatedImmagineBanner = xPathImmagineBanner.selectSingleNode(rootElement).getStringValue()> 
231    					</#if> 
232    				</#if> 
233    				 
234    				<#assign xPathTestoAlternativoImmagineBanner = saxReaderUtil.createXPath("dynamic-element[@name='testo_alternativo_immagine_banner']")> 
235    					<#assign relatedEventoTestoAlternativoImmagineBanner = "" > 
236    					<#if xPathTestoAlternativoImmagineBanner?? && xPathTestoAlternativoImmagineBanner?has_content> 
237        		        	<#if xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?? && xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement)?has_content> 
238    							<#assign relatedEventoTestoAlternativoImmagineBanner = xPathTestoAlternativoImmagineBanner.selectSingleNode(rootElement).getStringValue()> 
239    						</#if> 
240    					</#if> 
241    				 
242    				<#if relatedImmagineBanner?has_content && relatedImmagineBanner?trim?length gt 0 > 
243    					<#assign immagineBannerJson = relatedImmagineBanner?eval > 
244    					<#assign urlEvento = "/documents/${immagineBannerJson.groupId}/${immagineBannerJson.classPK}/${immagineBannerJson.title}/${immagineBannerJson.uuid}?width=${widthCardImg}"> 
245    				<#else> 
246    					<#assign urlEvento = "" > 
247    				</#if> 
248    				 
249    				<#assign resourcePrimKey = evento.getResourcePrimKey() /> 
250    				<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) /> 
251    				<#assign assetEntryId = assetEntry.getEntryId() /> 
252    						 
253    				<#assign categories = assetCategoryLocalService.getAssetEntryAssetCategories(assetEntryId) > 
254    						 
255    				<#assign categoryNames = [] > 
256    						 
257    				<#list categories as category> 
258    					<#if vocabularyIdUmbria == category.getVocabularyId() > 
259    						<#assign categoryNames = categoryNames + [category.getTitle(themeDisplay.getLanguageId())] > 
260    					</#if> 
261    				</#list> 
262    				 
263    				<#assign xPathCoordinatePrincipali = saxReaderUtil.createXPath("dynamic-element[@name='coordinate_principali']")> 
264    				<#assign relatedCoordinatePrincipali = xPathCoordinatePrincipali.selectSingleNode(rootElement).getStringValue()> 
265    				 
266    				<#if relatedCoordinatePrincipali?has_content && relatedCoordinatePrincipali?trim?length gt 0 > 
267    					<#assign coordinatePrincipaliRelatedJson = relatedCoordinatePrincipali?eval > 
268    					<#assign latitudeEventoRelated = coordinatePrincipaliRelatedJson.latitude > 
269    					<#assign longitudeEventoRelated = coordinatePrincipaliRelatedJson.longitude > 
270    				<#else> 
271    					<#assign latitudeEventoRelated = "" > 
272    					<#assign longitudeEventoRelated = "" > 
273    				</#if> 
274    				 
275    				<div> 
276                      <div class="card card-1 card-offerta card-geolocalized card-territory" data-lat="${latitudeEventoRelated}" data-lng="${longitudeEventoRelated}" data-url="/-/${evento.getUrlTitle()}" data-title="${relatedEventoTitolo}"> 
277                      	<a class="card-link" href="/-/${evento.getUrlTitle()}"></a> 
278                        <div class="card-header"> 
279                          <div class="card-header-bg aspect-ratio aspect-ratio-4-3"> 
280                          	<img src="${urlEvento}" alt="${relatedEventoTestoAlternativoImmagineBanner}"> 
281                          </div> 
282                          <a class="link link-tripplanner link-tripplanner-top-right margin-top-em-2 margin-right-em-1" href="" data-id="${evento.getArticleId()}" data-tom="false"><i class="far fa-heart text-red"></i><i class="fas fa-heart text-red" style="display:none;"></i></a> 
283                          <div class="card-header-info"> 
284                            <#list categoryNames as categoryName> 
285    	                    	<div class="badge badge-red">${categoryName}</div> 
286    	                        <a class="header-title title-5" href="#"></a> 
287    						</#list> 
288                          </div> 
289                        </div> 
290                        <div class="card-body"> 
291                          <div class="card-body-title title-4">${relatedEventoTitolo}</div> 
292                          <div class="card-body-subtitle">${relatedEventoSottotitolo}</div> 
293                        </div> 
294                        <div class="card-info card-info-readmore"> 
295                          <div class="info hidden"><@liferay.language key="label.continua.a.leggere" /></div> 
296                        </div> 
297                        <div class="card-info"> 
298                        </div> 
299                      </div> 
300                    </div> 
301                 </#list> 
302                </div> 
303              </div> 
304            </div> 
305          </div> 
306        </div> 
307    </div> 
308</#if>