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