Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> assetRenderer.getArticle  [in template "20102#20128#301694608" at line 40, column 43]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
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 journalArticle = assetRendere...  [in template "20102#20128#301694608" at line 40, column 17]
----
1<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")>  
2<#assign JournalArticleLocalServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
3<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")> 
4<#assign vocabularyService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")> 
5 
6<#assign layout = themeDisplay.getLayout()> 
7<#assign group = layout.getGroup()> 
8<#assign siteFriendlyURL = group.getFriendlyURL()> 
9<#assign pageFriendlyURL = layout.getFriendlyURL(themeDisplay.getLocale())> 
10<#if layout.isPublicLayout()> 
11    <#assign publicityContext = "/web" /> 
12<#else> 
13    <#assign publicityContext = "/group" /> 
14</#if> 
15<#assign targetPortletIdString = renderResponse.getNamespace() /> 
16<#assign startIndex = (targetPortletIdString?length - 13) /> 
17<#assign targetPortletIdCrop = targetPortletIdString[startIndex ..] /> 
18<#assign targetPortletID = targetPortletIdCrop?substring(0, targetPortletIdCrop?length -1) /> 
19 
20<#assign currentPageUrl = themeDisplay.getPortalURL() + publicityContext + siteFriendlyURL + pageFriendlyURL> 
21<#assign targetViewUrl = currentPageUrl> 
22 
23 
24 
25 
26 
27<#if entries?has_content> 
28    <!-- INICIO MODELO WIDGET --> 
29<section id="produtos"> 
30    <div class="container py-lg-5 py-3 d-flex flex-wrap justify-content-center align-items-center" style="gap: 15px;"> 
31        <#list entries as entry> 
32            <#assign assetRenderer = entry.getAssetRenderer() /> 
33            <#assign categories = entry.getCategories()> 
34            <#assign categoryId = -1> 
35            <#list categories as category> 
36                <#assign categoryId = category.getCategoryId() /> 
37            </#list> 
38            <#assign viewURL = "${targetViewUrl}/-/asset_publisher/${targetPortletID}/content/id/${entry.getEntryId()}${(categoryId != -1)?then('?p_r_p_categoryId=' + categoryId, '')}" /> 
39            <#if assetRenderer??> 
40                <#assign journalArticle = assetRenderer.getArticle() /> 
41                <#if journalArticle??> 
42                    <#assign articleContent = journalArticle.getContent() /> 
43                    <#assign docXml = saxReaderUtil.read(journalArticle.getContent()) /> 
44                    <#assign xmlValue = docXml.valueOf("//dynamic-element[@name='card_image']/dynamic-content[@language-id='pt_BR']/text()") /> 
45                    <#assign pictureURL = getArticleDLEntryUrl(xmlValue) /> 
46                    <#assign summaryContent = (entry.getSummary(locale)?length &lt; 220)?then(entry.getSummary(locale), entry.getSummary(locale)?substring(0, 220) + '...' ) /> 
47                    <div class="item"> 
48                        <div class="card cartao-produto d-flex flex-column align-items-center justify-content-between overflow-hidden box-shadow-1" > 
49                        <#if pictureURL?has_content> 
50                            <div class="card-image w-100" style="cursor: pointer; background-image: url('${pictureURL}')" onclick="window.open('${viewURL}', '_self')">&nbsp;</div> 
51                        </#if> 
52                            <div class="card-body w-100" onclick="window.open('${viewURL}', '_self')" style="cursor: pointer;"> 
53                                <h5 class="card-title c-turq fw-700 fs-6 lh-1 mb-2">${entry.getTitle(locale)}</h5> 
54                                <div class="card-text c-verdee lh-1 m-0">${summaryContent}</div> 
55                            </div> 
56                            <div class="card-footer w-100 bg-branco"> 
57                                <a style="cursor: pointer;" class="btn btn-proposta btn-secondary w-100 text-center mb-2">Enviar uma proposta</a> 
58                                <a onclick="window.open('${viewURL}', '_self')" style="cursor: pointer;" class="btn btn-secondary w-100 text-center">Saiba mais</a> 
59                            </div> 
60                        </div> 
61                    </div>   
62                </#if> 
63            </#if> 
64        </#list> 
65    </div> 
66</section> 
67<style> 
68    #produtos .container:hover .cartao-produto { 
69        transform: scale(.97); 
70        filter: saturate(.2); 
71
72    #produtos .container:hover .cartao-produto:hover { 
73        filter: saturate(1); 
74        transform: scale(1); 
75
76    #produtos .cartao-produto { 
77        width: 360px; 
78        min-width: 360px; 
79        border-radius: 16px; 
80        border: solid 1px var(--turq); 
81        overflow: hidden; 
82        transition: all .5s; 
83
84    #produtos .cartao-produto .card-image { 
85        height: 220px; 
86        background-size: cover; 
87        background-position: center; 
88        background-repeat: no-repeat; 
89
90    #produtos .cartao-produto .card-body { 
91        height: 150px 
92
93    #produtos .cartao-produto .card-footer { 
94        height: 115px; 
95
96    #produtos .cartao-produto .card-text p { 
97        margin-bottom: 0px; 
98
99    @media (max-width: 590px) { 
100        #produtos .cartao-produto .card-image { 
101            background-position: 50% 5%; 
102
103        #produtos .cartao-produto { 
104            width: 100%; 
105            height: unset; 
106            min-height: unset; 
107        }    
108
109</style> 
110<#else> 
111    <div class="alert alert-info"> 
112        Não existe produto cadastrado. 
113    </div> 
114</#if> 
115 
116<#function getArticleDLEntryUrl xmlValue> 
117    <#local docUrl = "" /> 
118 
119    <#if xmlValue?has_content> 
120        <#local jsonObject = xmlValue?eval /> 
121        <#local entryUuid = jsonObject.uuid /> 
122        <#local entryGroupId = getterUtil.getLong(jsonObject.groupId) /> 
123        <#local dlFileEntry = dlFileEntryLocalService.getDLFileEntryByUuidAndGroupId(entryUuid, entryGroupId) /> 
124        <#local assetEntry = assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry", dlFileEntry.fileEntryId) /> 
125        <#local assetRenderer = assetEntry.assetRenderer /> 
126        <#local docUrl = assetRenderer.getURLDownload(themeDisplay) /> 
127    </#if> 
128 
129    <#return docUrl /> 
130 
131</#function>