public XObject execute(XPathContext xctxt) throws javax.xml.transform.TransformerException {
  if (xctxt.isSecureProcessing())   throw new javax.xml.transform.TransformerException(XPATHMessages.createXPATHMessage(XPATHErrorResources.ER_EXTENSION_FUNCTION_CANNOT_BE_INVOKED,new Object[]{toString()}));
  XObject result;
  Vector argVec=new Vector();
  int nArgs=m_argVec.size();
  for (int i=0; i < nArgs; i++) {
    Expression arg=(Expression)m_argVec.elementAt(i);
    XObject xobj=arg.execute(xctxt);
    xobj.allowDetachToRelease(false);
    argVec.addElement(xobj);
  }
  ExtensionsProvider extProvider=(ExtensionsProvider)xctxt.getOwnerObject();
  Object val=extProvider.extFunction(this,argVec);
  if (null != val) {
    result=XObject.create(val,xctxt);
  }
 else {
    result=new XNull();
  }
  return result;
}

public XObject execute ( XPathContext xctxt ) throws javax . xml . transform . TransformerException { if ( xctxt . isSecureProcessing ( ) ) throw new javax . xml . transform . TransformerException ( XPATHMessages . createXPATHMessage ( XPATHErrorResources . ER_EXTENSION_FUNCTION_CANNOT_BE_INVOKED , new Object [ ] { toString ( ) } ) ) ; XObject result ; Vector argVec = new Vector ( ) ; int nArgs = m_argVec . size ( ) ; for ( int i = 0 ; i < nArgs ; i ++ ) { Expression arg = ( Expression ) m_argVec . elementAt ( i ) ; XObject xobj = arg . execute ( xctxt ) ; xobj . allowDetachToRelease ( false ) ; argVec . addElement ( xobj ) ; } ExtensionsProvider extProvider = ( ExtensionsProvider ) xctxt . getOwnerObject ( ) ; Object val = extProvider . extFunction ( this , argVec ) ; if ( null != val ) { result = XObject . create ( val , xctxt ) ; } else { result = new XNull ( ) ; } return result ; }
execute the function . the function must return a valid object .
