org.apache.xpath.operations
Class VariableSafeAbsRef

java.lang.Object
  extended by org.apache.xpath.Expression
      extended by org.apache.xpath.operations.Variable
          extended by org.apache.xpath.operations.VariableSafeAbsRef
All Implemented Interfaces:
java.io.Serializable, javax.xml.transform.SourceLocator, PathComponent, ExpressionNode, XPathVisitable

public class VariableSafeAbsRef
extends Variable

This is a "smart" variable reference that is used in situations where an absolute path is optimized into a variable reference, but may be used in some situations where the document context may have changed. For instance, in select="document(doc/@href)//name[//salary > 7250]", the root in the predicate will be different for each node in the set. While this is easy to detect statically in this case, in other cases static detection would be very hard or impossible. So, this class does a dynamic check to make sure the document context of the referenced variable is the same as the current document context, and, if it is not, execute the referenced variable's expression with the current context instead.

See Also:
Serialized Form

Field Summary
(package private) static long serialVersionUID
           
 
Fields inherited from class org.apache.xpath.operations.Variable
m_index, m_isGlobal, m_qname, PSUEDOVARNAMESPACE
 
Constructor Summary
VariableSafeAbsRef()
           
 
Method Summary
 XObject execute(XPathContext xctxt, boolean destructiveOK)
          Dereference the variable, and return the reference value.
 
Methods inherited from class org.apache.xpath.operations.Variable
callVisitors, deepEquals, execute, fixupVariables, getAnalysisBits, getElemVariable, getGlobal, getIndex, getQName, isPsuedoVarRef, isStableNumber, setIndex, setIsGlobal, setQName
 
Methods inherited from class org.apache.xpath.Expression
asIterator, asIteratorRaw, asNode, assertion, bool, canTraverseOutsideSubtree, error, execute, execute, executeCharsToContentHandler, exprAddChild, exprGetChild, exprGetNumChildren, exprGetParent, exprSetParent, getColumnNumber, getExpressionOwner, getLineNumber, getPublicId, getSystemId, isNodesetExpr, isSameClass, num, warn, xstr
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

serialVersionUID

static final long serialVersionUID
See Also:
Constant Field Values
Constructor Detail

VariableSafeAbsRef

public VariableSafeAbsRef()
Method Detail

execute

public XObject execute(XPathContext xctxt,
                       boolean destructiveOK)
                throws javax.xml.transform.TransformerException
Dereference the variable, and return the reference value. Note that lazy evaluation will occur. If a variable within scope is not found, a warning will be sent to the error listener, and an empty nodeset will be returned.

Overrides:
execute in class Variable
Parameters:
xctxt - The runtime execution context.
destructiveOK - true if a "safe" object doesn't need to be returned.
Returns:
The evaluated variable, or an empty nodeset if not found.
Throws:
javax.xml.transform.TransformerException