angle-left null Case study test
An error occurred while processing the template.
The following has evaluated to null or missing:
==> journalArticleUtil.getJournalArticleByArticleId(journalArticleId) [in template "20099#20135#213688" at line 8, column 22]
----
Tip: If the failing expression is known to be 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: journalArticle = journalArticleUtil.g... [in template "20099#20135#213688" at line 8, column 5]
- Reached through: #assign-container [in template "20099#20135#213688" at line 1, column 1]
----
1<#assign  
2 defaultImage = themeDisplay.getPathThemeImages() + '/default_image.png' 
3 TAXONOMIES_DISPLAY_COUNT = 6 
4 journalArticleId = .vars['reserved-article-id'].data 
5 journalArticleTitle = .vars['reserved-article-title'].data 
6 groupId = themeDisplay.getLayout().getGroupId() 
7 journalArticleUtil = serviceLocator.findService("com.eversis.esa.eomall.eomall.core.api.util.JournalArticleUtils") 
8 journalArticle = journalArticleUtil.getJournalArticleByArticleId(journalArticleId) 
9 resourceprimKey = journalArticle.getResourcePrimKey() 
10 assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") 
11 assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourceprimKey) 
12 assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") 
13 organizationUtils = serviceLocator.findService("com.eversis.esa.eomall.eomall.core.api.util.OrganizationUtils") 
14 organizationId = journalArticleUtil.getOrganizationIdByJournalArticle(journalArticle) 
15 organizationLogo = '' 
16 organizationURL = '' 
17 organizationName = '' 
18 organizationType = '' 
19 companyName = 'Company name' 
20 taxonomies = [] 
21 reasearchFields = [] 
22/> 
23<#if (journalArticleUtil.getJournalArticleOrganizationType(journalArticle)?? && journalArticleUtil.getJournalArticleOrganizationType(journalArticle).isPresent())> 
24 <#assign organizationType = journalArticleUtil.getJournalArticleOrganizationType(journalArticle).get().getName() /> 
25</#if> 
26<#if organizationId != 0> 
27 <#assign organization = organizationUtils.getOrganizationById(organizationId) /> 
28 <#assign organizationName = organization.getName() /> 
29 <#assign organizationLogo = organizationUtils.getOrganizationLogoImageURL(organizationId) /> 
30 <#assign organizationPhoneNumber = organizationUtils.getOrganizationPrimaryPhoneNumber(organizationId) /> 
31 <#assign organizationFaxNumber = organizationUtils.getOrganizationFaxNumber(organizationId) /> 
32 <#assign organizationEmailAddress = organizationUtils.getOrganizationPrimaryEmailAddress(organizationId) /> 
33 <#assign organizationURL = organizationUtils.getOrganizationPrimaryWebsiteURL(organizationId) /> 
34 <#assign companyName = organization.getName() /> 
35</#if> 
36<#list assetEntry.getCategories() as category> 
37 <#assign vocabulary = assetVocabularyLocalService.getVocabulary(category.vocabularyId) /> 
38 <#if vocabulary.getName() == 'Market Sector' || vocabulary.getName() == 'Thematic'> 
39 <#assign taxonomies = taxonomies + [category.getName()] /> 
40 </#if> 
41 <#if vocabulary.getName() == 'Research fields'> 
42 <#assign reasearchFields = reasearchFields + [category.getName()] /> 
43 </#if> 
44</#list> 
45 
46<#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() /> 
47 
48<#if CaseStudyAbstract??> 
49 <#assign articleDescription = CaseStudyAbstract.getData() /> 
50<#else> 
51 <#assign articleDescription = case_study_implementation.getData() + case_study_available_datasets.getData() /> 
52</#if> 
53 
54<#assign articleBackstory = case_study_scope_of_project.getData() /> 
55 
56<#if getterUtil.getString(case_study_publication_date.getData()) != ''> 
57 <#assign case_study_publication_date_Data = getterUtil.getString(case_study_publication_date.getData()) /> 
58<#else> 
59 <#assign case_study_publication_date_Data = '2019-01-01' /> 
60</#if> 
61 
62<#assign articleComment = case_study_result.getData() /> 
63 
64<script type="application/ld+json"> 
65
66 "@context": "https://schema.org", 
67 "@type": "Article", 
68 "name": "${journalArticleTitle}", 
69 "description": "${articleDescription}", 
70 "image": [ 
71 "${themeDisplay.getPortalURL()}${case_study_main_header_image.getData()}", 
72 "${themeDisplay.getPortalURL()}${case_study_receiver_image.getData()}", 
73 "${themeDisplay.getPortalURL()}${case_study_benefits.case_study_benefits_image.getData()}" 
74 ], 
75 "sameAs": [ 
76 "${case_study_service_on_eomall.case_study_service_on_eomall_link_url.getData()}", 
77 "${case_study_external_service_link.case_study_external_service_link_url.getData()}" 
78 ], 
79 "url": "${currentUrl}", 
80 "articleSection": "${case_study_service_category.getData()}", 
81 "backstory": "${articleBackstory}", 
82 "author": { 
83 "@type": "Organization", 
84 "name": "${organizationName}", 
85 "logo": { 
86 "@type": "ImageObject", 
87 "url": "${themeDisplay.getPortalURL()}${organizationLogo}" 
88 }, 
89 "telephone": "${organizationPhoneNumber}", 
90 "faxNumber": "${organizationFaxNumber}", 
91 "email": "${organizationEmailAddress}", 
92 "url": "${organizationURL}" 
93 }, 
94 "creator": { 
95 "@type": "Organization", 
96 "name": "${organizationName}", 
97 "logo": { 
98 "@type": "ImageObject", 
99 "url": "${themeDisplay.getPortalURL()}${organizationLogo}" 
100 }, 
101 "telephone": "${organizationPhoneNumber}", 
102 "faxNumber": "${organizationFaxNumber}", 
103 "email": "${organizationEmailAddress}", 
104 "url": "${organizationURL}" 
105 }, 
106 "publisher": { 
107 "@type": "Organization", 
108 "name": "${organizationName}", 
109 "logo": { 
110 "@type": "ImageObject", 
111 "url": "${themeDisplay.getPortalURL()}${organizationLogo}" 
112 }, 
113 "telephone": "${organizationPhoneNumber}", 
114 "faxNumber": "${organizationFaxNumber}", 
115 "email": "${organizationEmailAddress}", 
116 "url": "${organizationURL}" 
117 }, 
118 "comment": "${articleComment}", 
119 "dateCreated": "${case_study_publication_date_Data}", 
120 "dateModified": "${case_study_publication_date_Data}", 
121 "datePublished": "${case_study_publication_date_Data}", 
122 "headline": "${journalArticleTitle}", 
123 "alternativeHeadline": "${taxonomies[0..*TAXONOMIES_DISPLAY_COUNT]?join(', ')}", 
124 "keywords": "${(reasearchFields?size > 0)?then(reasearchFields?join(', '), '')}", 
125 "mainEntityOfPage": [ 
126 "${case_study_service_on_eomall.case_study_service_on_eomall_link_url.getData()}", 
127 "${case_study_external_service_link.case_study_external_service_link_url.getData()}" 
128
129
130</script> 
131 
132<#compress> 
133<div class="article article--case-study row"> 
134 <div class="col-sm-12 page__section"> 
135 <p class="h5 col-sm-12 text-uppercase text-center font-bold margin-bottom-0"><@liferay.language key="CaseStudy.CaseStudy" /></p> 
136 <p class="align-items-center section__name text-center margin-bottom-10 h1">${journalArticleTitle}</p> 
137 <p class="col-12 text-center text-uppercase d-none d-md-block section__taxonomies service__taxonomies">${taxonomies[0..*TAXONOMIES_DISPLAY_COUNT]?join('; ')}</p> 
138  
139 <div class="d-flex flex-wrap align-items-end"> 
140 <div class="margin-bottom-25"> 
141 <div class="success-story__receiver-logo-wrapper text-center text-md-left"> 
142 <a class="d-block link__item service__logo padding-left-0 margin-bottom-0" href="${organizationURL}" target="_blank"> 
143 <img class="case-study__receiver-logo-image" alt="${organizationName}" title="${organizationName}" src="${organizationLogo}" onerror='this.src="${defaultImage}"' /> 
144 </a> 
145 </div> 
146 </div> 
147 <div class="extra-options margin-bottom-25 ml-auto"> 
148 <div class="ml-auto product__share_trigger relative"> 
149 <i class="icon eo-icon-share"></i> 
150 <div class="product__share"> 
151 <span data-link="#share-facebook" data-title="${journalArticleTitle}" data-description="" class="padding-right-15"><i class="eo-icon-facebook"></i></span> 
152 <span data-link="#share-linkedin" data-title="${journalArticleTitle}" data-description="" class="padding-right-15"><i class="eo-icon-linkedin"></i></span> 
153 <span data-link="#share-twitter" data-title="${journalArticleTitle}" data-description=""><i class="eo-icon-twitter"></i></span> 
154 </div> 
155 </div> 
156 </div> 
157 </div> 
158 <div class="row"> 
159 <div class="col-md-6 margin-bottom-30 margin-bottom-md-70"> 
160 <div class="border w-100"> 
161 <div class="ratio-box ratio-box--16-9"> 
162 <#if case_study_main_header_image.getData()?? && case_study_main_header_image.getData() != ""> 
163 <img alt="${case_study_main_header_image.getAttribute("alt")}" data-fileentryid="${case_study_main_header_image.getAttribute("fileEntryId")}" 
164 src="${case_study_main_header_image.getData()}" onerror='this.src="${defaultImage}"' /> 
165 <#else> 
166 <picture> 
167 <img src="${defaultImage}"> 
168 </picture> 
169 </#if> 
170 </div> 
171 </div> 
172 </div> 
173 <div class="col-md-6 margin-bottom-30 margin-bottom-md-70 map-container"> 
174 <#assign latitude = 0> 
175 <#assign longitude = 0> 
176 <#if (case_study_location_map.getData() != "")> <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(case_study_location_map.getData())> 
177 <#assign latitude = geolocationJSONObject.getDouble("latitude")> 
178 <#assign longitude = geolocationJSONObject.getDouble("longitude")> 
179 <@liferay_map["map-display"] geolocation=true latitude=latitude longitude=longitude name="case_study_location_map${randomizer.nextInt()}" /> 
180 </#if> 
181 </div> 
182 </div> 
183 <div class="row"> 
184 <div class="col-md-6 margin-bottom-30 margin-bottom-md-60 align-self-center"> 
185 <h4><@liferay.language key="CaseStudy.backgroundHeader" /></h4> 
186 <time class="d-block margin-top-15 margin-bottom-15"> 
187 <#assign case_study_publication_date_Data = getterUtil.getString(case_study_publication_date.getData())> 
188 <#if validator.isNotNull(case_study_publication_date_Data)> 
189 <#assign case_study_publication_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", case_study_publication_date_Data, locale)> 
190 ${dateUtil.getDate(case_study_publication_date_DateObj, "dd MMMM yyyy", locale)} 
191 </#if> 
192 </time> 
193 <p>${case_study_scope_of_project.getData()}</p> 
194 </div> 
195 <div class="col-md-6 margin-bottom-30 margin-bottom-md-60"> 
196 <div class="d-flex align-items-center justify-content-center height-100"> 
197 <div class="border w-100"> 
198 <div class="ratio-box ratio-box--16-9 logotype"> 
199 <#if case_study_receiver_image.getData()?? && case_study_receiver_image.getData() != ""> 
200 <img alt="${case_study_receiver_image.getAttribute("alt")}" data-fileentryid="${case_study_receiver_image.getAttribute("fileEntryId")}" 
201 src="${case_study_receiver_image.getData()}" onerror='this.src="${defaultImage}"' /> 
202 <#else> 
203 <picture> 
204 <img src="${defaultImage}"> 
205 </picture> 
206 </#if> 
207 </div> 
208 </div> 
209 </div> 
210 </div> 
211 </div> 
212 <div class="row"> 
213 <div class="col-md-6 margin-bottom-30 margin-bottom-md-60"> 
214 <h4><@liferay.language key="CaseStudy.solutionHeader" /></h4> 
215 <p>${case_study_implementation.getData()}</p> 
216 </div> 
217 <div class="col-md-6 margin-bottom-30 margin-bottom-md-60"> 
218 <h4><@liferay.language key="CaseStudy.resultHeader" /></h4> 
219 <p>${case_study_result.getData()}</p> 
220 </div> 
221 </div> 
222 <div class="row align-items-center"> 
223 <div class="col-md-6 margin-bottom-30 margin-bottom-md-60"> 
224 <div class="d-flex align-items-center justify-content-center height-100"> 
225 <div class="border w-100"> 
226 <div class="ratio-box ratio-box--16-9"> 
227 <#if case_study_benefits.case_study_benefits_image.getData()?? && case_study_benefits.case_study_benefits_image.getData() != ""> 
228 <img alt="${case_study_benefits.case_study_benefits_image.getAttribute("alt")}" data-fileentryid="${case_study_benefits.case_study_benefits_image.getAttribute("fileEntryId")}" src="${case_study_benefits.case_study_benefits_image.getData()}" onerror='this.src="${defaultImage}"' /> 
229 <#else> 
230 <picture> 
231 <img src="${defaultImage}"> 
232 </picture> 
233 </#if> 
234 </div> 
235 </div> 
236 </div> 
237 </div> 
238 <div class="col-md-6 margin-bottom-30 margin-bottom-md-60 order-first order-md-last"> 
239 <h4><@liferay.language key="CaseStudy.benefitsHeader" /></h4> 
240 <ul class="margin-bottom-0"> 
241 <#if case_study_benefits.case_study_benefits_entry.getSiblings()?has_content> 
242 <#list case_study_benefits.case_study_benefits_entry.getSiblings() as case_study_benefits_entry> 
243 <li class="margin-bottom-30">${case_study_benefits_entry.getData()}</li> 
244 </#list> 
245 </#if> 
246 </ul> 
247 </div> 
248 </div> 
249 <div class="row"> 
250 <div class="col-md-6 margin-bottom-30 margin-bottom-md-70 map-container d-md-flex flex-md-column"> 
251 <h4><@liferay.language key="CaseStudy.caseStudyDetailsHeader" /></h4> 
252 <div class="layout-grid mt-md-auto margin-bottom-30"> 
253 <div class="layout-grid__row"> 
254 <div class="layout-grid__column"> 
255 <div class="layout-grid__cell font-light"><@liferay.language key="CaseStudy.clientName" /></div> 
256 </div> 
257 <div class="layout-grid__column"> 
258 <div class="layout-grid__cell font-bold">${case_study_client?has_content?then(case_study_client.case_study_client_name.getData(), '&mdash;')}</div> 
259 </div> 
260 </div> 
261 <div class="layout-grid__row"> 
262 <div class="layout-grid__column"> 
263 <div class="layout-grid__cell font-light"><@liferay.language key="CaseStudy.receiverOrganizationType" /></div> 
264 </div> 
265 <div class="layout-grid__column"> 
266 <div class="layout-grid__cell font-bold">${organizationType?has_content?then(organizationType, '&mdash;')}</div> 
267 </div> 
268 </div> 
269 <div class="layout-grid__row"> 
270 <div class="layout-grid__column"> 
271 <div class="layout-grid__cell font-light"><@liferay.language key="CaseStudy.clientWWW" /></div> 
272 </div> 
273 <div class="layout-grid__column"> 
274 <div class="layout-grid__cell font-bold"> 
275 <#if case_study_client?? && case_study_client.case_study_client_link.case_study_client_link_url.getData()?has_content> 
276 <a class="font-bold" href="${case_study_client.case_study_client_link.case_study_client_link_url.getData()}"> 
277 ${case_study_client.case_study_client_link.case_study_client_link_text.getData()} 
278 </a> 
279 <#else> 
280 &mdash; 
281 </#if> 
282 </div> 
283 </div> 
284 </div> 
285 <div class="layout-grid__row"> 
286 <div class="layout-grid__column"> 
287 <div class="layout-grid__cell font-light"><@liferay.language key="CaseStudy.activityType" /></div> 
288 </div> 
289 <div class="layout-grid__column"> 
290 <div class="layout-grid__cell font-bold"><#if (case_study_service_category.getData()?has_content)>${case_study_service_category.getData()}<#else>&mdash;</#if></div> 
291 </div> 
292 </div> 
293 <div class="layout-grid__row"> 
294 <div class="layout-grid__column"> 
295 <div class="layout-grid__cell font-light"><@liferay.language key="CaseStudy.activity" /></div> 
296 </div> 
297 <div class="layout-grid__column"> 
298 <#assign subcategories = [] /> 
299 <#list case_study_service_subcategory.getOptions() as subcategory> 
300 <#if (subcategory?has_content)> 
301 <#assign subcategories = subcategories + [subcategory] /> 
302 </#if> 
303 </#list> 
304 <div class="layout-grid__cell font-bold">${(subcategories?size > 0)?then(subcategories?join(', '), '&mdash;')}</div> 
305 </div> 
306 </div> 
307 <div class="layout-grid__row"> 
308 <div class="layout-grid__column"> 
309 <div class="layout-grid__cell font-light"><@liferay.language key="CaseStudy.keywords" /></div> 
310 </div> 
311 <div class="layout-grid__column"> 
312 <div class="layout-grid__cell font-bold">${(reasearchFields?size > 0)?then(reasearchFields?join(', '), '&mdash;')}</div> 
313 </div> 
314 </div> 
315 </div> 
316 <div class="text-right"> 
317 <#assign inactiveButtonClass = organizationURL?has_content?then('', 'button--disabled') /> 
318 <a href="${case_study_service_on_eomall.case_study_service_on_eomall_link_url.getData()}" class="button margin-bottom-5"> 
319 <#if case_study_service_on_eomall.case_study_service_on_eomall_link_text.getData()?has_content> 
320 ${case_study_service_on_eomall.case_study_service_on_eomall_link_text.getData()} 
321 <#else> 
322 <@liferay.language key="CaseStudy.serviceOnEomallButton" /> 
323 </#if> 
324 </a> 
325 <#if themeDisplay.isSignedIn() > 
326 <a href="${case_study_external_service_link.case_study_external_service_link_url.getData()}" class="button margin-bottom-5"> 
327 <#if case_study_external_service_link.case_study_external_service_link_text.getData()?has_content> 
328 ${case_study_external_service_link.case_study_external_service_link_text.getData()} 
329 <#else> 
330 <@liferay.language key="CaseStudy.externalServiceLinkButton" /> 
331 </#if> 
332 </a> 
333 </#if> 
334 <a href="${organizationURL}" data-company-name="${companyName}" data-company-id="${organizationId}" class="button--contact-us button margin-bottom-5 mt-md-auto align-self-md-end ${inactiveButtonClass}"> 
335 <@liferay.language key="CaseStudy.contactCompanyButton" /> 
336 </a> 
337 </div> 
338  
339 </div> 
340 <div class="col-md-6 margin-bottom-30 margin-bottom-md-70 justify-content-center d-flex align-items-center"> 
341 <div class="d-flex align-items-center justify-content-center height-100 w-100"> 
342 <div class="border w-100"> 
343 <div class="ratio-box ratio-box--16-9 logotype"> 
344 <#if organizationLogo?? && organizationLogo != ""> 
345 <picture> 
346 <img alt="${organizationName}" title="${organizationName}" src="${organizationLogo}" onerror='this.src="${defaultImage}"' /> 
347 </picture> 
348 <#else> 
349 <picture> 
350 <img src="${defaultImage}"> 
351 </picture> 
352 </#if> 
353 </div> 
354 </div> 
355 </div> 
356 </div> 
357 </div> 
358 </div> 
359</div> 
360</#compress>