private void appendTraceHeader( StringBuilder sb, ExpressionEvaluationContext context, ExpressionVariables processedVariables) { sb.append("---[ EXPRESSION in "); sb.append(context.getContextDescription()); sb.append("]---------------------------"); sb.append("\nSources:"); Collection<Source<?, ?>> sources = context.getSources(); if (sources == null) { sb.append(" null"); } else { for (Source<?, ?> source : sources) { sb.append("\n"); sb.append(source.debugDump(1)); } } sb.append("\nVariables:"); if (processedVariables == null) { sb.append(" null"); } else { sb.append("\n"); sb.append(processedVariables.debugDump(1)); } sb.append("\nOutput definition: ").append(MiscUtil.toString(outputDefinition)); sb.append("\nEvaluators: "); sb.append(shortDebugDump()); }
private void traceFailure( ExpressionEvaluationContext context, ExpressionVariables processedVariables, Exception e) { LOGGER.error( "Error evaluating expression in {}: {}", new Object[] {context.getContextDescription(), e.getMessage(), e}); if (!LOGGER.isTraceEnabled()) { return; } StringBuilder sb = new StringBuilder(); sb.append("Expression failure:\n"); appendTraceHeader(sb, context, processedVariables); sb.append("\nERROR: ").append(e.getClass().getSimpleName()).append(": ").append(e.getMessage()); appendTraceFooter(sb); LOGGER.trace(sb.toString()); }
public PrismValueDeltaSetTriple<V> evaluate(ExpressionEvaluationContext context) throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException { ExpressionVariables processedVariables = null; try { processedVariables = processInnerVariables( context.getVariables(), context.getContextDescription(), context.getTask(), context.getResult()); ExpressionEvaluationContext processedParameters = context.shallowClone(); processedParameters.setVariables(processedVariables); for (ExpressionEvaluator<?, ?> evaluator : evaluators) { PrismValueDeltaSetTriple<V> outputTriple = (PrismValueDeltaSetTriple<V>) evaluator.evaluate(processedParameters); if (outputTriple != null) { traceSuccess(context, processedVariables, outputTriple); return outputTriple; } } traceSuccess(context, processedVariables, null); return null; } catch (SchemaException ex) { traceFailure(context, processedVariables, ex); throw ex; } catch (ExpressionEvaluationException ex) { traceFailure(context, processedVariables, ex); throw ex; } catch (ObjectNotFoundException ex) { traceFailure(context, processedVariables, ex); throw ex; } catch (RuntimeException ex) { traceFailure(context, processedVariables, ex); throw ex; } }