Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
3.0
-
None
Description
This code used to work under jexl2
public enum Gender { MALE, FEMALE}; public static void main( String[] args ) throws ClassNotFoundException { JexlEngine jexl = new JexlEngine(); Record r = new Record(); r.setHeader(new RecordHeader()); JexlContext jc = new MapContext(); jc.set("r", r ); jc.set("com.sytrue.objects.Gender", Gender.class ); Expression e = jexl.createExpression( "r.header.gender=com.sytrue.objects.Gender.FEMALE" ); System.out.println( e.evaluate(jc) ); }
but under jexl3 it throws an exception:
public static void main( String[] args ) throws ClassNotFoundException { JexlEngine jexl = new JexlBuilder().create(); Record r = new Record(); r.setHeader(new RecordHeader()); JexlContext jc = new MapContext(); jc.set("r", r ); jc.set("com.sytrue.objects.Gender", Gender.class ); JexlExpression e = jexl.createExpression( "r.header.gender=com.sytrue.objects.Gender.FEMALE" ); System.out.println( e.evaluate(jc) ); }
The exception is:
Exception in thread "main" org.apache.commons.jexl3.JexlException$Property: com.sytrue.objects.record.app.JexlTestApp.main@1:42 unsolvable property 'FEMALE'
Temporary workaround is using the valueOf method:
JexlExpression e = jexl.createExpression( "r.header.gender=com.sytrue.objects.Gender.valueOf('FEMALE')" );
It seems that I no longer can access the enum type in jexl3.
Is there any reason this doesn't work anymore or it is a bug