Details
-
Type:
Bug
-
Status: CLOSED
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: 20.3 [Tentative], 21.0 [Tentative], 22.0 [Tentative]
-
Component/s: Lessons
-
Labels:None
-
21 Status:Resolved
-
20 status:Resolved
-
Test Plan:
Description
If you import a common cartridge Lessons -> More Tools -> External Tool Import and try to launch its content, lessons blows up with an NPE.
This is in code introduced in SAK-44770
85a13aebb34 (Brian Jones 2020-12-10 20:11:03 +0000 4963)
You could claim this is pretty arcane use case and even claim that the cartridge import might have missed populating some field - and we can and should figure all that out - but the code is pretty susceptible to NPEs as written using chaining.
I have made a patch, that just wraps the very complex chained method string in a try / except
{{ String externalPageTitle = simplePageBean.getCurrentSite().getPage(page.getToolId()).getTools().stream()}}
{{ .filter(t -> t.getId().equals(toolManager.getCurrentPlacement().getId()))}}
{{ .findFirst()}}
{{ .map(t -> t.getTitle())}}
{{ .orElse("");}}
java.lang.NullPointerException
{{ at org.sakaiproject.lessonbuildertool.tool.producers.ShowPageProducer.createEditTitleDialog(ShowPageProducer.java:4963)}}
{{ at org.sakaiproject.lessonbuildertool.tool.producers.ShowPageProducer.createDialogs(ShowPageProducer.java:3630)}}
{{ at org.sakaiproject.lessonbuildertool.tool.producers.ShowPageProducer.fillComponents(ShowPageProducer.java:1221)}}
{{ at uk.org.ponder.rsf.view.support.ViewCollector.fillComponents(ViewCollector.java:56)}}
{{ at uk.org.ponder.rsf.view.support.LayoutCollector.fillComponents(LayoutCollector.java:68)}}
{{ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)}}
{{ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}}
{{ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}}
{{ at java.lang.reflect.Method.invoke(Method.java:498)}}
{{ at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)}}
{{ at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205)}}
{{ at com.sun.proxy.$Proxy292.fillComponents(Unknown Source)}}
{{ at uk.org.ponder.rsf.view.support.ViewGenerator.generateView(ViewGenerator.java:53)}}