Author: gpb
Date: Wed Dec 7 16:26:56 2011
New Revision: 1211512
URL: http://svn.apache.org/viewvc?rev=1211512&view=rev
Log:
ODE-672 - fix insertMissingToData when applied to message part.
Modified:
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionModifier.java
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java
ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntimeTest.java
ode/trunk/bpel-runtime/src/test/resources/xpath20/variables.xml
Modified:
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionModifier.java
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionModifier.java?rev=1211512&r1=1211511&r2=1211512&view=diff
==============================================================================
---
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionModifier.java
(original)
+++
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionModifier.java
Wed Dec 7 16:26:56 2011
@@ -102,7 +102,7 @@ public class XPath20ExpressionModifier {
return;
}
- Document document = DOMUtils.toDOMDocument(contextNode);
+ Document document = contextNode.getOwnerDocument();
PathExpression pathExpr = (PathExpression) subExpr;
Expression step = pathExpr.getFirstStep();
Modified:
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java?rev=1211512&r1=1211511&r2=1211512&view=diff
==============================================================================
---
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
(original)
+++
ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
Wed Dec 7 16:26:56 2011
@@ -250,7 +250,28 @@ public class XPath20ExpressionRuntime im
// 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());
+
+ Node temp = ctx.getRootNode();
+ if (temp.getLocalName().equals("message") &&
temp.getNamespaceURI() == null) {
+ int startind=xpath.indexOf('.');
+ int endind=xpath.indexOf('/');
+ if (startind != -1) {
+ String part=null;
+ if (endind != -1) {
+ part = xpath.substring(startind+1,
endind);
+ } else {
+ part = xpath.substring(startind+1);
+ }
+ Element
partElem=DOMUtils.findChildByName((Element)temp,
+ new
QName(null, part));
+
+ if (partElem != null &&
partElem.getFirstChild() != null) {
+ temp = partElem.getFirstChild();
+ }
+ }
+ }
+
+ modifier.insertMissingData(expr, temp);
}
Object evalResult = expr.evaluate(contextNode, type);
if (evalResult != null && __log.isDebugEnabled()) {
Modified:
ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java?rev=1211512&r1=1211511&r2=1211512&view=diff
==============================================================================
---
ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java
(original)
+++
ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java
Wed Dec 7 16:26:56 2011
@@ -192,6 +192,20 @@ public class MockCompilerContext impleme
var.name = name;
_vars.put(name, var);
}
+
+ public void registerMessageTypeVar(String name, QName type,
java.util.List<String> partNames,
+ java.util.List<QName> partTypes) {
+ java.util.List<Part> parts=new java.util.Vector<Part>();
+ for (int i=0; i < partNames.size(); i++) {
+ parts.add(new Part(getOProcess(), partNames.get(i),
+ new OElementVarType(getOProcess(),
partTypes.get(i))));
+ }
+ OMessageVarType varType = new
OMessageVarType(getOProcess(),type,parts);
+ OScope.Variable var = new OScope.Variable(getOProcess(),varType);
+ var.name = name;
+ _vars.put(name, var);
+ }
+
public OExpression compileExpr(String locationstr, NSContext nsContext) {
// TODO Auto-generated method stub
return null;
Modified:
ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntimeTest.java
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntimeTest.java?rev=1211512&r1=1211511&r2=1211512&view=diff
==============================================================================
---
ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntimeTest.java
(original)
+++
ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntimeTest.java
Wed Dec 7 16:26:56 2011
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
import java.net.URI;
import java.net.URL;
@@ -59,6 +60,8 @@ public class XPath20ExpressionRuntimeTes
private MockCompilerContext _cc;
private Document _vardoc;
+ private Node _rootNode;
+
public XPath20ExpressionRuntimeTest() {}
@Before
@@ -86,6 +89,41 @@ public class XPath20ExpressionRuntimeTes
Element el = (Element)cn;
_cc.registerElementVar(name, new
QName(el.getNamespaceURI(),el.getLocalName()));
_vars.put(name,el);
+ } else if (v.getLocalName().equals("messageTypeVar")) {
+ String name = v.getAttribute("name");
+ Node cn = v.getFirstChild();
+ while (cn != null && cn.getNodeType() != Node.ELEMENT_NODE)
+ cn = cn.getNextSibling();
+ Element el = (Element)cn;
+
+ java.util.List<String> partNames=new
java.util.Vector<String>();
+ java.util.List<QName> partTypes=new java.util.Vector<QName>();
+ NodeList nl=el.getChildNodes();
+
+ for (int j=0; j < nl.getLength(); j++) {
+ Node partNode=nl.item(j);
+ if (partNode instanceof Element) {
+ partNames.add(partNode.getLocalName());
+
+ partNode.normalize();
+
+ Node body=((Element)partNode).getFirstChild();
+
+ while (body != null && (body instanceof
Element) == false) {
+ body = body.getNextSibling();
+ }
+
+ if (body != null) {
+ QName partType=new
QName(((Element)body).getNamespaceURI(),
+
((Element)body).getLocalName());
+ partTypes.add(partType);
+ }
+ }
+ }
+
+ _cc.registerMessageTypeVar(name, new
QName(el.getNamespaceURI(),el.getLocalName()),
+ partNames, partTypes);
+ _vars.put(name,el);
}
}
}
@@ -141,6 +179,58 @@ public class XPath20ExpressionRuntimeTes
assertEquals("Unexpected root node", "variables",
retVal.getNodeName());
}
+ @Test
+ public void testMessageTypeVariableSelection() throws Exception {
+ OXPath20ExpressionBPEL20 exp = compile("$messageVar.parameters");
+ Node retVal = _runtime.evaluateNode(exp, this);
+ assertNotNull(retVal);
+ assertSame(retVal , _vars.get("messageVar"));
+ assertSame(retVal.getOwnerDocument(),_vardoc);
+ }
+
+ @Test
+ public void testMessageInsertMissingData() throws Exception {
+ String insertElementName="InsertedNode";
+
+ OXPath20ExpressionBPEL20 exp =
compile("$messageVar.parameters/"+insertElementName);
+ exp.insertMissingData = true;
+
+ // Setup root node
+ _rootNode = DOMUtils.stringToDOM("<message><parameters>" +
+ "<tns:ApplicationData
xmlns:tns=\"http://foobar\"/></parameters></message>");
+
+ java.util.List<?> list = _runtime.evaluate(exp, this);
+
+ if (list == null || list.size() != 0) {
+ fail("List should have no elements");
+ }
+
+ if
(((Element)_rootNode).getElementsByTagName(insertElementName).getLength() != 1)
{
+ fail("Missing '"+insertElementName+"' element has not been
inserted");
+ }
+ }
+
+ @Test
+ public void testVariableInsertMissingData() throws Exception {
+ String insertElementName="InsertedNode";
+
+ OXPath20ExpressionBPEL20 exp =
compile("$reallyEmptyVar/"+insertElementName);
+ exp.insertMissingData = true;
+
+ // Setup root node
+ _rootNode = DOMUtils.stringToDOM("<tns:ApplicationData
xmlns:tns=\"http://foobar\"/>");
+
+ java.util.List<?> list = _runtime.evaluate(exp, this);
+
+ if (list == null || list.size() != 0) {
+ fail("List should have no elements");
+ }
+
+ if
(((Element)_rootNode).getElementsByTagName(insertElementName).getLength() != 1)
{
+ fail("Missing '"+insertElementName+"' element has not been
inserted");
+ }
+ }
+
public Node readVariable(Variable variable, Part part) throws
FaultException {
return _vars.get(variable.name);
}
@@ -161,8 +251,7 @@ public class XPath20ExpressionRuntimeTes
}
public Node getRootNode() {
- // TODO Auto-generated method stub
- return null;
+ return _rootNode;
}
public Node evaluateQuery(Node root, OExpression expr) throws
FaultException {
Modified: ode/trunk/bpel-runtime/src/test/resources/xpath20/variables.xml
URL:
http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/test/resources/xpath20/variables.xml?rev=1211512&r1=1211511&r2=1211512&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/test/resources/xpath20/variables.xml (original)
+++ ode/trunk/bpel-runtime/src/test/resources/xpath20/variables.xml Wed Dec 7
16:26:56 2011
@@ -61,5 +61,14 @@
</tns:PaymentInfo>
</tns:ApplicationData>
- </elementVar>
+ </elementVar>
+
+ <messageTypeVar name="messageVar" xmlns:tns="http://foobar" >
+ <tns:ExampleMessage>
+ <parameters>
+ <tns:ApplicationData/>
+ </parameters>
+ </tns:ExampleMessage>
+ </messageTypeVar>
+
</variables>
\ No newline at end of file