null EHBO op het werk

Er trad een fout op tijdens de verwerking van de sjabloon.
Java method "be.idewe.portal.website.training.service.TrainingServiceImpl.getRelatedTrainingForWebsiteThema(String, String, Locale)" threw an exception when invoked on be.idewe.portal.website.training.service.TrainingServiceImpl object "be.idewe.portal.website.training.service.TrainingServiceImpl@64a0d1f0"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign relatedTrainings = trainingSe...  [in template "20101#20127#IDEWE.TEMPLATE.WEB.PRO" at line 249, column 25]
----
1<#assign 
2compIds = ['a', 'b', 'c', 'd'] 
3 
4journalArticleDataService = serviceLocator.findService("be.idewe.portal.website.articles.api.JournalArticleDataService") 
5layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") 
6pagesService = serviceLocator.findService("be.idewe.portal.website.pages.api.PagesService") 
7proArticleService = serviceLocator.findService("be.idewe.portal.website.articles.api.ProArticleService") 
8trainingService = serviceLocator.findService("be.idewe.portal.website.training.api.TrainingService") 
9parsingService = serviceLocator.findService("be.idewe.portal.website.articles.api.ParsingService") 
10available = false 
11lang = themeDisplay.getLanguageId() 
12
13<#attempt> 
14    <#assign 
15    thisFolderUUID = journalArticleDataService.getJournalArticleData(groupId, .vars['reserved-article-id'].data, locale).getFolderUUID() 
16    relatedProArticles = proArticleService.getRelatedProThemesFromFolder(groupId, thisFolderUUID, .vars['reserved-article-id'].data, locale) 
17    proArticleNavigation = proArticleService.getProThemeNavigationFromFolder(groupId, thisFolderUUID, .vars['reserved-article-id'].data, locale) 
18    available = true 
19
20<#recover> 
21    <#assign available = false /> 
22</#attempt> 
23<#assign 
24componentsJournalArticleData = journalArticleDataService.getRelatedJournalArticleData(componentsContent.getData(), locale) 
25componentsXml = saxReaderUtil.read(componentsJournalArticleData.getSource().content) 
26compNodes = componentsXml.selectNodes("/root/dynamic-element[@name='component']") 
27 
28sourceUrl = themeDisplay.getURLCurrent()?keep_before("?") 
29 
30thisLayout = themeDisplay.getLayout() 
31ancestorLayouts = thisLayout.getAncestors() 
32siteUrl = themeDisplay.getPathFriendlyURLPublic() + thisLayout.getGroup().getFriendlyURL() 
33
34<#if !sourceUrl?starts_with(siteUrl)> 
35    <#assign siteUrl = ''> 
36</#if> 
37<#assign 
38fullSiteUrl = themeDisplay.getPortalURL() + siteUrl 
39 
40segmentList = proArticleService.getAllSegments(themeDisplay, groupId, locale) 
41 
42breadcrumbsSeparatorClass = 'fas fa-angle-right' 
43leftContentBlockHasContent = leftBlock.leftBlockImage.getData()?has_content || leftBlock.leftBlockText.getData()?has_content 
44rightContentBlockHasContent = rightBlock.rightBlockImage.getData()?has_content || rightBlock.rightBlockText.getData()?has_content 
45
46 
47<#if ogData?? && ogData.ogTitle?? && ogData.ogTitle?? && ogData.ogTitle.getData()?has_content> 
48    <#assign ogTitleOverride = request.setAttribute("OG_TITLE_OVERRIDE", ogData.ogTitle.getData())> 
49<#else> 
50    <#assign ogTitleOverride = request.setAttribute("OG_TITLE_OVERRIDE", .vars['reserved-article-title'].getData())> 
51</#if> 
52<#if ogData?? && ogData.ogDescription?? && ogData.ogDescription.getData()?has_content> 
53    <#assign ogDescriptionOverride = request.setAttribute("OG_DESCRIPTION_OVERRIDE", ogData.ogDescription.getData())> 
54<#else> 
55    <#if .vars['reserved-article-description'].getData()?has_content> 
56        <#assign ogDescriptionOverride = request.setAttribute("OG_DESCRIPTION_OVERRIDE", .vars['reserved-article-description'].getData())> 
57    </#if> 
58</#if> 
59<#if ogData?? && ogData.ogImage?? && ogData.ogImage.getData()?has_content> 
60    <#attempt> 
61        <#assign 
62        ogImageUrlOverride = request.setAttribute("OG_IMAGE_URL_OVERRIDE", ogData.ogImage.getData()) 
63        imageMetadata = parsingService.getImageMetadata(ogData.ogImage.getAttribute("fileEntryId")?number) 
64        ogImageHeightOverride = request.setAttribute("OG_IMAGE_HEIGHT_OVERRIDE", imageMetadata['height']) 
65        ogImageWidthOverride = request.setAttribute("OG_IMAGE_WIDTH_OVERRIDE", imageMetadata['width']) 
66
67    <#recover> 
68        <!-- ERROR: failed to parse image ${ogData.ogImage.getData()} --> 
69    </#attempt> 
70</#if> 
71 
72<#if available> 
73    <#list compNodes as compNode> 
74        <#assign prefNodes = compNode.selectNodes("dynamic-element[@name='pref']")> 
75        <#list prefNodes as prefNode> 
76            <#assign folderUUID = prefNode.valueOf("dynamic-element[@name='proFolderUUID']/dynamic-content[@language-id='" + themeDisplay.getSiteDefaultLocale() + "']/text()")> 
77            <#if folderUUID == thisFolderUUID> 
78                <#assign 
79                compId = compIds[compNode?index] 
80                compTitle = compNode.valueOf("dynamic-element[@name='componentTitle']/dynamic-content[@language-id='" + locale + "']/text()")?replace("<br/>", " ") 
81                compPage = compNode.valueOf("dynamic-element[@name='componentDetailPage']/dynamic-content[@language-id='" + locale + "']/text()")?replace("<br/>", " ") 
82
83            </#if> 
84        </#list> 
85    </#list> 
86    <div class="component-pro component-${compId}"> 
87        <#if banner.bannerImage.getData()?? && banner.bannerImage.getData()?has_content> 
88            <div class="segment-details-banner banner <#if banner.isParallax?has_content && banner.isParallax.getData()?? && banner.isParallax.getData() == "true">parallax-image</#if>" 
89                    <#if banner.bannerHeight?has_content && banner.bannerHeight.getData()?? && banner.bannerHeight.getData()?number &gt;= 250> style="height: ${banner.bannerHeight.getData()}px;"</#if>> 
90                <img data-fileentryid="${banner.bannerImage.getAttribute("fileEntryId")}" 
91                     alt="${banner.bannerImage.getAttribute("alt")}" src="${banner.bannerImage.getData()}" 
92                     class="${banner.bannerImageAlignment.getData()!}"/> 
93                <div class="banner-overlay ${banner.bannerTextPosition.getData()!}"> 
94                    <div class="banner-overlay-gradient ${banner.bannerOverlayColor.getData()!}"></div> 
95                    <#if banner.bannerTitle.getData()?has_content || banner.bannerText.getData()?has_content> 
96                        <div class="banner-overlay-content-wrapper"> 
97                            <div class="banner-overlay-content-inner"> 
98                                <div class="banner-overlay-content ${banner.bannerOverlayColor.getData()!}"> 
99                                    <#if banner.bannerTitle.getData()?has_content> 
100                                        <p class="banner-title">${banner.bannerTitle.getData()}</p> 
101                                    </#if> 
102                                    <#if banner.bannerText.getData()?has_content> 
103                                        <p class="banner-text">${banner.bannerText.getData()}</p> 
104                                    </#if> 
105                                </div> 
106                            </div> 
107                        </div> 
108                    </#if> 
109                </div> 
110            </div> 
111        </#if> 
112        <div class="component-pro-breadcrumbs centered-content"> 
113            <ul class="breadcrumbs"> 
114                <#list ancestorLayouts?reverse as ancestorLayout> 
115                    <#assign nodeUrl = siteUrl + ancestorLayout.getFriendlyURL(locale)> 
116                    <li> 
117                        <#if ancestorLayout?index != 0> 
118                            <i class="${breadcrumbsSeparatorClass}"></i> 
119                        </#if> 
120                        <a href="${nodeUrl}">${htmlUtil.escape(ancestorLayout.getName(locale))}</a> 
121                    </li> 
122                </#list> 
123                <#if compPage?has_content> 
124                    <li> 
125                        <i class="${breadcrumbsSeparatorClass}"></i> 
126                        <#assign 
127                        compPageSplit = compPage?split("@") 
128                        compPageLayout = layoutLocalService.fetchLayout(compPageSplit[2]?number, false, compPageSplit[0]?number) 
129
130                        <a href="${compPageLayout.getFriendlyURL(locale)}">${compTitle}</a> 
131                    </li> 
132                </#if> 
133                <li> 
134                    <i class="${breadcrumbsSeparatorClass}"></i> 
135                    ${.vars['reserved-article-title'].getData()} 
136                </li> 
137            </ul> 
138        </div> 
139        <div class="component-pro-top centered-content"> 
140            <div class="component-pro-title"> 
141                <h1 id="${companyId}_Top"> 
142                    <img src="/o/liferay-idewe-website-theme/images/fourcomponents/component-${compId}-circle.svg" 
143                         alt="${compId?upper_case}"/> 
144                    <span>${.vars['reserved-article-title'].getData()}</span> 
145                </h1> 
146                <#if proArticleNavigation??> 
147                    <div class="component-pro-navigation"> 
148                        <div class="component-pro-navigation-previous"> 
149                            <a href="${fullSiteUrl}/-/${proArticleNavigation.previousArticle.getUrlTitle()}" 
150                               title="${proArticleNavigation.previousArticle.getTitle()}"><i 
151                                        class="fas fa-chevron-circle-left"></i></a> 
152                        </div> 
153                        <div class="component-pro-navigation-next"> 
154                            <a href="${fullSiteUrl}/-/${proArticleNavigation.nextArticle.getUrlTitle()}" 
155                               title="${proArticleNavigation.nextArticle.getTitle()}"><i 
156                                        class="fas fa-chevron-circle-right"></i></a> 
157                        </div> 
158                    </div> 
159                </#if> 
160            </div> 
161            <div class="web-content-paragraph">${intro.getData()}</div> 
162            <#if leftContentBlockHasContent || rightContentBlockHasContent> 
163                <div class="content-blocks"> 
164                    <#if leftContentBlockHasContent> 
165                        <div class="content-block content-block-<#if rightContentBlockHasContent>left<#else>center</#if> image-align-${leftBlock.leftBlockImageAlignment.getData()} wow fadeIn"> 
166                            <#if leftBlock.leftBlockImage.getData()?has_content> 
167                                <img alt="${leftBlock.leftBlockImage.getAttribute("alt")}" 
168                                     src="${leftBlock.leftBlockImage.getData()}"/> 
169                            </#if> 
170                            <#if leftBlock.leftBlockText.getData()?has_content> 
171                                <div>${leftBlock.leftBlockText.getData()}</div> 
172                            </#if> 
173                        </div> 
174                    </#if> 
175                    <#if rightContentBlockHasContent> 
176                        <div class="content-block content-block-<#if leftContentBlockHasContent>right<#else>center</#if> image-align-${rightBlock.rightBlockImageAlignment.getData()} wow fadeIn"> 
177                            <#if rightBlock.rightBlockImage.getData()?has_content> 
178                                <img alt="${rightBlock.rightBlockImage.getAttribute("alt")}" 
179                                     src="${rightBlock.rightBlockImage.getData()}"/> 
180                            </#if> 
181                            <#if rightBlock.rightBlockText.getData()?has_content> 
182                                <div>${rightBlock.rightBlockText.getData()}</div> 
183                            </#if> 
184                        </div> 
185                    </#if> 
186                </div> 
187            </#if> 
188            <#if topParagraph?has_content> 
189                <#list topParagraph.getSiblings() as topParagraphItem> 
190                    <div class="web-content-paragraph clearfix"> 
191                        <#if topParagraphItem.topParagraphTitle.getData()?has_content> 
192                            <h2 class="web-content-paragraph-title">${topParagraphItem.topParagraphTitle.getData()}</h2> 
193                        </#if> 
194                        <#if topParagraphItem.topParagraphImage?? && topParagraphItem.topParagraphImage.topParagraphImageAlignment?? && topParagraphItem.topParagraphImage.topParagraphImageAlignment.getData() != ""> 
195                            <#assign imageAlignment = topParagraphItem.topParagraphImage.topParagraphImageAlignment.getData()> 
196                        <#else> 
197                            <#assign imageAlignment = "left"> 
198                        </#if> 
199                        <#if topParagraphItem.topParagraphImage.topParagraphImageFile?? && topParagraphItem.topParagraphImage.topParagraphImageFile.getData()?has_content> 
200                            <#if topParagraphItem.topParagraphImage.topParagraphImageWidth?? && topParagraphItem.topParagraphImage.topParagraphImageWidth.getData() != ""> 
201                                <#assign imageWidth = topParagraphItem.topParagraphImage.topParagraphImageWidth.getData()> 
202                            <#else> 
203                                <#assign imageWidth = "full"> 
204                            </#if> 
205                            <div class="web-content-paragraph-image alignment-${imageAlignment} width-${imageWidth} wow fadeIn"> 
206                                <img alt="${topParagraphItem.topParagraphImage.topParagraphImageFile.getAttribute("alt")}" 
207                                     src="${topParagraphItem.topParagraphImage.topParagraphImageFile.getData()}"/> 
208                            </div> 
209                        </#if> 
210                        <div class="web-content-paragraph-content alignment-${topParagraphItem.topParagraphImage.topParagraphImageAlignment.getData()}">${topParagraphItem.topParagraphContent.getData()}</div> 
211                    </div> 
212                </#list> 
213            </#if> 
214        </div> 
215        <div class="component-pro-bottom centered-content"> 
216            <#if bottomParagraph?has_content> 
217                <#list bottomParagraph.getSiblings() as bottomParagraphItem> 
218                    <div class="web-content-paragraph color-${bottomParagraphItem.bottomParagraphColor.getData()} clearfix"> 
219                        <#if bottomParagraphItem.bottomParagraphTitle.getData()?has_content> 
220                            <h2 class="web-content-paragraph-title">${bottomParagraphItem.bottomParagraphTitle.getData()}</h2> 
221                        </#if> 
222                        <#if bottomParagraphItem.bottomParagraphImage?? && bottomParagraphItem.bottomParagraphImage.bottomParagraphImageAlignment?? && bottomParagraphItem.bottomParagraphImage.bottomParagraphImageAlignment.getData() != ""> 
223                            <#assign imageAlignment = bottomParagraphItem.bottomParagraphImage.bottomParagraphImageAlignment.getData()> 
224                        <#else> 
225                            <#assign imageAlignment = "left"> 
226                        </#if> 
227                        <#if bottomParagraphItem.bottomParagraphImage.bottomParagraphImageFile?? && bottomParagraphItem.bottomParagraphImage.bottomParagraphImageFile.getData()?has_content> 
228                            <#if bottomParagraphItem.bottomParagraphImage.bottomParagraphImageWidth?? && bottomParagraphItem.bottomParagraphImage.bottomParagraphImageWidth.getData() != ""> 
229                                <#assign imageWidth = bottomParagraphItem.bottomParagraphImage.bottomParagraphImageWidth.getData()> 
230                            <#else> 
231                                <#assign imageWidth = "full"> 
232                            </#if> 
233                            <div class="web-content-paragraph-image alignment-${imageAlignment} width-${imageWidth} wow fadeIn"> 
234                                <img alt="${bottomParagraphItem.bottomParagraphImage.bottomParagraphImageFile.getAttribute("alt")}" 
235                                     src="${bottomParagraphItem.bottomParagraphImage.bottomParagraphImageFile.getData()}"/> 
236                            </div> 
237                        </#if> 
238                        <div class="web-content-paragraph-content alignment-${bottomParagraphItem.bottomParagraphImage.bottomParagraphImageAlignment.getData()}">${bottomParagraphItem.bottomParagraphContent.getData()}</div> 
239                    </div> 
240                </#list> 
241            </#if> 
242        </div> 
243        <div class="component-pro-trainings centered-content"> 
244            <div class="web-content-paragraph"> 
245                <h2 class="web-content-paragraph-title">${trainingParagraph.trainingParagraphTitle.getData()}</h2> 
246                <div class="web-content-paragraph-content">${trainingParagraph.trainingParagraphContent.getData()}</div> 
247                <#if trainingParagraph.websiteThema?has_content> 
248                    <div class="component-pro-trainings-list"> 
249                        <#assign relatedTrainings = trainingService.getRelatedTrainingForWebsiteThema(trainingParagraph.websiteThema.getData(), pagesService.getOpleidingsDetailUrl(themeDisplay), locale)> 
250                        <ul> 
251                            <#list relatedTrainings as training> 
252                                <li> 
253                                    <a href="${training.url}">${training.title}</a> 
254                                </li> 
255                            </#list> 
256                        </ul> 
257                    </div> 
258                </#if> 
259            </div> 
260        </div> 
261        <div class="component-pro-contact centered-content"> 
262            <#if contactParagraph?has_content> 
263                <#if contactParagraph.contactParagraphTitle.getData()?has_content> 
264                    <h2 class="web-content-paragraph-title">${contactParagraph.contactParagraphTitle.getData()}</h2> 
265                </#if> 
266                <div class="web-content-paragraph-content">${contactParagraph.contactParagraphContent.getData()}</div> 
267                <a class="button contact-button larger-button button-blue" 
268                   href="${contactPage.getFriendlyUrl()}?source=${sourceUrl}"> 
269                    <#if contactParagraph.contactButtonText?? && contactParagraph.contactButtonText.getData()?has_content> 
270                        ${contactParagraph.contactButtonText.getData()} 
271                    <#else> 
272                        <@liferay.language key="idewe.contact" /> 
273                    </#if> 
274                </a> 
275            </#if> 
276        </div> 
277        <div class="component-pro-relations"> 
278            <div class="centered-content"> 
279                <h2><@liferay.language key="idewe.components.pro.relations" /></h2> 
280                <div class="component-pro-relations-wrapper"> 
281                    <#list relatedProArticles as proArticle> 
282                        <div class="component-pro-relations-item"> 
283                            <img src="/o/liferay-idewe-website-theme/images/fourcomponents/component-${compId}-circle.svg" 
284                                 alt="${compId?upper_case}"/> 
285                            <a href="${fullSiteUrl}/-/${proArticle.getUrlTitle()}">${proArticle.getTitle()}</a> 
286                        </div> 
287                    </#list> 
288                </div> 
289            </div> 
290        </div> 
291        <div class="component-pro-segment"> 
292            <div class="centered-content"> 
293                <div class="web-content-paragraph"> 
294                    <h3 class="web-content-paragraph-title">${segmentParagraph.segmentParagraphTitle.getData()}</h3> 
295                    <div class="web-content-paragraph-content">${segmentParagraph.segmentParagraphContent.getData()}</div> 
296                </div> 
297                <div class="segment-links"> 
298                    <#list segmentList as segmentItem> 
299                        <a class="button button-blue-inverted inverted-border segment-button" 
300                           href="${segmentItem.getPageHref()}?comp=${compId}"> 
301                            ${segmentItem.getCategoryLabel()} 
302                        </a> 
303                    </#list> 
304                </div> 
305            </div> 
306        </div> 
307    </div> 
308    <script type="text/javascript"> 
309        jQuery(document).ready(function () { 
310            document.cookie = "idewe-component=${compId?upper_case}; path=/"; 
311 
312			function fadeBox() { 
313				jQuery('.fadeIn').each(function (i) { 
314					var top_of_object = jQuery(this).position().top; 
315					var bottom_of_window = jQuery(window).scrollTop() + jQuery(window).height(); 
316					if (top_of_object < bottom_of_window) { 
317						jQuery(this).animate({'opacity': '1'}, 1500); 
318
319				}); 
320
321 
322			function scrollToTop() { 
323				jQuery('html,body').scrollTop(0); 
324
325 
326			scrollToTop(); 
327			setTimeout(function () { 
328				scrollToTop(); 
329				window.addEventListener("scroll", fadeBox); 
330				fadeBox(); 
331			}, 200); 
332        }); 
333    </script> 
334<#else> 
335    <div class="component-pro-top component-unavailable centered-content text-center"> 
336        <#if lang='nl_NL'> 
337            Het artikel is helaas niet beschikbaar in het Nederlands. 
338        <#elseif lang='fr_FR'> 
339            L'article n'est malheureusement pas disponible en fran├žais. 
340        <#else> 
341            This content is unfortunately not available in English. 
342        </#if> 
343    </div> 
344</#if>