Hi Everyone,
I have an old extension element that used to work that I’m dusting off to use
again (haven’t used it in years). It had some code in it that used to evaluate
an XPath and return an XObject that gave a reference to a previously declared
variable….but now it gives back and XRTreeFrag. Any idea what I’m doing wrong?
I use the attribute to pass previously created Java objects to my extension
element.
Cheers
Adam
public static XObject getXObject(final String xpathAttributeName, final
XSLProcessorContext context, final ElemExtensionCall extensionElement){
XPathContext xCtx = context.getTransformer().getXPathContext();
String selectExpressionString = null;
boolean namespacePushed = false;
boolean expressionPushed = false;
try{
selectExpressionString =
extensionElement.getAttribute(xpathAttributeName);
XPath xpath = new XPath(selectExpressionString,
xCtx.getSAXLocator(), extensionElement, XPath.SELECT);
xCtx.pushNamespaceContext(extensionElement);
namespacePushed = true;
int current = xCtx.getCurrentNode();
xCtx.pushCurrentNodeAndExpression(current, current);
expressionPushed=true;
Expression expr = xpath.getExpression();
XObject result = expr.execute(xCtx);
return result;
}catch(Throwable t){
log.error("Error evaluating xpath attribute " + xpathAttributeName
+ " [" + selectExpressionString + "]", t);
return null;
}
finally
{
if(namespacePushed) xCtx.popNamespaceContext();
if(expressionPushed) xCtx.popCurrentNodeAndExpression();
}
}