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);
+ }
}