coliver 2003/02/23 11:26:57
Modified: src/java/org/apache/cocoon/components/flow/javascript JSCocoon.java JavaScriptInterpreter.java Log: Updated to support using the Cocoon flow layer with XMLForm Revision Changes Path 1.16 +25 -9 xml-cocoon2/src/java/org/apache/cocoon/components/flow/javascript/JSCocoon.java Index: JSCocoon.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/flow/javascript/JSCocoon.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- JSCocoon.java 20 Feb 2003 18:22:43 -0000 1.15 +++ JSCocoon.java 23 Feb 2003 19:26:57 -0000 1.16 @@ -146,23 +146,39 @@ public Request jsGet_request() { - Map objectModel = environment.getObjectModel(); - return ObjectModelHelper.getRequest(objectModel); + if (environment == null) { + // context has been invalidated + return null; + } + Map objectModel = environment.getObjectModel(); + return ObjectModelHelper.getRequest(objectModel); } public Response jsGet_response() { + if (environment == null) { + // context has been invalidated + return null; + } Map objectModel = environment.getObjectModel(); return ObjectModelHelper.getResponse(objectModel); } public Session jsGet_session() { + if (environment == null) { + // context has been invalidated + return null; + } return jsGet_request().getSession(); } public Context jsGet_context() { + if (environment == null) { + // context has been invalidated + return null; + } Map objectModel = environment.getObjectModel(); return ObjectModelHelper.getContext(objectModel); } @@ -276,13 +292,13 @@ public static Object jsobjectToObject(Object obj) { - // unwrap Scriptable wrappers of real Java objects - if (obj instanceof Wrapper) { - obj = ((Wrapper) obj).unwrap(); - } else if (obj == Undefined.instance) { - obj = null; - } - return obj; + // unwrap Scriptable wrappers of real Java objects + if (obj instanceof Wrapper) { + obj = ((Wrapper) obj).unwrap(); + } else if (obj == Undefined.instance) { + obj = null; + } + return obj; } public Scriptable jsFunction_callAction(String type, 1.18 +32 -9 xml-cocoon2/src/java/org/apache/cocoon/components/flow/javascript/JavaScriptInterpreter.java Index: JavaScriptInterpreter.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/flow/javascript/JavaScriptInterpreter.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- JavaScriptInterpreter.java 20 Feb 2003 18:22:43 -0000 1.17 +++ JavaScriptInterpreter.java 23 Feb 2003 19:26:57 -0000 1.18 @@ -70,6 +70,7 @@ import org.mozilla.javascript.Context; import org.mozilla.javascript.Function; import org.mozilla.javascript.NativeArray; +import org.mozilla.javascript.Wrapper; import org.mozilla.javascript.PropertyException; import org.mozilla.javascript.Script; import org.mozilla.javascript.ScriptRuntime; @@ -81,7 +82,7 @@ /** * Interface with the JavaScript interpreter. * - * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a> * @author <a href="mailto:[EMAIL PROTECTED]">Marcus Crafter</a> * @since March 25, 2002 */ @@ -345,9 +346,12 @@ */ protected void exitContext(Scriptable thrScope) { - JSCocoon cocoon = (JSCocoon)thrScope.get("cocoon", thrScope); - cocoon.invalidateContext(); - Context.exit(); + // thrScope may be null if an exception occurred compiling a script + if (thrScope != null) { + JSCocoon cocoon = (JSCocoon)thrScope.get("cocoon", thrScope); + cocoon.invalidateContext(); + } + Context.exit(); } public void readScripts(Environment environment, List sources) @@ -373,7 +377,20 @@ compiledScripts.add(compiledScript); } } - catch (Exception ex) { + catch (JavaScriptException ex) { + Object value = ex.getValue(); + while (value instanceof Wrapper) { + value = ((Wrapper)value).unwrap(); + } + if (value instanceof Exception) { + Exception e = (Exception)value; + e.printStackTrace(); + throw e; + } else if (value instanceof Error) { + throw (Error)value; + } + throw ex; + } catch (Exception ex) { ex.printStackTrace(); throw ex; } @@ -512,16 +529,22 @@ ((Function) callFunction).call(context, thrScope, thrScope, callFunArgs); } catch (JavaScriptException ex) { - ex.printStackTrace(); Object value = ex.getValue(); + while (value instanceof Wrapper) { + value = ((Wrapper)value).unwrap(); + } if (value instanceof Exception) { - throw (Exception)value; + Exception e = (Exception)value; + e.printStackTrace(); + throw e; + } else if (value instanceof Error) { + throw (Error)value; } throw ex; } catch (Exception ex) { - ex.printStackTrace(); - throw ex; + ex.printStackTrace(); + throw ex; } finally { exitContext(thrScope);