0

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'

I made it to work 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

biliboc
  • 737
  • 1
  • 10
  • 25

1 Answers1

0

It turns out it was a bug: I posted this question on JIRA: https://issues.apache.org/jira/browse/JEXL-191 It will be fixed in version 3.1

biliboc
  • 737
  • 1
  • 10
  • 25