Une erreur s'est produite lors du traitement du modèle.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") [in template "10155#10193#TRIBUNAL-CUSTOM" at line 3, column 29]
----
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 AssetLinkService = serviceLoc... [in template "10155#10193#TRIBUNAL-CUSTOM" at line 3, column 1]
---- 1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 2<#assign AssetLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/> 3<#assign AssetLinkService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")/> 4<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") /> 5 6 7<#assign yourChoosenLocal = locale?split("_")[0] /> 8<#assign pathFileicon = "/html/themes/classic/images/file_system/small/" /> 9<#setting url_escaping_charset='ISO-8859-1'> 10<#assign gArticleId = .vars['reserved-article-id'].data /> 11<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> 12 13<style> 14 .aui .valais-structure .span4 .structure-area h3 { 15 /*margin-top: 1em;*/ 16 line-height: 1; 17 font-size: 14px; 18 } 19 20 .aui .valais-structure .img-aside { 21 width: 300px; 22 max-width: 100%; 23 height: auto; 24 } 25 26 .aui .span4 .structure-area { 27 margin-bottom: 3em; 28 } 29 .aui .valais-structure .span4 { 30 padding-right: 0.5em; 31 padding-left: 1.5em; 32 font-size: 12px; 33 border-left: 1px solid rgb(240, 240, 240); 34 } 35 36 .vs-documents .vs-documents-internal, 37 .vs-documents .vs-documents-external, 38 .vs-documents .vs-documents-folder { 39 list-style-type: none; 40 } 41 42 43 .vs-documents .vs-icon:before { 44 display: inline-block; 45 font: normal normal normal 14px/1 FontAwesome; 46 font-size: inherit; 47 text-rendering: auto; 48 -webkit-font-smoothing: antialiased; 49 -moz-osx-font-smoothing: grayscale; 50 transform: translate(0, 0); 51 text-indent: -1.5em; 52 } 53 54 .vs-documents .ext:before { 55 content: "\f08e"; 56 } 57 .vs-documents .pdf:before { 58 content: "\f1c1"; 59 } 60 61 .vs-documents .xls:before, 62 .vs-documents .xlsx:before, 63 .vs-documents .csv:before { 64 content: "\f1c3"; 65 } 66 67 .vs-documents .doc:before, 68 .vs-documents .docx:before, 69 .vs-documents .dot:before { 70 content: "\f1c2"; 71 } 72 73 .vs-documents .bpm:before, 74 .vs-documents .jpeg:before, 75 .vs-documents .jpg:before, 76 .vs-documents .jpeg:before, 77 .vs-documents .gif:before, 78 .vs-documents .png:before, 79 .vs-documents .tiff:before, 80 .vs-documents .jpeg:before { 81 content: "\f1c5"; 82 } 83 84 .vs-documents .xml:before, 85 .vs-documents .xslt:before, 86 .vs-documents .css:before, 87 .vs-documents .js:before, 88 .vs-documents .htm:before, 89 .vs-documents .html:before, 90 .vs-documents .json:before { 91 content: "\f1c9"; 92 } 93 .vs-documents .pptx:before, 94 .vs-documents .ppt:before, 95 .vs-documents .potx:before, 96 .vs-documents .pot:before, 97 .vs-documents .ppsx:before, 98 .vs-documents .pps:before { 99 content: "\f1c4"; 100 } 101 102.img-responsive { 103 display: block; 104 max-width: 100%; // Set a maximum relative to the parent 105 height: auto; // Scale the height according to the width, otherwise you get stretching 106} 107 108 109</style> 110 111<div class="valais-structure container"> 112 113 <@getBackLink /> 114 <div class="row"> 115 <div class="col-8" style=""> 116 117 ${description.getData()} 118 119 <#if isDocEmpty() == "false" > 120 121 <div class="structure-area"> 122 <h3><@liferay.language key="${docBlockTitle.data}" /></h3> 123 124 <@downloads /> 125 </div> 126 </#if> 127 128 </div> 129 130 <div class="col-4" style="border-left: 1px solid rgb(240, 240, 240);padding-left:1.5em;"> 131 132 <#-- <@relatedAssets /> --> 133 134 <#if isImageEmpty() == "false"> 135 <div class="structure-area" style="margin-top: 20px;"> 136 <img class="img-responsive" src="${smallImage.getData()}" alt=""> 137 </div> 138 </#if> 139 140 <#if isContactEmpty() == "false"> 141 <div class="structure-area"> 142 <h3><@liferay.language key="vs-contact"/></h3> 143 <@contactInfo/> 144 </div> 145 </#if> 146 147 <#if isLinkEmpty() == "false"> 148 <div class="structure-area"> 149 <h3><@liferay.language key="vs-link"/></h3> 150 <@links/> 151 </div> 152 </#if> 153 154 <#if isLexEmpty() == "false"> 155 <div class="structure-area"> 156 <h3><@liferay.language key="vs-legal-base"/></h3> 157 <@lex/> 158 </div> 159 </#if> 160 161 <#if isGenericHtmlEmpty() == "false"> 162 <div class="structure-area"> 163 ${htmlGeneric.getData()} 164 </div> 165 </#if> 166 <#-- 167 <div class="structure-area"> 168 <@sitemapInfo /> 169 </div> 170 --> 171 172 <#-- <span class="pull-right muted"><@liferay.language key="vs-last-modified" />: ${getArticleDate("modified")}</span> --> 173 174 </div> 175 </div> 176</div> 177 178<#macro sitemapInfo> 179 180 <#if serviceLocator??> 181 ${getArticleContent(groupId, "ACCESSDIRECT")} 182 </#if> 183</#macro> 184 185<#-- functions and macros --> 186 187<#macro getBackLink> 188 <#if request.attributes??> 189 <#assign url = request.attributes.CURRENT_URL /> 190 <#assign multipleValues = httpUtil.getQueryString(url) /> 191 <#assign paramMap = httpUtil.getParameterMap(httpUtil.getQueryString(url)) /> 192 <#list paramMap?keys as key> 193 <#if key?contains("_redirect")> 194 <#assign keyFound = key /> 195 </#if> 196 </#list> 197 <#if keyFound??> 198 <#assign encodedUrlString = httpUtil.getParameter(url, keyFound, false) /> 199 <#assign decodedUrlString = httpUtil.decodeURL(encodedUrlString) /> 200 <div class="clearfix"> 201 <#-- <span class="pull-left muted">${title.getData()} <@displayArticleDate dateType="published"/></span> --> 202 <#if decodedUrlString??> 203 <a class="pull-left" href="${decodedUrlString}"><i class="icon-chevron-sign-left"></i> <@liferay.language key="back" /></a> 204 </#if> 205 <hr /> 206 </div> 207 </#if> 208 </#if> 209</#macro> 210 211<#macro downloads> 212 213 <#list docGroup.getSiblings() as cur_docGroup> 214 <#if cur_docGroup.data?trim != ""> 215 ${cur_docGroup.data} 216 </#if> 217 <ul class="vs-documents"> 218 219 <#list cur_docGroup.annexeDocumentLinkTo.getSiblings() as cur_intDoc> 220 <#assign docHash = ""/> 221 <#if cur_intDoc.data?trim != "" && cur_intDoc.data != "null"> 222 223 <li class="vs-documents-internal"> 224 225 <#if serviceLocator??> 226 <#assign docHash = {"url": cur_intDoc.data, "name": cur_intDoc_index}/> 227 <#if cur_intDoc.data?split("/")[5]??> 228 <@Documents docLink=cur_intDoc.data/> 229 230 <#-- Bug correction by STETSC--> 231 <#else> 232 <#assign docJSON = jsonFactoryUtil.createJSONObject(cur_intDoc.data) /> 233 <#assign gid = docJSON.groupId /> 234 <#assign title = docJSON.title /> 235 <#assign longGid = getterUtil.getLong(gid) /> 236 <#assign uuid = docJSON.uuid /> 237 <#assign tnow = '?t='+.now?long /> 238 <li> 239 <a class="red" href="${cur_intDoc.getData()}${tnow}" target="_blank"> 240 <#-- <span class="subtitle">${document.extension}</span> --> 241 <span>${docJSON.title}</span> 242 </a> 243 </li> 244 <#-- End bug correction by STETSC--> 245 246 247 </#if> 248 <#else> 249 <#if cur_intDoc.data?split("/")[4]??> 250 <#assign docHash = {"url": cur_intDoc.data, "name": httpUtil.decodeURL(cur_intDoc.data?split("/")[4])}/> 251 <#else> 252 <#assign docHash = {"url": cur_intDoc.data, "name": cur_intDoc.data}/> 253 </#if> 254 <a href="${docHash.url}"> 255 ${docHash.name} 256 </a> 257 </#if> 258 </li> 259 </#if> 260 </#list> 261 262 <#list cur_docGroup.annexeUrlTitle.getSiblings() as cur_extDoc> 263 <#if cur_extDoc.data?trim != "" && cur_extDoc.data != "null"> 264 <li class="vs-documents-external"> 265 <a class="vs-icon ext" href="${cur_extDoc.annexeUrl.data}"> 266 <span style="color: #333333;">${cur_extDoc.data}</span> 267 </a> 268 </li> 269 </#if> 270 </#list> 271 272 273 <#if cur_docGroup.folderId?? > 274 <#if cur_docGroup.folderId.data?trim != ""> 275 <#assign filesInFolder = getFileEntries(groupId, cur_docGroup.folderId.data) /> 276 <#list filesInFolder as cur_file> 277 <li class="vs-documents-folder"> 278 <@DocumentFromUuid groupId cur_file.uuid /> 279 </li> 280 </#list> 281 282 <#assign filesInFolder = "" /> 283 </#if> 284 </#if> 285 286 </ul> 287 </#list> 288</#macro> 289 290<#macro DocumentFromUuid group uuid> 291 <#assign document = DLFileEntryLocalService.getFileEntryByUuidAndGroupId(uuid, group) /> 292 <a class="vs-icon ${document.extension}" href="/documents/${document.groupId}/${document.folderId}/${document.title?url}/${document.uuid}"><span style="color: #333333;">${document.getTitle()}</span></a> 293 <small class="muted" style="white-space: nowrap;">(${(document.size/1024)?round} <@liferay.language key="vs-kb"/>)</small> 294 <#assign document = "" /> 295</#macro> 296 297<#macro Documents docLink> 298 <#assign gid = docLink?split("/")[2] /> 299 <#assign longGid = getterUtil.getLong(gid) /> 300 <#assign last = docLink?split("/")[5] /> 301 <#assign uuid = last?split("?")[0] /> 302 <#assign document = DLFileEntryLocalService.getFileEntryByUuidAndGroupId(uuid, longGid) /> 303 <a class="vs-icon ${document.extension}" href="${docLink}"><span style="color: #333333;">${document.getTitle()}</span></a> 304 <small class="muted" style="white-space: nowrap;">(${(document.size/1024)?round} <@liferay.language key="vs-kb"/>)</small> 305</#macro> 306 307<#macro links> 308 <#list linkGroup.getSiblings() as cur_linkGroup> 309 <#if cur_linkGroup.data?trim != ""> 310 ${cur_linkGroup.data} 311 </#if> 312 <ul> 313 <#list cur_linkGroup.linkTitle.getSiblings() as cur_link> 314 <#if cur_link.data?trim != "" && cur_link.data != "null"> 315 <li> 316 <a href="${cur_link.linkUrl.data}"> 317 ${cur_link.data} 318 </a> 319 </li> 320 </#if> 321 </#list> 322 </ul> 323 </#list> 324</#macro> 325 326<#macro lex> 327 <#if yourChoosenLocal == "de"> 328 <#assign lexLanguage = "de" /> 329 <#else> 330 <#assign lexLanguage = "fr" /> 331 </#if> 332 <#list lexGroup.getSiblings() as cur_lexGroup> 333 <#if cur_lexGroup.data?trim != ""> 334 ${cur_lexGroup.data} 335 </#if> 336 <ul> 337 <#list cur_lexGroup.lexTitle.getSiblings() as cur_lex> 338 <#if cur_lex.data?trim != "" && cur_lex.data != "null"> 339 <li> 340 <#if cur_lex.lexType.data == "leglisttype" > 341 <#assign lexLinkUrl = "http://apps.vs.ch/legxml/site/search.php?norm_language=" + lexLanguage + "&norm_number=" + cur_lex.lexNumbers.getData() /> 342 <#elseif cur_lex.lexType.data == "legdetailtype" > 343 <#assign lexLinkUrl = "http://apps.vs.ch/legxml/site/laws_show.php?norm_language=" + lexLanguage + "&norm_specific_number=" + cur_lex.lexNumbers.getData() /> 344 <#elseif cur_lex.lexType.data == "legpdftype" > 345 <#assign lexLinkUrl = "http://apps.vs.ch/legxml/site/laws_pdf.php?norm_language=" + lexLanguage + "&norm_specific_number=" + cur_lex.lexNumbers.getData() + "&MODE=2" /> 346 <#elseif cur_lex.lexType.data == "leglinktype" > 347 <#assign lexLinkUrl = cur_lex.lexNumbers.getData() /> 348 </#if> 349 <a href="${lexLinkUrl}"> 350 ${cur_lex.data} 351 </a> 352 </li> 353 </#if> 354 </#list> 355 </ul> 356 </#list> 357</#macro> 358 359<#macro contactInfo> 360 ${contact.getData()} 361 <#if serviceLocator??> 362 <#if contact.contactId?? > 363 <#if contact.contactId.data?trim != ""> 364 ${getArticleContent(groupId, contact.contactId.data)} 365 </#if> 366 </#if> 367 </#if> 368</#macro> 369 370<#function getArticleDate dateType> 371 <#if serviceLocator??> 372 <#assign article = JournalArticleLocalService.getArticle(groupId, gArticleId) /> 373 <#if dateType == "published"> 374 <#assign date = article.displayDate?date /> 375 <#elseif dateType == "modified"> 376 <#assign date = article.modifiedDate?date /> 377 <#elseif dateType == "created"> 378 <#assign date = article.createDate?date /> 379 <#else> 380 <#assign date = "???" /> 381 </#if> 382 <#return date> 383 </#if> 384</#function> 385 386<#function getFileEntries group folderId> 387 <#if serviceLocator??> 388 <#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") /> 389 <#return DLFileEntryLocalService.getFileEntries(group, getterUtil.getLong(folderId)) /> 390 </#if> 391 <#return "" /> 392</#function> 393 394<#function getArticleContent gid aid> 395 <#attempt> 396 <#assign article = JournalArticleLocalService.getArticle(gid?number, aid?upper_case) /> 397 <#assign articleContent = JournalArticleLocalService.getArticleContent(article, null, null, locale, themeDisplay) /> 398 <#if articleContent?? > 399 <#return articleContent /> 400 </#if> 401 <#return "" /> 402 <#recover> 403 <#return "" /> 404 </#attempt> 405 </#function> 406 407<#function isDocEmpty> 408 <#list docGroup.getSiblings() as cur_docGroup> 409 <#list cur_docGroup.annexeDocumentLinkTo.getSiblings() as cur_intDoc> 410 <#if cur_intDoc.data?trim != "" && cur_intDoc.data?trim != "null"> 411 <#return "false" /> 412 </#if> 413 </#list> 414 <#list cur_docGroup.annexeUrlTitle.getSiblings() as cur_extDoc> 415 <#if cur_extDoc.data?trim != "" && cur_extDoc.data?trim != "null"> 416 <#return "false" /> 417 </#if> 418 </#list> 419 <#if cur_docGroup.folderId?? > 420 <#list cur_docGroup.folderId.getSiblings() as cur_folder> 421 <#if cur_folder.data?trim != "" && cur_folder.data?trim != "null"> 422 <#return "false" /> 423 </#if> 424 </#list> 425 </#if> 426 </#list> 427 <#return "true" /> 428</#function> 429 430<#function isLinkEmpty> 431 <#list linkGroup.getSiblings() as cur_linkGroup> 432 <#list cur_linkGroup.linkTitle.getSiblings() as cur_link> 433 <#if cur_link.data?trim != ""> 434 <#return "false" /> 435 </#if> 436 </#list> 437 </#list> 438 <#return "true" /> 439</#function> 440 441<#function isLexEmpty> 442 <#list lexGroup.getSiblings() as cur_lexGroup> 443 <#list cur_lexGroup.lexTitle.getSiblings() as cur_lex> 444 <#if cur_lex.data?trim != ""> 445 <#return "false" /> 446 </#if> 447 </#list> 448 </#list> 449 <#return "true" /> 450</#function> 451 452<#function isContactEmpty> 453 <#if contact.contactId?? > 454 <#if contact.getData()?trim != "" || contact.contactId.data?trim != "" > 455 <#return "false" /> 456 </#if> 457 <#else> 458 <#if contact.getData()?trim != "" > 459 <#return "false" /> 460 </#if> 461 </#if> 462 <#return "true" /> 463</#function> 464 465<#function isGenericHtmlEmpty> 466 <#if htmlGeneric ??> 467 <#if htmlGeneric.getData()?trim != "" > 468 <#return "false"> 469 </#if> 470 </#if> 471 <#return "true" /> 472</#function> 473 474<#function isRelatedEmpty relatedEntries> 475 <#if relatedEntries?? > 476 <#list relatedEntries as cur_entry > 477 <#if cur_entry?trim != ""> 478 <#return "false"> 479 </#if> 480 </#list> 481 </#if> 482 <#return "true" /> 483</#function> 484 485<#function isImageEmpty> 486 <#if smallImage.getData()?trim != "" && smallImage.getData()?trim != "null" > 487 <#return "false"> 488 </#if> 489 <#return "true" /> 490</#function> 491 492 493 494<#macro relatedAssets > 495 <#assign relatedEntries = getRelatedContent() /> 496 <#-- <#if relatedEntries?? > --> 497 <#if isRelatedEmpty(relatedEntries) == "false"> 498 <div class="structure-area block"> 499 <h3 style="color: white;"><@liferay.language key="vs-en-relation"/></h3> 500 <ul class="unstyled"> 501 <#list relatedEntries as cur_asset_link> 502 <#assign assetEntry = getAssetEntry(cur_asset_link.entryId2) /> 503 <#assign lClassName = "com.liferay.portlet.journal.model.JournalArticle"/> 504 <#assign journalArticle = JournalArticleLocalService.getLatestArticle(assetEntry.getClassPK())/> 505 <li> 506 <a href="#">${journalArticle.getTitle(locale)}</a> 507 </li> 508 </#list> 509 </ul> 510 </div> 511 </#if> 512</#macro> 513 514<#function getAssetEntry entryId> 515 <#assign entry = AssetLocalService.getAssetEntry(entryId) /> 516 <#return entry /> 517</#function> 518 519<#function getRelatedContent > 520 <#assign lClassName = "com.liferay.portlet.journal.model.JournalArticle"/> 521 <#assign lArticle = JournalArticleLocalService.getArticle(groupId, gArticleId)/> 522 <#assign lPk = lArticle.getResourcePrimKey()/> 523 <#assign lEntry = AssetLocalService.getEntry(lClassName,lPk)/> 524 <#assign lLinks = AssetLinkService.getDirectLinks(lEntry.getEntryId())/> 525 <#return lLinks /> 526</#function>