Fehler bei der Verarbeitung der Vorlage.
Java method "jdk.proxy154.$Proxy919.getLatestArticle(long)" threw an exception when invoked on jdk.proxy154.$Proxy919 object "com.liferay.journal.service.impl.JournalArticleLocalServiceImpl@60fd04c2"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign jArt = JournalArticleLocalSer...  [in template "20116#20152#510999" at line 105, column 13]
----
1<#-- 
2Application display templates can be used to modify the look of a 
3specific application. 
4 
5Please use the left panel to quickly add commonly used variables. 
6Autocomplete is also available and can be invoked by typing "${". 
7--> 
8 
9<#assign DLFileEntryLocalService = serviceLocator.findService( 
10"com.liferay.document.library.kernel.service.DLFileEntryLocalService")> 
11<#assign DLFolderLocalService = serviceLocator.findService( 
12"com.liferay.document.library.kernel.service.DLFolderLocalService")> 
13<#assign JournalArticleLocalService = serviceLocator.findService( 
14"com.liferay.journal.service.JournalArticleLocalService")> 
15<#assign GroupLocalService = serviceLocator.findService( 
16"com.liferay.portal.kernel.service.GroupLocalService")> 
17<#assign LayoutSetService = serviceLocator.findService( 
18"com.liferay.portal.kernel.service.LayoutSetLocalService")> 
19<#assign AssetCategoryLocalService = serviceLocator.findService( 
20"com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
21<#assign AssetVocabularyLocalService = serviceLocator.findService( 
22"com.liferay.asset.kernel.service.AssetVocabularyLocalService")> 
23<#assign AssetCategoryPropertyLocalService = serviceLocator.findService( 
24"com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")/> 
25<#assign PropertyFactoryUtil = serviceLocator.findService( 
26"com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil") /> 
27 
28<#assign portletId = themeDisplay.getPortletDisplay().getId()> 
29<#assign locale = themeDisplay.getLocale()> 
30<#assign PortletPreferencesLocalService = serviceLocator.findService( 
31"com.liferay.portal.kernel.service.PortletPreferencesLocalService")/> 
32 
33<#-- 
347.4 Upgrade start - portlet perferences would not be stored as xml, see https://github.com/liferay/liferay-portal/blob/master/readme/BREAKING_CHANGES.markdown#what-changed-11 
35 
36assign portletPreferencesXML = saxReaderUtil.read((PortletPreferencesLocalService.getPortletPreferences(themeDisplay.getPlid(), portletId)?first).getPreferences()) 
37--> 
38 
39<#assign plid = themeDisplay.getPlid()> 
40 
41<#assign portletPreferences = PortletPreferencesLocalService.getPortletPreferences(plid, portletId)?first /> 
42 
43<#assign preferences = PortletPreferencesLocalService.fetchPreferences(portletPreferences.getCompanyId(), portletPreferences.getOwnerId(), portletPreferences.getOwnerType(), plid, portletId) /> 
44<#assign imageSaturationFilter = themeDisplay.getLayout().getExpandoBridge().getAttribute("Add-Image-Saturation-Filter")!false /> 
45<#-- 
467.4 Upgrade end 
47--> 
48 
49<#assign TemplateCustomService = serviceLocator.findService("template.custom.services.TemplateCustomService") /> 
50 
51<#-- Macro used to get specific field text from an Asset Entry --> 
52<#macro entryNode document field> 
53    <#if document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content")??> 
54    "${document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content").getText()?js_string}" 
55    <#else> 
56    "" 
57    </#if> 
58</#macro> 
59 
60<#-- Macro used to get specific portlet preference --> 
61 
62<#-- 7.4 Upgrade question: where do we need this macro? --> 
63 
64<#macro preference prefKey prefIndex defaultValue> 
65    <#if portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value")??> 
66    "${portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value").getText()?js_string}"<#return> 
67    <#else> 
68    "${defaultValue?js_string}"<#return> 
69    </#if> 
70</#macro> 
71 
72<div id="articleAdtDiv_${portletId}"></div> 
73<script> 
74    <#if preferences.getValue("useSmallerHeadings", "false")?js_string == "true"> 
75        <#assign overrideHeadingSize = "heading3 mobile-heading2"> 
76    </#if> 
77 
78    <#assign multiArtBehavior = preferences.getValue("multiArticleBehavior", "Vertical Stack")?js_string> 
79 
80    <#assign fullWidthDisplay = preferences.getValue("fullWidthDisplay", "false")?js_string> 
81 
82    <#assign featureDisplayType = preferences.getValue("featureDisplayType", "Image Left")?js_string> 
83 
84    <#assign greyBackground = preferences.getValue("greyBackground", "false")?js_string> 
85 
86    <#assign extraSpacer = preferences.getValue("extraSpacer", "None")?js_string> 
87 
88    <#assign autoplay = preferences.getValue("autoPlay", "false")?js_string> 
89 
90    <#assign seeAllLink = preferences.getValue("seeAllLink", "")?js_string> 
91 
92    <#assign seeAllLinkText = preferences.getValue("seeAllLinkText", "")?js_string> 
93 
94    <#assign featureDisplayButtonType = preferences.getValue("featureDisplayButtonType", "Visible")?js_string> 
95 
96    <#assign featureDisplayButtonText = preferences.getValue("featureDisplayButtonText", "")?js_string> 
97 
98    <#assign gridTitle = preferences.getValue("gridTitle", "")?js_string> 
99 
100	var entries = []; 
101 
102	<#if entries?has_content> 
103        <#list entries as curEntry> 
104 
105            <#assign jArt = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK())> 
106            <#assign document = saxReaderUtil.read(jArt.getContentByLocale(themeDisplay.getLocale()))> 
107 
108            <#assign structureName = jArt.getDDMStructure().getName("en_US")> 
109 
110 
111            var componentType = "FEATURED_ARTICLE"; 
112            var voiceSearch = "featured-article"; 
113 
114            var title = <@entryNode document=document field="ArticleTitle"/>; 
115 
116            var subtitle = <@entryNode document=document field="Subtitle"/>; 
117 
118            var description = <@entryNode document=document field="Description"/>; 
119            if (description == ""){ 
120				description = <@entryNode document=document field="Intro"/>; 
121
122 
123            var slug = <@entryNode document=document field="Slug"/>; 
124 
125            <#assign articleGroup = GroupLocalService.getGroup(jArt.getGroupId())> 
126 
127            <#if LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false)?? 
128            && LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular")?? > 
129                <#assign isMicroSite = (LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular") == "true")> 
130            <#else> 
131                <#assign isMicroSite = false> 
132            </#if> 
133 
134            var imageFileEntryId = 0; 
135            var imageFileName = ""; 
136            var image = '${TemplateCustomService.getDocumentFileDetails(document,"ThumbnailSquare",themeDisplay)}'; 
137            <#-- ATK-1338 Start --> 
138            if((${(fullWidthDisplay == "true")?c}) && (!(${multiArtBehavior?matches("Carousel")?c}))) { 
139				image = '${TemplateCustomService.getDocumentFileDetails(document,"Thumbnail",themeDisplay)}';             
140
141            <#-- ATK-1338 Over --> 
142            if (null == image || "" == image) { 
143				image = '${TemplateCustomService.getDocumentFileDetails(document,"Thumbnail",themeDisplay)}'; 
144
145            if (null == image) { 
146				image = ""; 
147
148	     
149			if ((image) || image != "") {  
150				var [imageFileEntryId, restString] = image.split('+++++'); 
151				var [imageFileName, image] = restString.split('*****'); 
152			}	 
153 
154            var componentData = { 
155				locale: "${locale}", 
156				structureName: "${structureName}", 
157				displayType: "${featureDisplayType}", 
158				slug: slug, 
159				title: title, 
160				subtitle: subtitle, 
161				description: description, 
162				image: image.trim(), 
163				imageFileEntryId: imageFileEntryId, 
164				imageFileName: imageFileName, 
165				imageSaturationFilter: "${imageSaturationFilter?c}", 
166				groupFriendlyUrl: '${articleGroup.getFriendlyURL()}', 
167				isMicrosite: ${isMicroSite?c}, 
168				multiArtBehavior: '${multiArtBehavior}', 
169                featureDisplayButtonText: '${featureDisplayButtonText}', 
170                featureDisplayButtonType: '${featureDisplayButtonType}', 
171				componentType: componentType, 
172				voiceSearch: voiceSearch 
173			}; 
174 
175            <#if structureName == "Video"> 
176 
177                componentData.displayType = "Video"; 
178                componentData.link = <@entryNode document=document field="LinkURL"/>; 
179                componentData.videoUrl = <@entryNode document=document field="VideoURL"/>; 
180 
181            <#elseif structureName == "Article"> 
182 
183                var linkTargetOverride = <@entryNode document=document field="LinkTargetOverride"/>; 
184 
185                if (linkTargetOverride !== ""){ 
186					componentData.link = linkTargetOverride; 
187				} else { 
188                    <#assign assetCategories = AssetCategoryLocalService.getCategories(curEntry.getClassNameId(), curEntry.getClassPK())> 
189 
190					var articleCategories = []; 
191 
192                    <#list assetCategories as category> 
193                        <#assign categoryVocabulary = AssetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())> 
194                        <#assign categoryUrl = "#"> 
195 
196                        <#list AssetCategoryPropertyLocalService.getCategoryProperties(category.categoryId) as categoryProperty> 
197 
198                            <#if categoryProperty.key == "url"> 
199                                <#assign categoryUrl = categoryProperty.value> 
200                            </#if> 
201                        </#list> 
202	 
203                        articleCategories.push({ 
204							id: "${category.categoryId}", 
205							name: "${category.name}", 
206							url: "${categoryUrl}", 
207							vocabularyName: "${categoryVocabulary.getTitle(locale)}", 
208						}); 
209				    
210                    </#list> 
211 
212 
213					componentData.categories = articleCategories; 
214					componentData.urlTitle = "${jArt.getUrlTitle()?js_string}"; 
215
216 
217                var byline = <@entryNode document=document field="Byline"/>; 
218                if (byline != null && byline != ""){ 
219					componentData.byline = []; 
220				}; 
221 
222            <#elseif structureName == "External Article"> 
223 
224 
225 
226            <#-- All External Articles should display at /media-center/article, so populate categories accordingly --> 
227			<#-- var articleCategories = []; 
228                articleCategories.push({ 
229					id: "0", 
230					name: "Media Center", 
231					url: "media-center", 
232					vocabularyName: "Topics", 
233				}); 
234                articleCategories.push({ 
235					id: "1", 
236					name: "Article", 
237					url: "article", 
238					vocabularyName: "Article Type", 
239				}); 
240 
241                componentData.categories = articleCategories; 
242                componentData.urlTitle = "${jArt.getUrlTitle()?js_string}"; --> 
243 
244				componentData.link = <@entryNode document=document field="LinkURL"/>; 
245				componentData.isExternal = true; 
246 
247                var bylineSegments = []; 
248                var pubName = <@entryNode document=document field="PublicationName"/>; 
249 
250                if (pubName != null && pubName != ""){ 
251					bylineSegments.push(pubName); 
252					componentData.italicizeFirstByline = true; 
253				}; 
254 
255            <#--bylineSegments.push(<@entryNode document=document field="PublicationDate"/>); --> 
256                componentData.byline = bylineSegments; 
257 
258            <#elseif structureName == "Link"> 
259 
260                componentData.link = <@entryNode document=document field="LinkURL"/>; 
261                componentData.isExternal = true; 
262 
263                var bylineSegments = []; 
264 
265                <#assign linkja = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK()) > 
266                <#assign linkdocument = saxReaderUtil.read(linkja.getContent())> 
267                <#assign linknodes = document.selectNodes("/root/dynamic-element[@name='BylineSegment']/dynamic-content")> 
268 
269                <#list linknodes as curN> 
270                    bylineSegments.push("${curN.getText()?js_string}"); 
271                </#list> 
272 
273                componentData.byline = bylineSegments; 
274                componentData.italicizeFirstByline = true; 
275 
276            </#if> 
277 
278            entries.push(componentData); 
279        </#list> 
280    </#if> 
281 
282	<#if multiArtBehavior == "Carousel"> 
283        var carouselProps = { 
284			entries: entries, 
285			gridTitle: "${gridTitle}", 
286			fullWidthDisplay: ${(fullWidthDisplay == "true")?c}, 
287			greyBackground: "${greyBackground}", 
288			autoplay: ${(autoplay == "true")?c} 
289		}; 
290 
291        ATK.React.Component.Carousel("articleAdtDiv_${portletId?js_string}", carouselProps); 
292    <#else> 
293    	var componentVoiceSearch = "featured-article"; 
294        var extraProps = { 
295			multiArtBehavior: "${multiArtBehavior}", 
296			gridTitle: "${gridTitle}", 
297			fullWidthDisplay: "${fullWidthDisplay}", 
298			greyBackground: "${greyBackground}", 
299			extraSpacer: "${extraSpacer}", 
300			seeAllLink: "${seeAllLink}", 
301			seeAllLinkText: "${seeAllLinkText}", 
302			componentVoiceSearch: componentVoiceSearch 
303		}; 
304        ATK.React.Component.FeaturedMultiDisplay("articleAdtDiv_${portletId?js_string}", extraProps, entries); 
305    </#if> 
306 
307</script>