Hi Ruwan, When I tried in jdk 9 the same issue was observed. In jdk 9, there are improvements done for the nashron engine to support ES6. This issue should be due to this implementation change. I have looked for the possibilities to disable this behaviour change using the system properties (nashorn.args), but I could not able to isolate the root cause.
[1] - https://docs.oracle.com/javase/9/whatsnew/toc.htm#JSNEW-GUID-EF16133E-F5C2-4DEB-AA4E-A0C73E92E2C3 Thanks, Senthalan On Fri, Sep 27, 2019 at 5:31 PM Ruwan Abeykoon <ruw...@wso2.com> wrote: > Hi Senthalan, > Does this means we have to change our existing custom functions to the > same pattern to define it as a "var" ? > > I am wondering why the previous way of defining functions fails in java 11. > > Cheers, > Ruwan A > > > On Fri, Sep 27, 2019 at 3:03 PM Senthalan Kanagalingam <sentha...@wso2.com> > wrote: > >> Hi all, >> >> When running the age-based authentication script[1] in wso2 server 5.9.0 >> beta, we faced the following error, >> >> Exception : >> >> <eval>:8 TypeError: null is not a function >> at >> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) >> at >> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:213) >> at >> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:185) >> at >> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:172) >> at >> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.linker.NashornBottomLinker.linkNull(NashornBottomLinker.java:251) >> at >> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.linker.NashornBottomLinker.getGuardedInvocation(NashornBottomLinker.java:71) >> at >> jdk.dynalink/jdk.dynalink.linker.support.CompositeGuardingDynamicLinker.getGuardedInvocation(CompositeGuardingDynamicLinker.java:109) >> at >> jdk.dynalink/jdk.dynalink.LinkerServicesImpl.lambda$getGuardedInvocation$0(LinkerServicesImpl.java:137) >> at >> jdk.dynalink/jdk.dynalink.LinkerServicesImpl.getWithLookupInternal(LinkerServicesImpl.java:168) >> at >> jdk.dynalink/jdk.dynalink.LinkerServicesImpl.getGuardedInvocation(LinkerServicesImpl.java:135) >> at >> jdk.dynalink/jdk.dynalink.DynamicLinker.relink(DynamicLinker.java:242) >> at >> jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$97$\^eval\_$cu1$restOf.L:1(<eval>:8) >> at >> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:657) >> at >> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513) >> at >> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:527) >> at >> jdk.scripting.nashorn/jdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:120) >> at >> org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.GraphBasedSequenceHandler.lambda$executeFunction$1(GraphBasedSequenceHandler.java:616) >> at >> org.wso2.carbon.identity.application.authentication.framework.config.model.graph.JsGraphBuilder$JsBasedEvaluator.evaluate(JsGraphBuilder.java:881) >> at >> org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.GraphBasedSequenceHandler.executeFunction(GraphBasedSequenceHandler.java:616) >> at >> org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.GraphBasedSequenceHandler.handleDecisionPoint(GraphBasedSequenceHandler.java:578) >> at >> org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.GraphBasedSequenceHandler.handleNode(GraphBasedSequenceHandler.java:170) >> at >> org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.GraphBasedSequenceHandler.handle(GraphBasedSequenceHandler.java:127) >> at >> org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultAuthenticationRequestHandler.handle(DefaultAuthenticationRequestHandler.java:142) >> at >> org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.handle(DefaultRequestCoordinator.java:239) >> at >> org.wso2.carbon.identity.application.authentication.framework.CommonAuthenticationHandler.doPost(CommonAuthenticationHandler.java:46) >> >> >> When analysing we found that the issue with the following method >> signature, >> >> function getAge(birthDate) { >> var today = new Date(); >> var age = today.getFullYear() - birthDate.getFullYear(); >> var m = today.getMonth() - birthDate.getMonth(); >> if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { >> age--; >> } >> return age; >> } >> >> when this changed to, >> var getAge = function (birthDate) { >> var today = new Date(); >> var age = today.getFullYear() - birthDate.getFullYear(); >> var m = today.getMonth() - birthDate.getMonth(); >> if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { >> age--; >> } >> return age; >> }; >> >> Then the authentication script worked. And this method signature format >> worked in java 8 as well. So we have changed our default templates in 5.9.0 >> to java 11 by default. >> >> To make consistency in the script, we decided to change >> the onLoginRequest as well to the new method signature. (The >> existing onLoginRequest method signature will work with java 11) >> >> So the existing developers who decide to use java 11 with IS 5.9.0 have >> to change the method signature. But if developers continue with java 8. >> There won't be any changes needed. Please raise if you have any concerns. >> >> [1] - >> https://docs.wso2.com/display/IS580/Configuring+User-Age-Based+Adaptive+Authentication >> >> Thanks, >> Senthalan >> -- >> Senthalan Kanagalingam | Senior Software Engineer | WSO2 Inc. >> (m) +94 (0) 77 18 77 466 | (w) +94117435800 | (e) sentha...@wso2.com >> >> <http://wso2.com/signature> >> >> > > -- > Ruwan Abeykoon | Director/Architect | WSO2 Inc. > (w) +947435800 | Email: ruw...@wso2.com > > -- Senthalan Kanagalingam | Senior Software Engineer | WSO2 Inc. (m) +94 (0) 77 18 77 466 | (w) +94117435800 | (e) sentha...@wso2.com <http://wso2.com/signature>
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev