Skip to content

StackOverflowException caused by Jsonnet 'std.filter' function #158

Description

@nielsm5

Troubleshooting at least shows that the element was missing in the input message. Normally this would simply throw an error about a missing field.

It looks as if it ends up in an endless loop trying to evaluate the condition in the filter and/or retrieving the value to apply the condition to. The line causing the issue is "CmId": std.filter(function(x) x['@name'] == 'externalid', payload["ProcessHumanResourceRequest"]["Assignment"]["ReferenceInformation"]["StaffingCustomerId"]["IdValue"])[0]["$"] in the AfasContract.libsonnet file.

Adding default "" at the end (syntactic sugar for try/catch) prevents the issue from occurring somehow.
Copying the line to the main jsonnet file does not trigger the issue. Simply gives an error message about "Assignment" field not existing in the input.
Copying the createAfasContract function from the libsonnet file to the jsonnet file as local function does not trigger the issue either.
I suspect that the issue is vaguely in the direction of a difference in the context that is available the main jsonnet file vs. the context available to imported content. Or maybe function arguments behave differently local vs local from import For some reason the payload and variables provided via params are not available to libsonnet file, unless they are passed via a function. At the same time jsonnet documentation claims that jsonnet does not work with function or variable references and simply copies everything inline.

Copied from frankframework/frankframework#11333.

Log file:

at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:51)
    at com.datasonnet.jsonnet.Evaluator.$anonfun$visitObjBody$5(Evaluator.scala:491)
    at com.datasonnet.jsonnet.Val$Obj.valueRaw(Val.scala:224)
    at com.datasonnet.jsonnet.Val$Obj.value(Val.scala:171)
    at com.datasonnet.jsonnet.Evaluator.visitSelect(Evaluator.scala:265)
    at com.datasonnet.jsonnet.Evaluator.visitExpr(Evaluator.scala:99)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions