php.java.script.servlet
Class InvocablePhpServletLocalHttpServerScriptEngine

java.lang.Object
  extended by javax.script.AbstractScriptEngine
      extended by php.java.script.InvocablePhpScriptEngine
          extended by php.java.script.servlet.InvocablePhpServletLocalHttpServerScriptEngine
All Implemented Interfaces:
Invocable, ScriptEngine
Direct Known Subclasses:
CloseableInvocablePhpServletLocalHttpServerScriptEngine, InvocablePhpServletScriptEngine

public class InvocablePhpServletLocalHttpServerScriptEngine
extends InvocablePhpScriptEngine

A PHP script engine which implements the Invocable interface for Servlets. See ContextLoaderListener for details. PHP scripts are evaluated as follows:

  1. JavaProxy.php is requested from Java
  2. Your script is included and then evaluated
  3. <?php java_context()->call(java_closure());?> is called in order to make the script invocable
In order to evaluate PHP methods follow these steps:
  1. Create a factory which creates a PHP script file from a reader using the methods from EngineFactory:
    private static File script;
    private static final File getScriptF() {
       if (script!=null) return script;

       String webCacheDir = ctx.getRealPath(req.getServletPath());
       Reader reader = new StringReader ("<?php function f($v) {return "passed:".$v;} ?>");
       return EngineFactory.getPhpScript(webCacheDir, reader);
    }
  2. Acquire a PHP invocable script engine from the EngineFactory:
    ScriptEngine scriptEngine = EngineFactory.getInvocablePhpScriptEngine(this, ctx, req, res, "HTTP", 80, "/JavaProxy.php");
  3. Create a FileReader for the created script file:
    Reader readerF = EngineFactory.createPhpScriptFileReader(getScriptF());
  4. Evaluate the engine:
    scriptEngine.eval(readerF);
  5. Close the reader obtained from the EngineFactory:
    readerF.close();
  6. Cast the engine to Invocable:
    Invocable invocableEngine = (Invocable)scriptEngine;
  7. Call PHP functions or methods:
    System.out.println("result from PHP:" + invocableEngine.invoceFunction(f, new Object[]{"arg1"}));
  8. Release the invocable:
    ((Closeable)scriptEngine).close();


Field Summary
 
Fields inherited from interface javax.script.ScriptEngine
ARGV, ENGINE, ENGINE_VERSION, FILENAME, LANGUAGE, LANGUAGE_VERSION, NAME
 
Method Summary
 void close()
          Release the script engine.
 Bindings createBindings()
          Retrieves an uninitailized namespace which can be used as the scope of the ScriptEngine.
 java.lang.Object eval(java.io.Reader reader, ScriptContext context)
          Evaluates a script obtained using the specified reader as the script source and using the namespaces in the specifed ScriptContext.
 java.lang.Object eval(java.lang.String script, ScriptContext context)
          Evaluates a script using the namespaces in the specifed ScriptContext.
 ScriptEngineFactory getFactory()
          Retrieves a ScriptEngineFactory for the class to which describes the underlying ScriptEngine.
 
Methods inherited from class php.java.script.InvocablePhpScriptEngine
getInterface, getInterface, invokeFunction, invokeMethod, release
 
Methods inherited from class javax.script.AbstractScriptEngine
eval, eval, eval, eval, get, getBindings, getContext, put, setBindings, setContext
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

eval

public java.lang.Object eval(java.io.Reader reader,
                             ScriptContext context)
                      throws ScriptException
Description copied from interface: ScriptEngine
Evaluates a script obtained using the specified reader as the script source and using the namespaces in the specifed ScriptContext. Returns null for non-returning scripts

Parameters:
reader - the script source
context - the context contianing different namespace for script evaluation
Returns:
the value of the evaluated script
Throws:
ScriptException - if an error occurs

eval

public java.lang.Object eval(java.lang.String script,
                             ScriptContext context)
                      throws ScriptException
Description copied from interface: ScriptEngine
Evaluates a script using the namespaces in the specifed ScriptContext. Return null for non-returning scripts.

Parameters:
script - the String representation of the script
context - tbe ScriptContext containing namespaces for the script evaluation
Returns:
the value of the evaluated script
Throws:
ScriptException - if an error occurs

getFactory

public ScriptEngineFactory getFactory()
Description copied from interface: ScriptEngine
Retrieves a ScriptEngineFactory for the class to which describes the underlying ScriptEngine.

Returns:
an instance of ScriptEngineFactory which describes the underlying ScriptEngine

createBindings

public Bindings createBindings()
Retrieves an uninitailized namespace which can be used as the scope of the ScriptEngine.

Returns:
an initialzed namespace which can be used to repalce the state of the ScriptEngine

close

public void close()
           throws java.io.IOException
Release the script engine.

Throws:
java.io.IOException