Author: mriou
Date: Tue Aug 15 17:05:01 2006
New Revision: 431743

URL: http://svn.apache.org/viewvc?rev=431743&view=rev
Log:
Fixing a potential NullPointer.

Modified:
    
incubator/ode/trunk/bpel-el-xpath10/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
    
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
    
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java

Modified: 
incubator/ode/trunk/bpel-el-xpath10/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-el-xpath10/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java?rev=431743&r1=431742&r2=431743&view=diff
==============================================================================
--- 
incubator/ode/trunk/bpel-el-xpath10/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
 (original)
+++ 
incubator/ode/trunk/bpel-el-xpath10/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
 Tue Aug 15 17:05:01 2006
@@ -18,17 +18,28 @@
  */
 package org.apache.ode.bpel.elang.xpath10.runtime;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.elang.xpath10.o.OXPath10Expression;
 import org.apache.ode.bpel.elang.xpath10.o.OXPath10ExpressionBPEL20;
 import org.apache.ode.bpel.explang.EvaluationContext;
-import org.apache.ode.bpel.o.*;
+import org.apache.ode.bpel.o.OLink;
+import org.apache.ode.bpel.o.OMessageVarType;
+import org.apache.ode.bpel.o.OProcess;
+import org.apache.ode.bpel.o.OScope;
+import org.apache.ode.bpel.o.OXsdTypeVarType;
+import org.apache.ode.bpel.o.OXslSheet;
 import org.apache.ode.bpel.xsl.XslTransformHandler;
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.utils.xsd.XSTypes;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.jaxen.*;
+import org.jaxen.Context;
+import org.jaxen.Function;
+import org.jaxen.FunctionCallException;
+import org.jaxen.FunctionContext;
+import org.jaxen.UnresolvableException;
+import org.jaxen.VariableContext;
+import org.jaxen.XPathFunctionContext;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.xml.sax.SAXException;
@@ -50,306 +61,309 @@
  * [EMAIL PROTECTED] EvaluationContext}.
  */
 class JaxenContexts implements FunctionContext, VariableContext {
-  private static final Log __log = LogFactory.getLog(JaxenContexts.class);
+    private static final Log __log = LogFactory.getLog(JaxenContexts.class);
 
-  /** Static, thread-safe singleton implementing default XPath functions */
-  private static final FunctionContext __defaultXPathFunctions = 
XPathFunctionContext.getInstance();
+    /** Static, thread-safe singleton implementing default XPath functions */
+    private static final FunctionContext __defaultXPathFunctions = 
XPathFunctionContext.getInstance();
 
-  private OXPath10Expression _oxpath;
-  private EvaluationContext _xpathEvalCtx;
-  private Function _getVariableProperty;
-  private Function _getVariableData;
-  private Function _getLinkStatus;
-  private Function _doXslTransform;
-  private Map _extensionFunctions;
-
-  public JaxenContexts(OXPath10Expression oxpath,
-                       Map extensionFunctions,
-                       EvaluationContext xpathEvalCtx) {
-    _oxpath = oxpath;
-    _xpathEvalCtx = xpathEvalCtx;
-    _extensionFunctions = extensionFunctions;
-    _getVariableProperty = new BpelVariablePropertyFunction();
-    _getVariableData = new BpelVariableDataFunction();
-    _getLinkStatus = new GetLinkStatusFunction();
-    _doXslTransform = new DoXslTransformFunction();
-  }
-
-  /**
-   * @see org.jaxen.FunctionContext#getFunction(java.lang.String,
-   *      java.lang.String, java.lang.String)
-   */
-  public Function getFunction(String namespaceURI, String prefix,
-                              String localName)
-                       throws UnresolvableException {
-    if (__log.isDebugEnabled()) {
-      __log.debug("getFunction(" + namespaceURI + "," + prefix + ","
-                  + localName);
+    private OXPath10Expression _oxpath;
+    private EvaluationContext _xpathEvalCtx;
+    private Function _getVariableProperty;
+    private Function _getVariableData;
+    private Function _getLinkStatus;
+    private Function _doXslTransform;
+    private Map _extensionFunctions;
+
+    public JaxenContexts(OXPath10Expression oxpath,
+                         Map extensionFunctions,
+                         EvaluationContext xpathEvalCtx) {
+        _oxpath = oxpath;
+        _xpathEvalCtx = xpathEvalCtx;
+        _extensionFunctions = extensionFunctions;
+        _getVariableProperty = new BpelVariablePropertyFunction();
+        _getVariableData = new BpelVariableDataFunction();
+        _getLinkStatus = new GetLinkStatusFunction();
+        _doXslTransform = new DoXslTransformFunction();
     }
 
-    if ((namespaceURI != null)) {
-      QName fnQName = new QName(namespaceURI, localName);
+    /**
+     * @see org.jaxen.FunctionContext#getFunction(java.lang.String,
+     *      java.lang.String, java.lang.String)
+     */
+    public Function getFunction(String namespaceURI, String prefix,
+                                String localName)
+            throws UnresolvableException {
+        if (__log.isDebugEnabled()) {
+            __log.debug("getFunction(" + namespaceURI + "," + prefix + ","
+                    + localName);
+        }
 
-      if (fnQName.equals(_oxpath.qname_getVariableProperty))
-        return _getVariableProperty;
-      if (fnQName.equals(_oxpath.qname_getVariableData))
-        return _getVariableData;
-      if (fnQName.equals(_oxpath.qname_getLinkStatus))
-        return _getLinkStatus;
-      if (_oxpath instanceof OXPath10ExpressionBPEL20) {
-        OXPath10ExpressionBPEL20 oxpath20 = (OXPath10ExpressionBPEL20) _oxpath;
-        if (fnQName.equals(oxpath20.qname_doXslTransform)) {
-          return _doXslTransform;
+        if ((namespaceURI != null)) {
+            QName fnQName = new QName(namespaceURI, localName);
+
+            if (fnQName.equals(_oxpath.qname_getVariableProperty))
+                return _getVariableProperty;
+            if (fnQName.equals(_oxpath.qname_getVariableData))
+                return _getVariableData;
+            if (fnQName.equals(_oxpath.qname_getLinkStatus))
+                return _getLinkStatus;
+            if (_oxpath instanceof OXPath10ExpressionBPEL20) {
+                OXPath10ExpressionBPEL20 oxpath20 = (OXPath10ExpressionBPEL20) 
_oxpath;
+                if (fnQName.equals(oxpath20.qname_doXslTransform)) {
+                    return _doXslTransform;
+                }
+            }
+            Function f = (Function)_extensionFunctions.get(localName);
+
+            if (f != null) {
+                return f;
+            }
         }
-      }
-      Function f = (Function)_extensionFunctions.get(localName);
 
-      if (f != null) {
-        return f;
-      }
+        // Defer to the default XPath context.
+        return __defaultXPathFunctions.getFunction(null, prefix, localName);
     }
 
-    // Defer to the default XPath context.
-    return __defaultXPathFunctions.getFunction(null, prefix, localName);
-  }
-
-  /**
-   * @see org.jaxen.VariableContext#getVariableValue(java.lang.String,
-   *      java.lang.String, java.lang.String)
-   */
-  public Object getVariableValue(String namespaceURI, String prefix,
-                                 String localName)
-                          throws UnresolvableException {
-    if(!(_oxpath instanceof OXPath10ExpressionBPEL20)){
-      throw new IllegalStateException("XPath variables not supported for bpel 
1.1");
-    }
+    /**
+     * @see org.jaxen.VariableContext#getVariableValue(java.lang.String,
+     *      java.lang.String, java.lang.String)
+     */
+    public Object getVariableValue(String namespaceURI, String prefix,
+                                   String localName)
+            throws UnresolvableException {
+        if(!(_oxpath instanceof OXPath10ExpressionBPEL20)){
+            throw new IllegalStateException("XPath variables not supported for 
bpel 1.1");
+        }
+
+        // Custom variables
+        if ("ode".equals(prefix)) {
+            if ("pid".equals(localName)) {
+                return _xpathEvalCtx.getProcessId();
+            }
+        }
+
+        OXPath10ExpressionBPEL20 expr = (OXPath10ExpressionBPEL20)_oxpath;
+        if(expr.isJoinExpression){
+            OLink olink = _oxpath.links.get(localName);
 
-    // Custom variables
-    if ("ode".equals(prefix)) {
-      if ("pid".equals(localName)) {
-        return _xpathEvalCtx.getProcessId();
-      }
-    }
-  
-    OXPath10ExpressionBPEL20 expr = (OXPath10ExpressionBPEL20)_oxpath;
-    if(expr.isJoinExpression){
-      OLink olink = _oxpath.links.get(localName);
-
-      try {
-        return _xpathEvalCtx.isLinkActive(olink) ? Boolean.TRUE : 
Boolean.FALSE;
-      } catch (FaultException e) {
-        throw new WrappedFaultException.JaxenUnresolvableException(e);
-      }
-    }else{
-         String varName;
-         String partName;
-         int dotloc = localName.indexOf('.');
-         if (dotloc == -1) {
-           varName = localName;
-               partName = null;
-         } else {
-               varName = localName.substring(0, dotloc);
-               partName = localName.substring(dotloc + 1);
-         }     
-      OScope.Variable variable = _oxpath.vars.get(varName);
-      OMessageVarType.Part part = partName == null ? null : 
((OMessageVarType)variable.type).parts.get(partName);
-
-      try{
-        Node variableNode = _xpathEvalCtx.readVariable(variable, part);
-        if (variable.type instanceof OXsdTypeVarType && 
((OXsdTypeVarType)variable.type).simple) {
-               String text = variableNode.getTextContent();
             try {
-              return 
XSTypes.toJavaObject(((OXsdTypeVarType)variable.type).xsdType,
-                      text);
-            } catch (Exception e) { }
-            // Elegant way failed, trying brute force
-          try {
-            return Integer.valueOf(text);
-          } catch (NumberFormatException e) { }
-          try {
-            return Double.valueOf(text);
-          } catch (NumberFormatException e) { }
-          return text;
-        } else {
-          return variableNode;
+                return _xpathEvalCtx.isLinkActive(olink) ? Boolean.TRUE : 
Boolean.FALSE;
+            } catch (FaultException e) {
+                throw new WrappedFaultException.JaxenUnresolvableException(e);
+            }
+        }else{
+            String varName;
+            String partName;
+            int dotloc = localName.indexOf('.');
+            if (dotloc == -1) {
+                varName = localName;
+                partName = null;
+            } else {
+                varName = localName.substring(0, dotloc);
+                partName = localName.substring(dotloc + 1);
+            }
+            OScope.Variable variable = _oxpath.vars.get(varName);
+            OMessageVarType.Part part = partName == null ? null : 
((OMessageVarType)variable.type).parts.get(partName);
+
+            try{
+                Node variableNode = _xpathEvalCtx.readVariable(variable, part);
+                if (variableNode == null)
+                    throw new WrappedFaultException.JaxenUnresolvableException(
+                            new 
FaultException(variable.getOwner().constants.qnSelectionFailure, "Unknown 
variable " + localName));
+                if (variable.type instanceof OXsdTypeVarType && 
((OXsdTypeVarType)variable.type).simple) {
+                    String text = variableNode.getTextContent();
+                    try {
+                        return 
XSTypes.toJavaObject(((OXsdTypeVarType)variable.type).xsdType,
+                                text);
+                    } catch (Exception e) { }
+                    // Elegant way failed, trying brute force
+                    try {
+                        return Integer.valueOf(text);
+                    } catch (NumberFormatException e) { }
+                    try {
+                        return Double.valueOf(text);
+                    } catch (NumberFormatException e) { }
+                    return text;
+                } else {
+                    return variableNode;
+                }
+            }catch(FaultException e){
+                throw new WrappedFaultException.JaxenUnresolvableException(e);
+            }
         }
-      }catch(FaultException e){
-        throw new WrappedFaultException.JaxenUnresolvableException(e);
-      }
     }
-  }
 
-  /**
-   * bpws:getVariableData()
-   */
-  class BpelVariableDataFunction implements Function {
-    public Object call(Context context, List args)
+    /**
+     * bpws:getVariableData()
+     */
+    class BpelVariableDataFunction implements Function {
+        public Object call(Context context, List args)
                 throws FunctionCallException {
-      if (__log.isDebugEnabled()) {
-        __log.debug("call(context=" + context + " args=" + args + ")");
-      }
-
-      String varname  = (String) args.get(0);
-      String partname = args.size() > 1 ? (String) args.get(1) : null;
-      String xpathStr = args.size() > 2 ? (String)args.get(2) : null;
-
-      OXPath10Expression.OSigGetVariableData sig = 
_oxpath.resolveGetVariableDataSig(varname,partname,xpathStr);
-      if (sig == null) {
-        String msg = "InternalError: Attempt to use an unknown getVariableData 
signature: " + args;
-        if (__log.isFatalEnabled())
-          __log.fatal(msg);
-        throw new FunctionCallException(msg);
-      }
-
-      try {
-        Node ret = _xpathEvalCtx.readVariable(sig.variable, sig.part);
-        if (sig.location != null)
-          ret = _xpathEvalCtx.evaluateQuery(ret, sig.location);
+            if (__log.isDebugEnabled()) {
+                __log.debug("call(context=" + context + " args=" + args + ")");
+            }
+
+            String varname  = (String) args.get(0);
+            String partname = args.size() > 1 ? (String) args.get(1) : null;
+            String xpathStr = args.size() > 2 ? (String)args.get(2) : null;
+
+            OXPath10Expression.OSigGetVariableData sig = 
_oxpath.resolveGetVariableDataSig(varname,partname,xpathStr);
+            if (sig == null) {
+                String msg = "InternalError: Attempt to use an unknown 
getVariableData signature: " + args;
+                if (__log.isFatalEnabled())
+                    __log.fatal(msg);
+                throw new FunctionCallException(msg);
+            }
 
-        if (__log.isDebugEnabled()) {
-          __log.debug("bpws:getVariableData(" + args +  ")' = " + ret);
-        }
-
-        return ret;
-      } catch (FaultException e) {
-        __log.error("bpws:getVariableData(" + args + ") threw FaultException");
+            try {
+                Node ret = _xpathEvalCtx.readVariable(sig.variable, sig.part);
+                if (sig.location != null)
+                    ret = _xpathEvalCtx.evaluateQuery(ret, sig.location);
+
+                if (__log.isDebugEnabled()) {
+                    __log.debug("bpws:getVariableData(" + args +  ")' = " + 
ret);
+                }
+
+                return ret;
+            } catch (FaultException e) {
+                __log.error("bpws:getVariableData(" + args + ") threw 
FaultException");
 
-        throw new WrappedFaultException.JaxenFunctionException(e);
-      }
+                throw new WrappedFaultException.JaxenFunctionException(e);
+            }
+        }
     }
-  }
 
-  /**
-   * bpws:getVariableProperty()
-   */
-  class BpelVariablePropertyFunction implements Function {
-    public Object call(Context context, List args)
+    /**
+     * bpws:getVariableProperty()
+     */
+    class BpelVariablePropertyFunction implements Function {
+        public Object call(Context context, List args)
                 throws FunctionCallException {
-      if (args.size() != 2) {
-        throw new FunctionCallException("missing required arguments");
-      }
-
-      OScope.Variable var = _oxpath.vars.get(args.get(0));
-      OProcess.OProperty property = _oxpath.properties.get(args.get(1));
-
-      if (__log.isDebugEnabled()) {
-        __log.debug("function call:'bpws:getVariableProperty(" + var + ","
-                    + property + ")'");
-      }
-
-      try {
-        return _xpathEvalCtx.readMessageProperty(var, property);
-      } catch (FaultException e) {
-        throw new WrappedFaultException.JaxenFunctionException(e);
-      }
+            if (args.size() != 2) {
+                throw new FunctionCallException("missing required arguments");
+            }
+
+            OScope.Variable var = _oxpath.vars.get(args.get(0));
+            OProcess.OProperty property = _oxpath.properties.get(args.get(1));
+
+            if (__log.isDebugEnabled()) {
+                __log.debug("function call:'bpws:getVariableProperty(" + var + 
","
+                        + property + ")'");
+            }
+
+            try {
+                return _xpathEvalCtx.readMessageProperty(var, property);
+            } catch (FaultException e) {
+                throw new WrappedFaultException.JaxenFunctionException(e);
+            }
+        }
     }
-  }
 
-  class GetLinkStatusFunction implements Function {
-    public Object call(Context context, List args)
+    class GetLinkStatusFunction implements Function {
+        public Object call(Context context, List args)
                 throws FunctionCallException {
-      assert args.size() == 1;
+            assert args.size() == 1;
 
-      OLink olink = _oxpath.links.get(args.get(0));
+            OLink olink = _oxpath.links.get(args.get(0));
 
-      try {
-        return _xpathEvalCtx.isLinkActive(olink) ? Boolean.TRUE : 
Boolean.FALSE;
-      } catch (FaultException e) {
-        throw new WrappedFaultException.JaxenFunctionException(e);
-      }
+            try {
+                return _xpathEvalCtx.isLinkActive(olink) ? Boolean.TRUE : 
Boolean.FALSE;
+            } catch (FaultException e) {
+                throw new WrappedFaultException.JaxenFunctionException(e);
+            }
+        }
     }
-  }
 
-  class DoXslTransformFunction implements Function {
-    public Object call(Context context, List args) throws 
FunctionCallException {
-      assert args.size() >= 2;
-      assert args.size() % 2 == 0;
-      if (__log.isDebugEnabled()) {
-        __log.debug("call(context=" + context + " args=" + args + ")");
-      }
-      if(!(_oxpath instanceof OXPath10ExpressionBPEL20)) {
-        throw new IllegalStateException("XPath function bpws:doXslTransform 
not supported in " +
-                "BPEL 1.1!");
-      }
-
-      Element varElmt;
-      try {
-        if (args.get(1) instanceof List) {
-          List elmts = (List)args.get(1);
-          if (elmts.size() != 1) throw new 
WrappedFaultException.JaxenFunctionException(
-                  new 
FaultException(_oxpath.getOwner().constants.qnXsltInvalidSource,
-                  "Second parameter of the bpws:doXslTransform function MUST 
point to a single " +
-                  "element node."));
-          varElmt = (Element) elmts.get(0);
-        } else {
-          varElmt = (Element) args.get(1);
-        }
-      } catch (ClassCastException e) {
-        throw new WrappedFaultException.JaxenFunctionException(
-                  new 
FaultException(_oxpath.getOwner().constants.qnXsltInvalidSource,
-                  "Second parameter of the bpws:doXslTransform function MUST 
point to a single " +
-                  "element node."));
-      }
-
-      URI xslUri;
-      try {
-        xslUri = new URI((String) args.get(0));
-      } catch (URISyntaxException use) {
-        // Shouldn't happen, checked at compilation time
-        throw new FunctionCallException("First parameter of the 
bpws:doXslTransform isn't a valid URI!", use);
-      }
-      OXslSheet xslSheet = _oxpath.xslSheets.get(xslUri);
-      // Shouldn't happen, checked at compilation time
-      if (xslSheet == null) throw new FunctionCallException("Couldn't find the 
XSL sheet " + args.get(0)
-              + ", process compilation or deployment was probably 
incomplete!");
-
-      if (!(varElmt instanceof Element)) {
-        throw new WrappedFaultException.JaxenFunctionException(
-                new 
FaultException(_oxpath.getOwner().constants.qnXsltInvalidSource,
-                "Second parameter of the bpws:doXslTransform function MUST 
point to a single " +
-                "element node."));
-      }
-
-      HashMap<QName, Object> parametersMap = null;
-      if (args.size() > 2) {
-        parametersMap = new HashMap<QName, Object>();
-        for (int idx = 2; idx < args.size(); idx+=2) {
-          QName keyQName = _oxpath.namespaceCtx.derefQName((String) 
args.get(idx));
-          parametersMap.put(keyQName, args.get(idx + 1));
-        }
-      }
+    class DoXslTransformFunction implements Function {
+        public Object call(Context context, List args) throws 
FunctionCallException {
+            assert args.size() >= 2;
+            assert args.size() % 2 == 0;
+            if (__log.isDebugEnabled()) {
+                __log.debug("call(context=" + context + " args=" + args + ")");
+            }
+            if(!(_oxpath instanceof OXPath10ExpressionBPEL20)) {
+                throw new IllegalStateException("XPath function 
bpws:doXslTransform not supported in " +
+                        "BPEL 1.1!");
+            }
 
-      DOMSource source = new DOMSource(varElmt);
-      // Using a StreamResult as a DOMResult doesn't behaves properly when the 
result
-      // of the transformation is just a string.
-      StringWriter writerResult = new StringWriter();
-      StreamResult result = new StreamResult(writerResult);
-      XslRuntimeUriResolver resolver = new XslRuntimeUriResolver(_oxpath);
-      XslTransformHandler.getInstance().cacheXSLSheet(xslUri, 
xslSheet.sheetBody, resolver);
-      try {
-        XslTransformHandler.getInstance().transform(xslUri, source, result, 
parametersMap, resolver);
-      } catch (Exception e) {
-        throw new WrappedFaultException.JaxenFunctionException(
-                new 
FaultException(_oxpath.getOwner().constants.qnSubLanguageExecutionFault,
-                        e.toString()));
-      }
-      writerResult.flush();
-
-      String output = writerResult.toString();
-      // I'm not really proud of that but hey, it does the job and I don't 
think there's
-      // any other easy way.
-      if (output.startsWith("<?xml")) {
-        try {
-          return DOMUtils.stringToDOM(writerResult.toString());
-        } catch (SAXException e) {
-          throw new FunctionCallException(e);
-        } catch (IOException e) {
-          throw new FunctionCallException(e);
+            Element varElmt;
+            try {
+                if (args.get(1) instanceof List) {
+                    List elmts = (List)args.get(1);
+                    if (elmts.size() != 1) throw new 
WrappedFaultException.JaxenFunctionException(
+                            new 
FaultException(_oxpath.getOwner().constants.qnXsltInvalidSource,
+                                    "Second parameter of the 
bpws:doXslTransform function MUST point to a single " +
+                                            "element node."));
+                    varElmt = (Element) elmts.get(0);
+                } else {
+                    varElmt = (Element) args.get(1);
+                }
+            } catch (ClassCastException e) {
+                throw new WrappedFaultException.JaxenFunctionException(
+                        new 
FaultException(_oxpath.getOwner().constants.qnXsltInvalidSource,
+                                "Second parameter of the bpws:doXslTransform 
function MUST point to a single " +
+                                        "element node."));
+            }
+
+            URI xslUri;
+            try {
+                xslUri = new URI((String) args.get(0));
+            } catch (URISyntaxException use) {
+                // Shouldn't happen, checked at compilation time
+                throw new FunctionCallException("First parameter of the 
bpws:doXslTransform isn't a valid URI!", use);
+            }
+            OXslSheet xslSheet = _oxpath.xslSheets.get(xslUri);
+            // Shouldn't happen, checked at compilation time
+            if (xslSheet == null) throw new FunctionCallException("Couldn't 
find the XSL sheet " + args.get(0)
+                    + ", process compilation or deployment was probably 
incomplete!");
+
+            if (!(varElmt instanceof Element)) {
+                throw new WrappedFaultException.JaxenFunctionException(
+                        new 
FaultException(_oxpath.getOwner().constants.qnXsltInvalidSource,
+                                "Second parameter of the bpws:doXslTransform 
function MUST point to a single " +
+                                        "element node."));
+            }
+
+            HashMap<QName, Object> parametersMap = null;
+            if (args.size() > 2) {
+                parametersMap = new HashMap<QName, Object>();
+                for (int idx = 2; idx < args.size(); idx+=2) {
+                    QName keyQName = _oxpath.namespaceCtx.derefQName((String) 
args.get(idx));
+                    parametersMap.put(keyQName, args.get(idx + 1));
+                }
+            }
+
+            DOMSource source = new DOMSource(varElmt);
+            // Using a StreamResult as a DOMResult doesn't behaves properly 
when the result
+            // of the transformation is just a string.
+            StringWriter writerResult = new StringWriter();
+            StreamResult result = new StreamResult(writerResult);
+            XslRuntimeUriResolver resolver = new 
XslRuntimeUriResolver(_oxpath);
+            XslTransformHandler.getInstance().cacheXSLSheet(xslUri, 
xslSheet.sheetBody, resolver);
+            try {
+                XslTransformHandler.getInstance().transform(xslUri, source, 
result, parametersMap, resolver);
+            } catch (Exception e) {
+                throw new WrappedFaultException.JaxenFunctionException(
+                        new 
FaultException(_oxpath.getOwner().constants.qnSubLanguageExecutionFault,
+                                e.toString()));
+            }
+            writerResult.flush();
+
+            String output = writerResult.toString();
+            // I'm not really proud of that but hey, it does the job and I 
don't think there's
+            // any other easy way.
+            if (output.startsWith("<?xml")) {
+                try {
+                    return DOMUtils.stringToDOM(writerResult.toString());
+                } catch (SAXException e) {
+                    throw new FunctionCallException(e);
+                } catch (IOException e) {
+                    throw new FunctionCallException(e);
+                }
+            } else {
+                return output;
+            }
         }
-      } else {
-        return output;
-      }
     }
-  }
 
 }

Modified: 
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java?rev=431743&r1=431742&r2=431743&view=diff
==============================================================================
--- 
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
 (original)
+++ 
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ExprEvaluationContextImpl.java
 Tue Aug 15 17:05:01 2006
@@ -18,12 +18,16 @@
  */
 package org.apache.ode.bpel.runtime;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.common.FaultException;
 import org.apache.ode.bpel.explang.EvaluationContext;
-import org.apache.ode.bpel.o.*;
+import org.apache.ode.bpel.o.OExpression;
+import org.apache.ode.bpel.o.OLink;
+import org.apache.ode.bpel.o.OMessageVarType;
 import org.apache.ode.bpel.o.OMessageVarType.Part;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.o.OProcess;
+import org.apache.ode.bpel.o.OScope;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
@@ -35,83 +39,83 @@
  * variables, link statuses, and the like.
  */
 public class ExprEvaluationContextImpl implements EvaluationContext {
-  private static final Log __log = LogFactory
-      .getLog(ExprEvaluationContextImpl.class);
+    private static final Log __log = LogFactory
+            .getLog(ExprEvaluationContextImpl.class);
+
+    private BpelRuntimeContext _native;
+
+    private ScopeFrame _scopeInstance;
+
+    private Map<OLink, Boolean> _linkVals;
+
+    private Node _root;
+
+    public ExprEvaluationContextImpl(ScopeFrame scopeInstace,
+                                     BpelRuntimeContext ntv) {
+        _native = ntv;
+        _scopeInstance = scopeInstace;
+    }
+
+    public ExprEvaluationContextImpl(ScopeFrame scopeInstace,
+                                     BpelRuntimeContext ntv, Node root) {
+        this(scopeInstace, ntv);
+        _root = root;
+    }
+
+    public ExprEvaluationContextImpl(ScopeFrame scopeInstnce,
+                                     BpelRuntimeContext ntv, Map<OLink, 
Boolean> linkVals) {
+        this(scopeInstnce, ntv);
+        _linkVals = linkVals;
+    }
 
-  private BpelRuntimeContext _native;
+    public Node readVariable(OScope.Variable variable, OMessageVarType.Part 
part)
+            throws FaultException {
+        if (__log.isTraceEnabled())
+            __log.trace("readVariable(" + variable + "," + part + ")");
+
+        // TODO: check for null _scopeInstance
+
+        Node ret;
+        VariableInstance varInstance = _scopeInstance.resolve(variable);
+        if (varInstance == null) return null;
+        ret = _native.fetchVariableData(varInstance, part, false);
+        return ret;
+    }
 
-  private ScopeFrame _scopeInstance;
+    public Node evaluateQuery(Node root, OExpression expr) throws 
FaultException {
+        try {
+            return _native.getExpLangRuntime().evaluateNode(expr,
+                    new ExprEvaluationContextImpl(_scopeInstance, _native, 
root));
+        } catch (org.apache.ode.bpel.explang.EvaluationException e) {
+            throw new InvalidProcessException("Expression Failed: " + expr, e);
+        }
+    }
 
-  private Map<OLink, Boolean> _linkVals;
+    public String readMessageProperty(OScope.Variable variable,
+                                      OProcess.OProperty property) throws 
FaultException {
+        VariableInstance varInstance = _scopeInstance.resolve(variable);
+        return _native.readProperty(varInstance, property);
+    }
 
-  private Node _root;
-
-  public ExprEvaluationContextImpl(ScopeFrame scopeInstace,
-      BpelRuntimeContext ntv) {
-    _native = ntv;
-    _scopeInstance = scopeInstace;
-  }
-
-  public ExprEvaluationContextImpl(ScopeFrame scopeInstace,
-      BpelRuntimeContext ntv, Node root) {
-    this(scopeInstace, ntv);
-    _root = root;
-  }
-
-  public ExprEvaluationContextImpl(ScopeFrame scopeInstnce,
-      BpelRuntimeContext ntv, Map<OLink, Boolean> linkVals) {
-    this(scopeInstnce, ntv);
-    _linkVals = linkVals;
-  }
-
-  public Node readVariable(OScope.Variable variable, OMessageVarType.Part part)
-      throws FaultException {
-    if (__log.isTraceEnabled())
-      __log.trace("readVariable(" + variable + "," + part + ")");
-
-    // TODO: check for null _scopeInstance
-
-    Node ret;
-    // TODO: catch resolveVariable(..) == null
-    VariableInstance varInstance = _scopeInstance.resolve(variable);
-    ret = _native.fetchVariableData(varInstance, part, false);
-    return ret;
-  }
-
-  public Node evaluateQuery(Node root, OExpression expr) throws FaultException 
{
-    try {
-      return _native.getExpLangRuntime().evaluateNode(expr,
-          new ExprEvaluationContextImpl(_scopeInstance, _native, root));
-    } catch (org.apache.ode.bpel.explang.EvaluationException e) {
-      throw new InvalidProcessException("Expression Failed: " + expr, e);
-    }
-  }
-
-  public String readMessageProperty(OScope.Variable variable,
-      OProcess.OProperty property) throws FaultException {
-    VariableInstance varInstance = _scopeInstance.resolve(variable);
-    return _native.readProperty(varInstance, property);
-  }
-
-  public boolean isLinkActive(OLink olink) throws FaultException {
-    return _linkVals.get(olink);
-  }
-
-  public String toString() {
-    return "{ExprEvaluationContextImpl scopeInstance=" + _scopeInstance
-        + ", activeLinks=" + _linkVals + "}";
-  }
-
-  public Node getRootNode() {
-    return _root;
-  }
-
-  public Node getPartData(Element message, Part part) throws FaultException {
-    return _native.getPartData(message, part);
-  }
-
-  public Long getProcessId() {
-    return _native.getPid();
-  }
+    public boolean isLinkActive(OLink olink) throws FaultException {
+        return _linkVals.get(olink);
+    }
+
+    public String toString() {
+        return "{ExprEvaluationContextImpl scopeInstance=" + _scopeInstance
+                + ", activeLinks=" + _linkVals + "}";
+    }
+
+    public Node getRootNode() {
+        return _root;
+    }
+
+    public Node getPartData(Element message, Part part) throws FaultException {
+        return _native.getPartData(message, part);
+    }
+
+    public Long getProcessId() {
+        return _native.getPid();
+    }
 
 }

Modified: 
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java?rev=431743&r1=431742&r2=431743&view=diff
==============================================================================
--- 
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java
 (original)
+++ 
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java
 Tue Aug 15 17:05:01 2006
@@ -32,106 +32,108 @@
  * N-tuple representing a scope "frame" (as in stack frame).
  */
 class ScopeFrame implements Serializable {
-  private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
-  /** The compiled scope representation. */
-  final OScope oscope;
+    /** The compiled scope representation. */
+    final OScope oscope;
 
-  /** The parent scope frame. */
-  final ScopeFrame parent;
+    /** The parent scope frame. */
+    final ScopeFrame parent;
 
-  /** Database scope instance identifier. */
-  final Long scopeInstanceId;
-
-  Set<CompensationHandler> availableCompensations;
-
-  /** The fault context for this scope. */
-  private FaultData _faultData;
-
-  /** Constructor used to create "fault" scopes. */
-  ScopeFrame( OScope scopeDef,
-              Long scopeInstanceId,
-              ScopeFrame parent,
-              Set<CompensationHandler> visibleCompensationHandlers,
-              FaultData fault) {
-    this(scopeDef,scopeInstanceId,parent,visibleCompensationHandlers);
-    _faultData = fault;
-
-  }
-
-  public ScopeFrame( OScope scopeDef,
-                     Long scopeInstanceId,
-                     ScopeFrame parent,
-                     Set<CompensationHandler> visibleCompensationHandlers) {
-    this.oscope = scopeDef;
-    this.scopeInstanceId = scopeInstanceId;
-    this.parent = parent;
-    this.availableCompensations = visibleCompensationHandlers;
-  }
-
-
-  public ScopeFrame find(OScope scope) {
-    if (oscope.name.equals(scope.name)) {
-      return this;
-    }
-
-    return (parent != null)
-           ? parent.find(scope)
-           : null;
-  }
-
-  public VariableInstance resolve(OScope.Variable variable) {
-    return new VariableInstance(find(variable.declaringScope).scopeInstanceId, 
variable);
-  }
-
-  public CorrelationSetInstance resolve(OScope.CorrelationSet cset) {
-    return new 
CorrelationSetInstance(find(cset.declaringScope).scopeInstanceId, cset);
-  }
-
-  public PartnerLinkInstance resolve(OPartnerLink partnerLink) {
-    return new 
PartnerLinkInstance(find(partnerLink.declaringScope).scopeInstanceId, 
partnerLink);
-  }
-
-  public String toString() {
-    StringBuffer buf= new StringBuffer("{ScopeFrame: o=");
-    buf.append(oscope);
-    buf.append(", id=");
-    buf.append(scopeInstanceId);
-    if (availableCompensations != null) {
-      buf.append(", avComps=");
-      buf.append(availableCompensations);
-    }
-    if (_faultData != null) {
-      buf.append(", fault=");
-      buf.append(_faultData);
-    }
-    buf.append('}');
-    return buf.toString();
-  }
-
-  public FaultData getFault() {
-    if (_faultData != null)
-      return _faultData;
-    if (parent != null)
-      return parent.getFault();
-    return null;
-  }
-
-  public void fillEventInfo(ScopeEvent event) {
-    ScopeFrame currentScope = this;
-    ArrayList<String> parentNames = new ArrayList<String>();
-    while (currentScope != null) {
-      parentNames.add(currentScope.oscope.name);
-      currentScope = currentScope.parent;
-    }
-    event.setParentScopesNames(parentNames);
-    if (parent != null)
-      event.setParentScopeId(parent.scopeInstanceId);
-    event.setScopeId(scopeInstanceId);
-    event.setScopeName(oscope.name);
-    event.setScopeDeclerationId(oscope.getId());
-    if (event.getLineNo() == -1 && oscope.debugInfo !=  null)
-      event.setLineNo(oscope.debugInfo.startLine);
-  }
+    /** Database scope instance identifier. */
+    final Long scopeInstanceId;
+
+    Set<CompensationHandler> availableCompensations;
+
+    /** The fault context for this scope. */
+    private FaultData _faultData;
+
+    /** Constructor used to create "fault" scopes. */
+    ScopeFrame( OScope scopeDef,
+                Long scopeInstanceId,
+                ScopeFrame parent,
+                Set<CompensationHandler> visibleCompensationHandlers,
+                FaultData fault) {
+        this(scopeDef,scopeInstanceId,parent,visibleCompensationHandlers);
+        _faultData = fault;
+
+    }
+
+    public ScopeFrame( OScope scopeDef,
+                       Long scopeInstanceId,
+                       ScopeFrame parent,
+                       Set<CompensationHandler> visibleCompensationHandlers) {
+        this.oscope = scopeDef;
+        this.scopeInstanceId = scopeInstanceId;
+        this.parent = parent;
+        this.availableCompensations = visibleCompensationHandlers;
+    }
+
+
+    public ScopeFrame find(OScope scope) {
+        if (oscope.name.equals(scope.name)) {
+            return this;
+        }
+
+        return (parent != null)
+                ? parent.find(scope)
+                : null;
+    }
+
+    public VariableInstance resolve(OScope.Variable variable) {
+        ScopeFrame scopeFrame = find(variable.declaringScope);
+        if (scopeFrame == null) return null;
+        return new VariableInstance(scopeFrame.scopeInstanceId, variable);
+    }
+
+    public CorrelationSetInstance resolve(OScope.CorrelationSet cset) {
+        return new 
CorrelationSetInstance(find(cset.declaringScope).scopeInstanceId, cset);
+    }
+
+    public PartnerLinkInstance resolve(OPartnerLink partnerLink) {
+        return new 
PartnerLinkInstance(find(partnerLink.declaringScope).scopeInstanceId, 
partnerLink);
+    }
+
+    public String toString() {
+        StringBuffer buf= new StringBuffer("{ScopeFrame: o=");
+        buf.append(oscope);
+        buf.append(", id=");
+        buf.append(scopeInstanceId);
+        if (availableCompensations != null) {
+            buf.append(", avComps=");
+            buf.append(availableCompensations);
+        }
+        if (_faultData != null) {
+            buf.append(", fault=");
+            buf.append(_faultData);
+        }
+        buf.append('}');
+        return buf.toString();
+    }
+
+    public FaultData getFault() {
+        if (_faultData != null)
+            return _faultData;
+        if (parent != null)
+            return parent.getFault();
+        return null;
+    }
+
+    public void fillEventInfo(ScopeEvent event) {
+        ScopeFrame currentScope = this;
+        ArrayList<String> parentNames = new ArrayList<String>();
+        while (currentScope != null) {
+            parentNames.add(currentScope.oscope.name);
+            currentScope = currentScope.parent;
+        }
+        event.setParentScopesNames(parentNames);
+        if (parent != null)
+            event.setParentScopeId(parent.scopeInstanceId);
+        event.setScopeId(scopeInstanceId);
+        event.setScopeName(oscope.name);
+        event.setScopeDeclerationId(oscope.getId());
+        if (event.getLineNo() == -1 && oscope.debugInfo !=  null)
+            event.setLineNo(oscope.debugInfo.startLine);
+    }
 }
   


Reply via email to