Author: karthick
Date: Wed Oct 29 14:14:21 2008
New Revision: 709010
URL: http://svn.apache.org/viewvc?rev=709010&view=rev
Log:
This patch resolves the issue raised in
https://issues.apache.org/jira/browse/ODE-371.
Added:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionModifier.java
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/TestInsertMissingData.bpel
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/deploy.xml
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/test1.properties
Modified:
ode/branches/APACHE_ODE_1.X/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java
ode/branches/APACHE_ODE_1.X/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Copy.java
ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java
ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OLValueExpression.java
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
ode/branches/APACHE_ODE_1.X/bpel-schemas/src/main/resources/ws-bpel_abstract_common_base.xsd
ode/branches/APACHE_ODE_1.X/bpel-schemas/src/main/resources/ws-bpel_executable.xsd
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/DataHandling20Test.java
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
Modified:
ode/branches/APACHE_ODE_1.X/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java
Wed Oct 29 14:14:21 2008
@@ -66,6 +66,7 @@
ocopy.keepSrcElementName = scopy.isKeepSrcElement();
ocopy.ignoreMissingFromData = scopy.isIgnoreMissingFromData();
ocopy.ignoreUninitializedFromVariable =
scopy.isIgnoreUninitializedFromVariable();
+ ocopy.insertMissingToData = scopy.isInsertMissingToData();
ocopy.debugInfo = new DebugInfo(_context.getSourceLocation(),
scopy.getLineNo(),
source.getExtensibilityElements());
try {
Modified:
ode/branches/APACHE_ODE_1.X/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Copy.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Copy.java?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Copy.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Copy.java
Wed Oct 29 14:14:21 2008
@@ -60,4 +60,8 @@
public boolean isIgnoreUninitializedFromVariable() {
return getAttribute("ignoreUninitializedFromVariable",
"no").equals("yes");
}
+
+ public boolean isInsertMissingToData() {
+ return getAttribute("insertMissingToData", "no").equals("yes");
+ }
}
Modified:
ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java
Wed Oct 29 14:14:21 2008
@@ -53,6 +53,7 @@
public boolean keepSrcElementName;
public boolean ignoreMissingFromData;
public boolean ignoreUninitializedFromVariable;
+ public boolean insertMissingToData;
public Copy(OProcess owner) {
super(owner);
@@ -133,6 +134,12 @@
public Variable getVariable() {
return expression.getVariable();
}
+ public boolean isInsertMissingToData() {
+ return expression.insertMissingData;
+ }
+ public void setInsertMissingToData(boolean insertMissingToData) {
+ expression.insertMissingData = insertMissingToData;
+ }
}
public static class Expression extends OBase implements RValue {
Modified:
ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OLValueExpression.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OLValueExpression.java?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OLValueExpression.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-obj/src/main/java/org/apache/ode/bpel/o/OLValueExpression.java
Wed Oct 29 14:14:21 2008
@@ -23,6 +23,14 @@
private static final long serialVersionUID = 1L;
/**
+ * Indicates whether the expression, if it is a simple path, must
+ * be created if missing By a simple path, we mean a path expression whose
+ * steps are fully-qualified names separated by slashes. In case any of
+ * the steps in the simple path is non-existent, then we must create it.
+ */
+ public boolean insertMissingData;
+
+ /**
* @param owner
*/
public OLValueExpression(OProcess owner) {
Modified:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
Wed Oct 29 14:14:21 2008
@@ -31,6 +31,7 @@
import java.util.Map;
import javax.xml.namespace.QName;
+import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPathFunction;
@@ -925,12 +926,20 @@
}
}
}
- Element clonedElmt = (Element) parentElmt.cloneNode(true);
+ final Element clonedElmt = (Element) parentElmt.cloneNode(true);
children = clonedElmt.getChildNodes();
for (int target = 0; target < positions.length; target++) {
Element deleteElmt = (Element)
children.item(positions[target]);
clonedElmt.removeChild(deleteElmt);
}
+ // Saxon doesn't like clones with no children, so I'll oblige
+ if (clonedElmt.getChildNodes().getLength() == 0) {
+ try {
+
clonedElmt.appendChild(DOMUtils.toDOMDocument(parentElmt).createTextNode(""));
+ } catch (TransformerException te) {
+ throw new XPathFunctionException(te);
+ }
+ }
return clonedElmt;
}
}
Added:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionModifier.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionModifier.java?rev=709010&view=auto
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionModifier.java
(added)
+++
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionModifier.java
Wed Oct 29 14:14:21 2008
@@ -0,0 +1,198 @@
+package org.apache.ode.bpel.elang.xpath20.runtime;
+
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+import javax.xml.transform.TransformerException;
+import javax.xml.xpath.XPathExpression;
+
+import net.sf.saxon.expr.AxisExpression;
+import net.sf.saxon.expr.Expression;
+import net.sf.saxon.expr.ItemChecker;
+import net.sf.saxon.expr.PathExpression;
+import net.sf.saxon.expr.VariableReference;
+import net.sf.saxon.om.Axis;
+import net.sf.saxon.om.NamePool;
+import net.sf.saxon.pattern.NameTest;
+import net.sf.saxon.pattern.NodeKindTest;
+import net.sf.saxon.pattern.NodeTest;
+import net.sf.saxon.xpath.XPathExpressionImpl;
+
+import org.apache.ode.utils.DOMUtils;
+import org.apache.ode.utils.NSContext;
+import org.w3c.dom.Attr;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+
+/**
+ * A helper utility that modifies XPath Expression in-place. This is meant
+ * to be reusable across the XPath and XQuery runtimes.
+ */
+public class XPath20ExpressionModifier {
+ private NSContext contextUris;
+ private NamePool namePool;
+
+ /**
+ * Creates a new XPath20ExpressionModifier object.
+ *
+ * @param contextUris
+ * @param namePool
+ */
+ public XPath20ExpressionModifier(NSContext contextUris, NamePool namePool)
{
+ this.contextUris = contextUris;
+ this.namePool = namePool;
+ }
+
+ /**
+ * Insert nodes into the specified XPath expression wherever
+ * required To be precise, an node is added to its parent if:
+ * a) the node is an element...
+ * b) that corresponds to an step...
+ * c) that has a child axis...
+ * d) whose parent had no children with its name...
+ * e) and all preceding steps are element name tests.
+ *
+ * @param xpathExpr
+ * @param namePool
+ *
+ * @throws DOMException
+ * @throws TransformerException
+ */
+ @SuppressWarnings("unchecked")
+ public void insertMissingData(XPathExpression xpathExpr, Node contextNode)
+ throws DOMException, TransformerException {
+ if ((contextNode == null) || !(contextNode instanceof Element) ||
+ !(xpathExpr instanceof XPathExpressionImpl)) {
+ return;
+ }
+
+ Expression expression = ((XPathExpressionImpl)
xpathExpr).getInternalExpression();
+ Iterator<Expression> subExpressions = (Iterator<Expression>)
expression.iterateSubExpressions();
+
+ if (!subExpressions.hasNext()) {
+ return;
+ }
+
+ Expression subExpr = (Expression) subExpressions.next();
+
+ if (!(subExpr instanceof PathExpression)) {
+ return;
+ }
+
+ Document document = DOMUtils.toDOMDocument(contextNode);
+ PathExpression pathExpr = (PathExpression) subExpr;
+ Expression step = pathExpr.getFirstStep();
+
+ while (step != null) {
+ if (step instanceof AxisExpression) {
+ AxisExpression axisExpr = (AxisExpression) step;
+
+ NodeTest nodeTest = axisExpr.getNodeTest();
+
+ if (!(nodeTest instanceof NameTest)) {
+ break;
+ }
+
+ NameTest nameTest = (NameTest) nodeTest;
+
+ QName childName = getQualifiedName(nameTest.getFingerprint(),
+ namePool, contextUris);
+
+ if (Axis.CHILD == axisExpr.getAxis()) {
+ if (NodeKindTest.ELEMENT.getNodeKindMask() !=
nameTest.getNodeKindMask()) {
+ break;
+ }
+
+ NodeList children = ((Element)
contextNode).getElementsByTagNameNS(childName.getNamespaceURI(),
+ childName.getLocalPart());
+ if ((children == null) || (children.getLength() == 0)) {
+ Node child =
document.createElementNS(childName.getNamespaceURI(),
+ DOMUtils.getQualifiedName(childName));
+ contextNode.appendChild(child);
+ contextNode = child;
+ } else if (children.getLength() == 1) {
+ contextNode = children.item(0);
+ } else {
+ break;
+ }
+ } else if (Axis.ATTRIBUTE == axisExpr.getAxis()) {
+ if (NodeKindTest.ATTRIBUTE.getNodeKindMask() !=
nameTest.getNodeKindMask()) {
+ break;
+ }
+
+ Attr attribute = ((Element)
contextNode).getAttributeNodeNS(childName.getNamespaceURI(),
childName.getLocalPart());
+ if (attribute == null) {
+ attribute =
document.createAttributeNS(childName.getNamespaceURI(),
childName.getLocalPart());
+ ((Element) contextNode).setAttributeNode(attribute);
+ contextNode = attribute;
+ } else {
+ break;
+ }
+
+ } else {
+ break;
+ }
+
+
+ } else if (step instanceof ItemChecker) {
+ ItemChecker itemChecker = (ItemChecker) step;
+ Expression baseExpr = itemChecker.getBaseExpression();
+
+ if (!(baseExpr instanceof VariableReference)) {
+ break;
+ }
+ } else {
+ break;
+ }
+
+ if (pathExpr != null) {
+ Expression remainingSteps = pathExpr.getRemainingSteps();
+
+ if (remainingSteps instanceof PathExpression) {
+ pathExpr = (PathExpression) remainingSteps;
+ step = pathExpr.getFirstStep();
+ } else if (remainingSteps instanceof AxisExpression) {
+ pathExpr = null;
+ step = (AxisExpression) remainingSteps;
+ }
+ } else {
+ break;
+ }
+ }
+ }
+
+ /**
+ * Create the QName by running the given finger print against the
+ * given context
+ *
+ * @param fingerprint
+ * @param namePool
+ * @param nsContext
+ *
+ * @return The QName corresponding to the finger print
+ */
+ private QName getQualifiedName(int fingerprint, NamePool namePool,
+ NSContext nsContext) {
+ String localName = namePool.getLocalName(fingerprint);
+ String prefix = namePool.getPrefix(fingerprint);
+ String uri = namePool.getURI(fingerprint);
+
+ // Unfortunately, NSContext.getPrefix(String URI) doesn't always work
+ // So, we need to find the prefix for the URI the hard way
+ if ((prefix == null) || "".equals(prefix)) {
+ for (String nsPrefix : nsContext.getPrefixes()) {
+ String nsUri = nsContext.getNamespaceURI(nsPrefix);
+
+ if (nsUri.equals(uri)) {
+ prefix = nsPrefix;
+ }
+ }
+ }
+
+ return new QName(uri, localName, prefix);
+ }
+}
Modified:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
Wed Oct 29 14:14:21 2008
@@ -18,20 +18,30 @@
*/
package org.apache.ode.bpel.elang.xpath20.runtime;
-import net.sf.saxon.dom.DocumentWrapper;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
import net.sf.saxon.om.NamespaceConstant;
-import net.sf.saxon.om.NodeInfo;
import net.sf.saxon.trans.DynamicError;
import net.sf.saxon.value.DurationValue;
-import net.sf.saxon.xpath.XPathEvaluator;
import net.sf.saxon.xpath.XPathFactoryImpl;
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.xpath20.runtime.JaxpFunctionResolver;
-import org.apache.ode.bpel.elang.xpath20.runtime.JaxpVariableResolver;
import org.apache.ode.bpel.elang.xpath20.compiler.WrappedResolverException;
import org.apache.ode.bpel.elang.xpath20.o.OXPath20ExpressionBPEL20;
import org.apache.ode.bpel.explang.ConfigurationException;
@@ -39,23 +49,15 @@
import org.apache.ode.bpel.explang.EvaluationException;
import org.apache.ode.bpel.explang.ExpressionLanguageRuntime;
import org.apache.ode.bpel.o.OExpression;
-import org.apache.ode.bpel.o.OScope;
import org.apache.ode.utils.DOMUtils;
import org.apache.ode.utils.ISO8601DateParser;
import org.apache.ode.utils.xsd.Duration;
import org.apache.ode.utils.xsl.XslTransformHandler;
-import org.w3c.dom.*;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
-
-import java.util.*;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
/**
* XPath 2.0 Expression Language run-time subsytem.
@@ -232,7 +234,11 @@
xpe.setNamespaceContext(oxpath20.namespaceCtx);
XPathExpression expr =
xpe.compile(((OXPath10Expression)cexp).xpath);
Node contextNode = ctx.getRootNode() == null ?
DOMUtils.newDocument() : ctx.getRootNode();
-
+ // Create step nodes in XPath in case it is incompletely
instantiated
+ if (oxpath20.insertMissingData) {
+ XPath20ExpressionModifier modifier = new
XPath20ExpressionModifier(oxpath20.namespaceCtx, ((XPathFactoryImpl)
xpf).getConfiguration().getNamePool());
+ modifier.insertMissingData(expr, ctx.getRootNode());
+ }
Object evalResult = expr.evaluate(contextNode, type);
if (evalResult != null && __log.isDebugEnabled()) {
__log.debug("Expression " + cexp.toString() + " generated
result " + evalResult
@@ -259,6 +265,5 @@
__log.debug("Could not evaluate expression because of ", t);
throw new EvaluationException("Error while executing an XPath
expression: ", t);
}
-
}
}
Modified:
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
Wed Oct 29 14:14:21 2008
@@ -388,6 +388,7 @@
lvalue));
} else if (ocopy.to instanceof OAssign.LValueExpression) {
LValueExpression lexpr = (LValueExpression) ocopy.to;
+ lexpr.setInsertMissingToData(ocopy.insertMissingToData);
lvaluePtr = evalQuery(lvalue, null, lexpr.expression,
new EvaluationContextProxy(lexpr.getVariable(),
lvalue));
if (__log.isDebugEnabled())
@@ -630,14 +631,14 @@
private Node _rootNode;
private EvaluationContext _ctx;
+
private EvaluationContextProxy(Variable var, Node varNode) {
_var = var;
_varNode = varNode;
_ctx = getEvaluationContext();
-
}
-
+
public Node readVariable(OScope.Variable variable,
OMessageVarType.Part part) throws FaultException {
if (variable.name.equals(_var.name)) {
if (part == null) return _varNode;
Modified:
ode/branches/APACHE_ODE_1.X/bpel-schemas/src/main/resources/ws-bpel_abstract_common_base.xsd
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-schemas/src/main/resources/ws-bpel_abstract_common_base.xsd?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-schemas/src/main/resources/ws-bpel_abstract_common_base.xsd
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-schemas/src/main/resources/ws-bpel_abstract_common_base.xsd
Wed Oct 29 14:14:21 2008
@@ -590,7 +590,8 @@
</xsd:sequence>
<xsd:attribute name="keepSrcElementName"
type="tBoolean" use="optional" default="no"/>
<xsd:attribute name="ignoreMissingFromData"
type="tBoolean" use="optional" default="no"/>
- <xsd:attribute name="ignoreUninitializedFromVariable" type="tBoolean"
use="optional" default="no"/>
+ <xsd:attribute name="ignoreUninitializedFromVariable"
type="tBoolean" use="optional" default="no"/>
+ <xsd:attribute name="insertMissingToData" type="tBoolean"
use="optional" default="no"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
Modified:
ode/branches/APACHE_ODE_1.X/bpel-schemas/src/main/resources/ws-bpel_executable.xsd
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-schemas/src/main/resources/ws-bpel_executable.xsd?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-schemas/src/main/resources/ws-bpel_executable.xsd
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-schemas/src/main/resources/ws-bpel_executable.xsd
Wed Oct 29 14:14:21 2008
@@ -659,6 +659,8 @@
</xsd:sequence>
<xsd:attribute name="keepSrcElementName"
type="tBoolean" use="optional" default="no"/>
<xsd:attribute name="ignoreMissingFromData"
type="tBoolean" use="optional" default="no"/>
+ <xsd:attribute name="ignoreUninitializedFromVariable"
type="tBoolean" use="optional" default="no"/>
+ <xsd:attribute name="insertMissingToData" type="tBoolean"
use="optional" default="no"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
@@ -1222,4 +1224,4 @@
</xsd:restriction>
</xsd:simpleType>
-</xsd:schema>
\ No newline at end of file
+</xsd:schema>
Modified:
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/DataHandling20Test.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/DataHandling20Test.java?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/DataHandling20Test.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/java/org/apache/ode/test/DataHandling20Test.java
Wed Oct 29 14:14:21 2008
@@ -18,7 +18,6 @@
*/
package org.apache.ode.test;
-import org.junit.Ignore;
import org.junit.Test;
public class DataHandling20Test extends BPELTestAbstract {
@@ -79,4 +78,7 @@
@Test public void testXQueryExpression() throws Throwable {
go("/bpel/2.0/TestXQueryExpression");
}
+ @Test public void testInsertMissingData() throws Throwable {
+ go("/bpel/2.0/TestInsertMissingData");
+ }
}
Added:
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/TestInsertMissingData.bpel
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/TestInsertMissingData.bpel?rev=709010&view=auto
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/TestInsertMissingData.bpel
(added)
+++
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/TestInsertMissingData.bpel
Wed Oct 29 14:14:21 2008
@@ -0,0 +1,105 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+<process xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://docs.oasis-open.org/wsbpel/2.0/process/executable
../../../../../../../bpel-schemas/src/main/resources/wsbpel_executable.xsd"
+ xmlns:tns="http://ode/bpel/unit-test/TestInsertMissingData"
+ xmlns:prb="http://ode/bpel/unit-test/ProbeService.wsdl"
+ xmlns:types="http://ode/bpel/unit-test/TestInsertMissingData.wsdl.types"
+ xmlns:foo="http://ode/bpel/unit-test/TestInsertMissingData.wsdl.types"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:wns="http://ode/bpel/unit-test/TestInsertMissingData.wsdl"
+ xmlns:ode="http://www.apache.org/ode/type/extension"
+ xmlns:fn="http://www.w3.org/2005/xpath-functions"
+ xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
+ targetNamespace="http://ode/bpel/unit-test/TestInsertMissingData"
+ name="TestInsertMissingData"
+ queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
+ expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
+ suppressJoinFailure="yes">
+
+ <import location="TestInsertMissingData.wsdl"
+ namespace="http://ode/bpel/unit-test/TestInsertMissingData.wsdl"
+ importType="http://schemas.xmlsoap.org/wsdl/" />
+ <import location="../ProbeService/probeService.wsdl"
+ namespace="http://ode/bpel/unit-test/ProbeService.wsdl"
+ importType="http://schemas.xmlsoap.org/wsdl/"/>
+
+ <partnerLinks>
+ <partnerLink name="request"
partnerLinkType="wns:TestInsertMissingDataRequest"
myRole="TestInsertMissingDataService"/>
+ </partnerLinks>
+ <variables>
+ <variable name="request" messageType="wns:requestMessage"/>
+ <variable name="testType" element="types:aTestMessage"/>
+ <variable name="reply" messageType="wns:replyMessage"/>
+ </variables>
+ <sequence>
+ <receive name="receive1" partnerLink="request"
portType="wns:TestInsertMissingDataPT" operation="request" variable="request"
createInstance="yes"/>
+
+ <!-- test cases for ignore missing to data -->
+ <assign name="assign1">
+ <copy insertMissingToData="yes">
+
<from>$request.requestMessageData/typeIndicators/types:indicatorTwo</from>
+ <to>$testType/@xsi:nil</to>
+ </copy>
+ <copy insertMissingToData="yes">
+
<from>$request.requestMessageData/typeIndicators/types:indicatorTwo</from>
+
<to>$testType/typeIndicators/types:indicatorTwo</to>
+ </copy>
+ <copy>
+
<from>ode:delete($testType/typeIndicators)</from>
+ <to>$testType</to>
+ </copy>
+ <copy insertMissingToData="yes">
+
<from>$request.requestMessageData/typeIndicators/types:indicatorTwo</from>
+
<to>$testType/child::typeIndicators/types:indicatorTwo</to>
+ </copy>
+ <copy>
+
<from>ode:delete($testType/typeIndicators)</from>
+ <to>$testType</to>
+ </copy>
+ <copy insertMissingToData="yes">
+
<from>$request.requestMessageData/typeIndicators/types:indicatorTwo</from>
+
<to>$testType/child::typeIndicators/child::types:indicatorTwo</to>
+ </copy>
+ <copy>
+
<from>ode:delete($testType/typeIndicators)</from>
+ <to>$testType</to>
+ </copy>
+ <copy insertMissingToData="yes">
+
<from>$request.requestMessageData/typeIndicators/types:indicatorTwo</from>
+ <to
variable="testType">/typeIndicators/child::types:indicatorTwo</to>
+ </copy>
+ </assign>
+
+ <assign name="assign3">
+ <copy>
+
<from>$request.requestMessageData/requestID</from>
+ <to variable="reply" part="replyID"/>
+ </copy>
+ <copy>
+ <from>
+ <literal><![CDATA[pass]]></literal>
+ </from>
+ <to>$reply.replyText</to>
+ </copy>
+ </assign>
+
+ <reply name="reply" partnerLink="request"
portType="wns:TestInsertMissingDataPT" operation="request" variable="reply"/>
+ </sequence>
+ </process>
Added:
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/deploy.xml
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/deploy.xml?rev=709010&view=auto
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/deploy.xml
(added)
+++
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/deploy.xml
Wed Oct 29 14:14:21 2008
@@ -0,0 +1,31 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
+<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03"
+ xmlns:pns="http://ode/bpel/unit-test/TestInsertMissingData"
+ xmlns:wns="http://ode/bpel/unit-test/TestInsertMissingData.wsdl">
+
+
+ <process name="pns:TestInsertMissingData">
+ <active>true</active>
+ <provide partnerLink="request">
+ <service name="wns:TestInsertMissingDataService"
port="wns:TestInsertMissingDataPort"/>
+ </provide>
+ </process>
+</deploy>
Added:
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/test1.properties
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/test1.properties?rev=709010&view=auto
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/test1.properties
(added)
+++
ode/branches/APACHE_ODE_1.X/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/test1.properties
Wed Oct 29 14:14:21 2008
@@ -0,0 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+namespace=http://ode/bpel/unit-test/TestInsertMissingData.wsdl
+service=TestInsertMissingDataService
+operation=request
+request1=<message><requestMessageData><ens:aTestMessage
xmlns:ens="http://ode/bpel/unit-test/TestInsertMissingData.wsdl.types"><requestID>Start
InsertMissingData</requestID><requestText>Event
InsertMissingData</requestText><typeIndicators
xmlns:foo="http://ode/bpel/unit-test/TestInsertMissingData.wsdl.types"><foo:indicatorOne>fail</foo:indicatorOne><foo:indicatorTwo>fail</foo:indicatorTwo></typeIndicators></ens:aTestMessage></requestMessageData></message>
+response1=.*<replyID>Start
InsertMissingData</replyID><replyText>pass</replyText>.*
Modified:
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DOMUtils.java?rev=709010&r1=709009&r2=709010&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
(original)
+++
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
Wed Oct 29 14:14:21 2008
@@ -1056,4 +1056,9 @@
public static Document getDocument(Node contextNode) {
return (contextNode == null) ? DOMUtils.newDocument() :
contextNode.getOwnerDocument();
}
-}
\ No newline at end of file
+
+ public static String getQualifiedName(QName qName) {
+ String prefix = qName.getPrefix(), localPart = qName.getLocalPart();
+ return (prefix == null || "".equals(prefix)) ? localPart : (prefix +
":" + localPart);
+ }
+}