code: public Object extFunction(String ns, String funcName, Vector argVec,
          Object methodKey) throws javax.xml.transform.TransformerException {
          try {
  
              if ( funcName == null ) {
                  String fmsg = XSLMessages.createXPATHMessage(
                      XPATHErrorResources.ER_ARG_CANNOT_BE_NULL,
                      new Object[] {"Function Name"} );
                  throw new NullPointerException ( fmsg ); 
              }
              //Find the XPathFunction corresponding to namespace and funcName
              javax.xml.namespace.QName myQName = new QName( ns, funcName );
  
              // JAXP 1.3 spec says When XMLConstants.FEATURE_SECURE_PROCESSING 
              // feature is set then invocation of extension functions need to
              // throw XPathFunctionException
              if ( extensionInvocationDisabled ) {
                  String fmsg = XSLMessages.createXPATHMessage(
                      XPATHErrorResources.ER_EXTENSION_FUNCTION_CANNOT_BE_INVOKED,
                      new Object[] { myQName.toString() } );
                  throw new XPathFunctionException ( fmsg );
              }
  
              // Assuming user is passing all the needed parameters ( including
              // default values )
              int arity = argVec.size();
  
              javax.xml.xpath.XPathFunction xpathFunction = 
                  resolver.resolveFunction ( myQName, arity );
  
              // not using methodKey
              ArrayList argList = new ArrayList( arity);
              for ( int i=0; i<arity; i++ ) {
                  Object argument = argVec.elementAt( i );
                  // XNodeSet object() returns NodeVector and not NodeList
                  // Explicitly getting NodeList by using nodelist()
                  if ( argument instanceof XNodeSet ) {
                      argList.add ( i, ((XNodeSet)argument).nodelist() );
                  } else if ( argument instanceof XObject ) {
                      Object passedArgument = ((XObject)argument).object();
                      argList.add ( i, passedArgument );
                  } else {
                      argList.add ( i, argument );
                  }
              }
  
              return ( xpathFunction.evaluate ( argList ));
          } catch ( XPathFunctionException xfe ) {
              // If we get XPathFunctionException then we want to terminate
              // further execution by throwing WrappedRuntimeException 
              throw new org.apache.xml.utils.WrappedRuntimeException ( xfe );
          } catch ( Exception e ) {
              throw new javax.xml.transform.TransformerException ( e );
          }
      
      }
docs: Execute the extension function.