public final boolean invoke(Environment env,
InvokeContext context) throws Exception {
// Perform any common invoke functionality
super.invoke(env, context);
Map objectModel = env.getObjectModel();
Parameters resolvedParams = VariableResolver.buildParameters(
this.parameters, context, objectModel
);
Map result = null;
if (this.threadSafeMatcher != null) {
// Avoid select() and try/catch block (faster !)
result = this.threadSafeMatcher.preparedMatch(preparedPattern, objectModel, resolvedParams);
} else {
// Get matcher from selector
PreparableMatcher matcher = (PreparableMatcher)this.selector.select(this.componentName);
try {
result = matcher.preparedMatch(preparedPattern, objectModel, resolvedParams);
} finally {
this.selector.release(matcher);
}
}
if (result != null) {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Matcher '" + this.componentName + "' matched prepared pattern '" +
this.pattern + "' at " + this.getLocation());
}
// Invoke children with the matcher results
return this.invokeNodes(children, env, context, name, result);
} else {
// Matcher failed
return false;
}
}
|