Does Spring Expression Language support IN operator? -


does spring expression language support in operator? similar sql in clause.

public class security {  private sectyp1;  public security (string asectyp1) {   sectyp1 = asectyp1;  } } 

security security = new security("bond"); standardevaluationcontext context = new standardevaluationcontext(security); expressionparser parser = new spelexpressionparser(); // should return true boolean result = parser.parseexpression("sectyp1 **in** {'bond','swpi'}").getvalue(context, boolean.class);  // should return false result = parser.parseexpression("sectyp1 **in** {'fut','swpi'}").getvalue(context, boolean.class);  

i following exception

org.springframework.expression.spel.spelparseexception: el1041e:(pos 8): after parsing valid expression, there still more data in expression: 'in'     @ org.springframework.expression.spel.standard.internalspelexpressionparser.doparseexpression(internalspelexpressionparser.java:118)     @ org.springframework.expression.spel.standard.spelexpressionparser.doparseexpression(spelexpressionparser.java:56)     @ org.springframework.expression.spel.standard.spelexpressionparser.doparseexpression(spelexpressionparser.java:1)     @ org.springframework.expression.common.templateawareexpressionparser.parseexpression(templateawareexpressionparser.java:66)     @ org.springframework.expression.common.templateawareexpressionparser.parseexpression(templateawareexpressionparser.java:56)     @ com.rules.assignablesecurityrule.evaluateincondition(assignablesecurityrule.java:48)     @ com.rules.assignablesecurityruletest.testincondition(assignablesecurityruletest.java:43)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25)     @ java.lang.reflect.method.invoke(method.java:597)     @ org.junit.runners.model.frameworkmethod$1.runreflectivecall(frameworkmethod.java:44)     @ org.junit.internal.runners.model.reflectivecallable.run(reflectivecallable.java:15)     @ org.junit.runners.model.frameworkmethod.invokeexplosively(frameworkmethod.java:41)     @ org.junit.internal.runners.statements.invokemethod.evaluate(invokemethod.java:20)     @ org.junit.internal.runners.statements.runbefores.evaluate(runbefores.java:28)     @ org.junit.runners.blockjunit4classrunner.runnotignored(blockjunit4classrunner.java:79)     @ org.junit.runners.blockjunit4classrunner.runchild(blockjunit4classrunner.java:71)     @ org.junit.runners.blockjunit4classrunner.runchild(blockjunit4classrunner.java:49)     @ org.junit.runners.parentrunner$3.run(parentrunner.java:193)     @ org.junit.runners.parentrunner$1.schedule(parentrunner.java:52)     @ org.junit.runners.parentrunner.runchildren(parentrunner.java:191)     @ org.junit.runners.parentrunner.access$000(parentrunner.java:42)     @ org.junit.runners.parentrunner$2.evaluate(parentrunner.java:184)     @ org.junit.runners.parentrunner.run(parentrunner.java:236)     @ org.eclipse.jdt.internal.junit4.runner.junit4testreference.run(junit4testreference.java:49)     @ org.eclipse.jdt.internal.junit.runner.testexecution.run(testexecution.java:38)     @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:467)     @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:683)     @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.run(remotetestrunner.java:390)     @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.main(remotetestrunner.java:197) 

it not support in operator because not need it. can use method invokation feature instead.

so, invoking .contains(..) on list want.

you can try 2 solutions

    @test     public void solutiononetest() {       final security security = new security("bond");       final evaluationcontext context = new standardevaluationcontext(security);        boolean contains = parser.parseexpression("{'bond','swpi'}.contains(#root.sectyp1)").getvalue(context, boolean.class);       assert.asserttrue(contains);        contains = parser.parseexpression("{'fut','swpi'}.contains(#root.sectyp1)").getvalue(context, boolean.class);       assert.assertfalse(contains);     }      @test     public void solutiontwotest() {       final security security = new security("bond");       final evaluationcontext context = new standardevaluationcontext();       context.setvariable("sec", security);        boolean contains = parser.parseexpression("{'bond','swpi'}.contains(#sec.sectyp1)").getvalue(context, boolean.class);       assert.asserttrue(contains);        contains = parser.parseexpression("{'fut','swpi'}.contains(#sec.sectyp1)").getvalue(context, boolean.class);       assert.assertfalse(contains);     } 

Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -