You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by va...@apache.org on 2013/05/22 10:31:44 UTC

[2/2] git commit: Karolis Petrauskas' patch for ODE-664 applied. Some testcases fixed accordingly.

Karolis Petrauskas' patch for ODE-664 applied.
Some testcases fixed accordingly.


Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/ce94ea8f
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/ce94ea8f
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/ce94ea8f

Branch: refs/heads/ode-1.3.6.x
Commit: ce94ea8f7f98551185df169c6960963023b18735
Parents: 4891521
Author: Tammo van Lessen <tv...@gmail.com>
Authored: Wed May 22 10:10:25 2013 +0200
Committer: Tammo van Lessen <tv...@gmail.com>
Committed: Wed May 22 10:31:13 2013 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/ode/il/OMUtils.java   |   30 ++++++++++++++-
 .../java/org/apache/ode/bpel/runtime/ASSIGN.java   |   29 +++++++++-----
 .../bpel/2.0/ExtVar-GenKey/test.properties         |    2 +-
 .../2.0/TestInsertMissingData/test1.properties     |    2 +-
 .../bpel/2.0/TestSubTreeAssign/test1.properties    |    2 +-
 .../bpel/2.0/TestXPathNamespace1/test1.properties  |    2 +-
 .../main/java/org/apache/ode/utils/DOMUtils.java   |   25 ++++++++++++
 7 files changed, 75 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/ce94ea8f/bpel-epr/src/main/java/org/apache/ode/il/OMUtils.java
----------------------------------------------------------------------
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/OMUtils.java b/bpel-epr/src/main/java/org/apache/ode/il/OMUtils.java
index 1a20bda..0f238b1 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/OMUtils.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/OMUtils.java
@@ -35,6 +35,8 @@ import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMText;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.utils.NSContext;
 import org.w3c.dom.Attr;
@@ -52,6 +54,8 @@ import org.xml.sax.InputSource;
  */
 public class OMUtils {
 
+    private static Log __log = LogFactory.getLog(OMUtils.class);
+
     public static OMElement getFirstChildWithName(OMElement parent, String name) {
         if (parent == null)
             throw new IllegalArgumentException("null parent");
@@ -74,12 +78,32 @@ public class OMUtils {
     
     @SuppressWarnings("unchecked")
     public static Element toDOM(OMElement element, Document doc, boolean deepNS) {
-        final Element domElement = doc.createElementNS(element.getQName().getNamespaceURI(), element.getQName().getLocalPart());
+        //
+        //  Fix regarding lost qnames on response of invoke activity:
+        //    * copy an element including its prefix.
+        //    * add all namespase attributes.
+        //
+        String domElementNsUri = element.getQName().getNamespaceURI();
+        String domElementQName;
+        if (element.getQName().getPrefix() == null || element.getQName().getPrefix().trim().length() == 0) {
+            domElementQName = element.getQName().getLocalPart();
+        } else {
+            domElementQName = element.getQName().getPrefix() + ":" + element.getQName().getLocalPart();
+        }
+        if (__log.isTraceEnabled())
+            __log.trace("toDOM: creating element with nsUri=" + domElementNsUri
+                    + " qname=" + domElementQName
+                    + " from omElement, name=" + element.getLocalName());
+
+        final Element domElement = doc.createElementNS(
+                domElementNsUri,
+                domElementQName);
+        
 
         if (deepNS) {
             NSContext nscontext = new NSContext();
             buildNScontext(nscontext, element);
-            DOMUtils.injectNamespaces(domElement,nscontext);
+            DOMUtils.injectNamespacesWithAllPrefixes(domElement,nscontext);
         } else {
             if (element.getAllDeclaredNamespaces() != null) {
                 for (Iterator<OMNamespace> i = element.getAllDeclaredNamespaces(); i.hasNext(); ) {
@@ -92,6 +116,8 @@ public class OMUtils {
     
             }
         }
+        if (__log.isTraceEnabled())
+            __log.trace("toDOM: created root element (deepNS=" + deepNS + "): " + DOMUtils.domToString(domElement));
             
         for (Iterator i = element.getAllAttributes(); i.hasNext();) {
             final OMAttribute attr = (OMAttribute) i.next();

http://git-wip-us.apache.org/repos/asf/ode/blob/ce94ea8f/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
index 3a50599..d2a69e5 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
@@ -60,6 +60,7 @@ import java.net.URI;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Assign activity run-time template.
@@ -222,6 +223,22 @@ class ASSIGN extends ACTIVITY {
             OExpression expr = ((OAssign.Expression) from).expression;
             try {
                 l = getBpelRuntimeContext().getExpLangRuntime().evaluate(expr, getEvaluationContext());
+                if (l.size() == 0 || l.get(0) == null || !(l.get(0) instanceof Element)) {
+                    if (__log.isTraceEnabled()) {
+                        __log.trace("evalRValue: OAssign.Expression: eval reult not Element or node=null");
+                    }
+                } else {
+                    Element element = (Element)l.get(0);
+                    for (Map.Entry<String, String> entry : DOMUtils.getMyNSContext(element).toMap().entrySet()) {
+                        String key = entry.getKey();
+                        String value = entry.getValue();
+                        if (entry.getKey() == null || entry.getKey().length() == 0) {
+                            element.setAttributeNS(DOMUtils.NS_URI_XMLNS, "xmlns", value);
+                        } else {
+                            element.setAttributeNS(DOMUtils.NS_URI_XMLNS, "xmlns:" + key, value);
+                        }
+                    }
+                }
             } catch (EvaluationException e) {
                 String msg = __msgs.msgEvalException(from.toString(), e.getMessage());
                 if (__log.isDebugEnabled()) __log.debug(from + ": " + msg);
@@ -504,17 +521,7 @@ class ASSIGN extends ACTIVITY {
         NamedNodeMap attrs = src.getAttributes();
         for (int i = 0; i < attrs.getLength(); ++i) {
             Attr attr = (Attr)attrs.item(i);
-            if (!attr.getName().startsWith("xmlns")) {
-                replacement.setAttributeNodeNS((Attr)doc.importNode(attrs.item(i), true));
-                // Case of qualified attribute values, we're forced to add corresponding namespace declaration manually
-                int colonIdx = attr.getValue().indexOf(":");
-                if (colonIdx > 0) {
-                    String prefix = attr.getValue().substring(0, colonIdx);
-                    String attrValNs = src.lookupPrefix(prefix);
-                    if (attrValNs != null)
-                       replacement.setAttributeNS(DOMUtils.NS_URI_XMLNS, "xmlns:"+ prefix, attrValNs);
-                }
-            }
+            replacement.setAttributeNodeNS((Attr)doc.importNode(attr, true));
         }
         parent.replaceChild(replacement, ptr);
         DOMUtils.copyNSContext(ptr, replacement);

http://git-wip-us.apache.org/repos/asf/ode/blob/ce94ea8f/bpel-test/src/test/resources/bpel/2.0/ExtVar-GenKey/test.properties
----------------------------------------------------------------------
diff --git a/bpel-test/src/test/resources/bpel/2.0/ExtVar-GenKey/test.properties b/bpel-test/src/test/resources/bpel/2.0/ExtVar-GenKey/test.properties
index fa819a7..e5b57dc 100644
--- a/bpel-test/src/test/resources/bpel/2.0/ExtVar-GenKey/test.properties
+++ b/bpel-test/src/test/resources/bpel/2.0/ExtVar-GenKey/test.properties
@@ -19,5 +19,5 @@ namespace=http://example.com/process/ExtVar/GenKey
 service=TestService
 operation=Start
 request1=<message><body><tns:StartRequest xmlns:tns="http://example.com/process/ExtVar/GenKey">foo</tns:StartRequest></body></message>
-response1=.*><this:keyString xmlns:this="http://example.com/process/ExtVar/GenKey">1</this:keyString><this:stringCol xmlns:this="http://example.com/process/ExtVar/GenKey">foo</this:stringCol>.*
+response1=.*xmlns:this="http://example.com/process/ExtVar/GenKey" xmlns:tns="http://example.com/process/ExtVar/GenKey"><this:keyString>1</this:keyString><this:stringCol>foo</this:stringCol>.*
 

http://git-wip-us.apache.org/repos/asf/ode/blob/ce94ea8f/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/test1.properties
----------------------------------------------------------------------
diff --git a/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/test1.properties b/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/test1.properties
index c0de3b4..7a92158 100644
--- a/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/test1.properties
+++ b/bpel-test/src/test/resources/bpel/2.0/TestInsertMissingData/test1.properties
@@ -19,4 +19,4 @@ 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>.*
+response1=.*<replyID xmlns:ens="http://ode/bpel/unit-test/TestInsertMissingData.wsdl.types">Start InsertMissingData</replyID><replyText>pass</replyText>.*

http://git-wip-us.apache.org/repos/asf/ode/blob/ce94ea8f/bpel-test/src/test/resources/bpel/2.0/TestSubTreeAssign/test1.properties
----------------------------------------------------------------------
diff --git a/bpel-test/src/test/resources/bpel/2.0/TestSubTreeAssign/test1.properties b/bpel-test/src/test/resources/bpel/2.0/TestSubTreeAssign/test1.properties
index fa47211..64d8a4f 100644
--- a/bpel-test/src/test/resources/bpel/2.0/TestSubTreeAssign/test1.properties
+++ b/bpel-test/src/test/resources/bpel/2.0/TestSubTreeAssign/test1.properties
@@ -19,4 +19,4 @@ namespace=http://ode/bpel/unit-test/TestSubTreeAssign.wsdl
 service=TestSubTreeAssignService
 operation=request
 request1=<message><requestMessageData><ens:aTestMessage xmlns:ens="http://ode/bpel/unit-test/TestSubTreeAssign.wsdl.types"><requestID>Start SubTreeAssign</requestID><requestText>Event SubTreeAssign</requestText><typeIndicators xmlns:foo="http://ode/bpel/unit-test/TestSubTreeAssign.wsdl.types"><foo:indicatorOne>fail</foo:indicatorOne><foo:indicatorTwo>fail</foo:indicatorTwo></typeIndicators></ens:aTestMessage></requestMessageData></message>
-response1=.*<replyID>Start SubTreeAssign</replyID><replyText>pass</replyText>.*
+response1=.*<replyID xmlns:ens="http://ode/bpel/unit-test/TestSubTreeAssign.wsdl.types">Start SubTreeAssign</replyID><replyText xmlns:ens="http://ode/bpel/unit-test/TestSubTreeAssign.wsdl.types" xmlns:foo="http://ode/bpel/unit-test/TestSubTreeAssign.wsdl.types">pass</replyText>.*

http://git-wip-us.apache.org/repos/asf/ode/blob/ce94ea8f/bpel-test/src/test/resources/bpel/2.0/TestXPathNamespace1/test1.properties
----------------------------------------------------------------------
diff --git a/bpel-test/src/test/resources/bpel/2.0/TestXPathNamespace1/test1.properties b/bpel-test/src/test/resources/bpel/2.0/TestXPathNamespace1/test1.properties
index 9faff4d..bc4f69d 100644
--- a/bpel-test/src/test/resources/bpel/2.0/TestXPathNamespace1/test1.properties
+++ b/bpel-test/src/test/resources/bpel/2.0/TestXPathNamespace1/test1.properties
@@ -19,4 +19,4 @@ namespace=http://ode/bpel/unit-test/TestXPathNamespace1.wsdl
 service=TestXPathNamespace1Service
 operation=request
 request1=<message><requestMessageData><requestID>Start TestXPathNamespace1</requestID><requestText>Event TestXPathNamespace1</requestText><typeIndicators xmlns:foo="http://ode/bpel/unit-test/TestXPathNamespace1.wsdl.footypes"><foo:indicatorOne>pass</foo:indicatorOne><foo:indicatorTwo>pass</foo:indicatorTwo></typeIndicators></requestMessageData></message>
-response1=.*<replyID>Start TestXPathNamespace1</replyID><replyText>pass</replyText>.*
+response1=.*<replyID>Start TestXPathNamespace1</replyID><replyText xmlns:foo="http://ode/bpel/unit-test/TestXPathNamespace1.wsdl.footypes">pass</replyText>.*

http://git-wip-us.apache.org/repos/asf/ode/blob/ce94ea8f/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/main/java/org/apache/ode/utils/DOMUtils.java b/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
index 58bb2d2..a9d30de 100644
--- a/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
+++ b/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
@@ -837,6 +837,31 @@ public class DOMUtils {
         }
     }
 
+    /**
+     * Adds namespaces including all prefixes.
+     * This is needed for correct handling of xsi:type attributes.
+     * @param domElement An element wi which the namespace attributes should be added.
+     * @param nscontext A namespace context.
+     * @author k.petrauskas
+     */
+    public static void injectNamespacesWithAllPrefixes(Element domElement, NSContext nscontext) {
+    	if (__log.isDebugEnabled())
+    		__log.debug("injectNamespacesWithAllPrefixes: element=" + domToString(domElement) + " nscontext=" + nscontext);
+        for (Map.Entry<String, String> entry : nscontext.toMap().entrySet()) {
+            String prefix = entry.getKey();
+            String uri = entry.getValue();
+            if (prefix == null || "".equals(prefix))
+                domElement.setAttributeNS(DOMUtils.NS_URI_XMLNS, "xmlns", uri);
+            else
+                domElement.setAttributeNS(DOMUtils.NS_URI_XMLNS, "xmlns:"+ prefix, uri);
+            
+        	if (__log.isDebugEnabled())
+        		__log.debug("injectNamespacesWithAllPrefixes: added namespace: prefix=\"" + prefix + "\" uri=\"" + uri + "\"");
+        }
+    	if (__log.isDebugEnabled())
+    		__log.debug("injectNamespacesWithAllPrefixes: result: element=" + domToString(domElement));
+    }
+
     public static void copyNSContext(Element source, Element dest) {
         Map<String, String> sourceNS = getParentNamespaces(source);
         sourceNS.putAll(getMyNamespaces(source));