return engineCall.invoke(m_engine, new Object[]{ null, funcName, argArray });
if (m_engineCall != null) { m_engineCall = m_engine.getClass().getMethod("call", new Class[]{ Object.class, String.class, Object[].class }); }  return m_engineCall.invoke(m_engine, new Object[]{ null, funcName, argArray });
  public Object callFunction(          String funcName, Vector args, Object methodKey, ExpressionContext exprContext)            throws TransformerException  {    Object[] argArray;    try    {      argArray = new Object[args.size()];      for (int i = 0; i < argArray.length; i++)      {        Object o = args.elementAt(i);        argArray[i] = (o instanceof XObject) ? ((XObject) o).object() : o;        o = argArray[i];        if(null != o && o instanceof DTMIterator)        {          argArray[i] = new DTMNodeList((DTMIterator)o);        }      }      return engineCall.invoke(m_engine, new Object[]{ null, funcName,                                                       argArray });    }    catch (Exception e)    {      e.printStackTrace();      String msg = e.getMessage();      if (null != msg)      {        if (msg.startsWith("Stopping after fatal error:"))        {          msg = msg.substring("Stopping after fatal error:".length());        }        // System.out.println("Call to extension function failed: "+msg);        throw new TransformerException(e);      }      else      {        // Should probably make a TRaX Extension Exception.        throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_CANNOT_CREATE_EXTENSN, new Object[]{funcName, e })); //"Could not create extension: " + funcName                               //+ " because of: " + e);      }    }  }