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
Post a Comment