Hi Richard, good to know. Thanks.
I solved it now by means of a custom evaluator I pass to the Jep constructor (as an additional component):
package de.onesense.services.formula;
import com.singularsys.jep.EvaluationException;
import com.singularsys.jep.parser.Node;
import com.singularsys.jep.standard.Complex;
import com.singularsys.jep.standard.FastEvaluator;
/**
* A custom evaluator that is used to
* <ul>
* <li>disable support of infinity numbers</li>
* <li>disable support of NaN numbers</li>
* <li>disable support of complex numbers</li>
* </ul>
*/
public class RestrictedEvaluator extends FastEvaluator {
/**
* Creates a new instance of the restricted evaluator.
*/
public RestrictedEvaluator() {
super();
setTrapInfinity(true);
setTrapNaN(true);
}
@Override
public Object eval(final Node node) throws EvaluationException {
return assertNonComplexNumber(super.eval(node));
}
@Override
public Object evaluate(final Node node) throws EvaluationException {
return assertNonComplexNumber(super.evaluate(node));
}
/**
* Ensures the given result is not a complex number.
*
* @param result The result to check.
*
* @return The checked result.
*
* @throws EvaluationException The result is a complex number.
*/
private Object assertNonComplexNumber(final Object result) throws EvaluationException {
if (result instanceof Complex) {
throw new EvaluationException("EvaluationException: Complex number detected");
}
return result;
}
}
Do you recomment this solution, too, or are there any drawbacks?
Regards,
Marcus