i agree with your opinion, and it's backed by the spec/javadocs. in most cases the consumer will access the bindings from an actual script (e.g. HTL), and in that case it should not make any difference for them.
stefan >-----Original Message----- >From: Jörg Hoh <jhoh...@googlemail.com.INVALID> >Sent: Friday, February 4, 2022 12:01 PM >To: Sling Developers List <dev@sling.apache.org> >Subject: [Scripting] Bindings returning null > >Hi, > >I am currently working on a number of smaller performance improvements, and >I found that some BindingsValuesProvider could benefit from providings >lazily. In that case the binding is added, but the value is only resolved >when the value of the binding is actually needed, instead of resolving them >when adding the binding [1]. As these bindings are added very often, but >not always used, a small improvement in the area of a few hundred >microseconds can accumulate to a 2-digit number of milliseconds for a >complex request; > >The implementations of the BindingValuesProvider#addBindings() currently >often perform checks if the binding should be added at all. In the case of >a failed check the binding would not be added at all. > With the dynamic resolution this is hardly possible, it would defeat the >purpose of delaying the resolution (including these checks) to a time when >it's absolutely necessary. In the case of the dynamic resolution with a >failed check this just leaves the option to return "null" for that binding. > >The javax.script.Bindings#get spec [2] allows to return null in 2 cases: >* the mapping is not present >* the mapping returns a null > >So technically this change is covered by the spec, but I don't know if all >users of the bindings always check for null but have used some other >approach instead: > >if (bindings.containsKey(BINDING)) { > Object o = bindings.get(BINDING); > assertNotNull(o); >} > >which is incorrect according to the spec, but might have worked in the >past. > >In my opinion we should adjust these BindingsValuesProviders and require >the consumers of these bindings to make sure that they do the null-check as >required by the spec. > >WDYT? > > >Jörg > > >[1] >https://github.com/apache/sling-org-apache-sling- >api/blob/master/src/main/java/org/apache/sling/api/scripting/LazyBindings.j >ava >[2] >https://docs.oracle.com/javase/8/docs/api/javax/script/Bindings.html#get- >java.lang.Object- > > >-- >Cheers, >Jörg Hoh, > >https://cqdump.joerghoh.de >Twitter: @joerghoh