In Grouper v4.0.3+ there is a UI utility to test JEXL scripts.
The point is to test JEXL scripts, and also to show various example in the places where JEXL scripts are used. If you have a good example of a JEXL script please submit it to the Grouper team to add to the screen
Use
Go to Misc - > JEXL script tester
In order to use the JEXL script tester you need to be a Grouper admin and be in the group: etc:jexlScriptTestingGroup
Warning
These JEXL scripts via GSH will run in the UI in the environment where the UI is running. Do not code destructive GSH / JEXL or bad things will happen.
Select the type of script to run
Select the example based on the type of script
Customize 'Available beans'
The 'available beans' section of the screen will pre-populate beans that are in scope for the particular JEXL script. You can customize the data based on what you are testing (in this case, edit the group name)
Edit the 'Null checking script'
The problem with JEXL is in strict mode, a misspelled variable name throws an exception, but a null value also throws an exception. So we are adding a sibling script next to each script in Grouper to check for nulls in non-strict mode. If the null check fails, then null will be used for the script and an error will not be thrown. We used to use the terniary operator for this but you should use a null checking script instead.
Here is an example in provisioning
Here is an example of the null checking script in the jexl script tester
Edit the example JEXL script (or submit as is)
See the result
Note the 'type' of data is printed before the string value. In this example the input is:
applications:departmentOfArtsAndSciences:commonResources:servicesOfSchool:policyGroups:groupsForActiveDirectory:historyDepartmentProfessors
The method called is: stringFormatNameReverseReplaceTruncate with length of 64 and use dots as separators. You see the result is it reversed with dots and length less than 64.
GSH source
If you want to see the GSH source to run this yourself, it is printed below
Jexl advice
Jexl javabean property names
It is better to use the getter name than the property name. JEXL will throw an exception if there is a null and referring to it as property name.
For example, this will return null
ProvisioningGroup provisioningGroup = new ProvisioningGroup(); Map<String, Object> variableMap = new HashMap<String, Object>(); variableMap.put("provisioningGroup", provisioningGroup); String result = GrouperUtil.substituteExpressionLanguage("${provisioningGroup.getName()}", variableMap, true, false, false); System.out.println(result);
But this will throw an error
ProvisioningGroup provisioningGroup = new ProvisioningGroup(); Map<String, Object> variableMap = new HashMap<String, Object>(); variableMap.put("provisioningGroup", provisioningGroup); String result = GrouperUtil.substituteExpressionLanguage("${provisioningGroup.name}", variableMap, true, false, false); System.out.println(result);