Return-Path: Delivered-To: apmail-ode-commits-archive@www.apache.org Received: (qmail 75057 invoked from network); 4 Feb 2009 01:33:02 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 4 Feb 2009 01:33:02 -0000 Received: (qmail 20635 invoked by uid 500); 4 Feb 2009 01:33:02 -0000 Delivered-To: apmail-ode-commits-archive@ode.apache.org Received: (qmail 20589 invoked by uid 500); 4 Feb 2009 01:33:02 -0000 Mailing-List: contact commits-help@ode.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ode.apache.org Delivered-To: mailing list commits@ode.apache.org Received: (qmail 20580 invoked by uid 99); 4 Feb 2009 01:33:02 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Feb 2009 17:33:02 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 04 Feb 2009 01:33:01 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 83B932388999; Wed, 4 Feb 2009 01:32:41 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r740569 - in /ode/trunk: bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/ runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xquery10/runtime/ utils/src/main/java/org/apache/ode/utils/ Date: Wed, 04 Feb 2009 01:32:40 -0000 To: commits@ode.apache.org From: karthick@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090204013241.83B932388999@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: karthick Date: Wed Feb 4 01:32:40 2009 New Revision: 740569 URL: http://svn.apache.org/viewvc?rev=740569&view=rev Log: Make sure that (a) variable nodes are bound properly and (b) xquery result node has a owner document. Modified: ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xquery10/runtime/XQuery10ExpressionRuntime.java ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java Modified: ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel?rev=740569&r1=740568&r2=740569&view=diff ============================================================================== --- ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel (original) +++ ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel Wed Feb 4 01:32:40 2009 @@ -25,8 +25,8 @@ xmlns:types="http://ode/bpel/types" xmlns:test="http://ode/bpel/unit-test.wsdl" xmlns:ode="http://www.apache.org/ode/type/extension" - queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xquery1.0" - expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xquery1.0"> + queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0" + expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"> - Hello]]> + Hello]]> - + typeswitch ($myVar.TestPart) case $a as xs:string return "test" default return "default" @@ -70,7 +70,7 @@ - default return @@ -80,7 +80,7 @@ - + for $loopOnce in (1) return concat(bpws:getVariableProperty("myVar", "test:content"), "XQuery World") Modified: ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xquery10/runtime/XQuery10ExpressionRuntime.java URL: http://svn.apache.org/viewvc/ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xquery10/runtime/XQuery10ExpressionRuntime.java?rev=740569&r1=740568&r2=740569&view=diff ============================================================================== --- ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xquery10/runtime/XQuery10ExpressionRuntime.java (original) +++ ode/trunk/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/xquery10/runtime/XQuery10ExpressionRuntime.java Wed Feb 4 01:32:40 2009 @@ -354,7 +354,10 @@ XQItemType xqType = getItemType(xqconn, value); // Saxon doesn't like binding sequences to variables - if (value instanceof NodeList) { + if (value instanceof Node) { + // a node is a node-list, but the inverse isn't true. + // so, if the value is truly a node, leave it alone. + } else if (value instanceof NodeList) { // So extract the first item from the node list NodeList nodeList = (NodeList) value; ArrayList nodeArray = new ArrayList(); @@ -533,12 +536,16 @@ * @throws XQException XQException */ private Object getResultValue(QName type, XQResultSequence result) throws XQException { + Document document = DOMUtils.newDocument(); Object resultValue = null; if (XPathConstants.NODESET.equals(type)) { List list = new ArrayList(); while (result.next()) { Object itemValue = getItemValue(result.getItem()); + if (itemValue instanceof Node) { + itemValue = DOMUtils.cloneNode(document, (Node) itemValue); + } if (itemValue != null) { list.add(itemValue); @@ -548,6 +555,9 @@ resultValue = list; } else { resultValue = getItemValue(result.getItem()); + if (resultValue instanceof Node) { + resultValue = DOMUtils.cloneNode(document, (Node) resultValue); + } } return resultValue; } Modified: ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java URL: http://svn.apache.org/viewvc/ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java?rev=740569&r1=740568&r2=740569&view=diff ============================================================================== --- ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java (original) +++ ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java Wed Feb 4 01:32:40 2009 @@ -56,12 +56,16 @@ import org.apache.xml.serialize.OutputFormat; import org.apache.xml.serialize.XMLSerializer; import org.w3c.dom.Attr; +import org.w3c.dom.CDATASection; import org.w3c.dom.CharacterData; +import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.w3c.dom.ProcessingInstruction; +import org.w3c.dom.Text; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -1061,4 +1065,65 @@ String prefix = qName.getPrefix(), localPart = qName.getLocalPart(); return (prefix == null || "".equals(prefix)) ? localPart : (prefix + ":" + localPart); } + + public static Node cloneNode(Document document, Node node) { + Node clone = null; + String namespaceURI = node.getNamespaceURI(); + String localName = node.getLocalName(); + switch (node.getNodeType()) { + case Node.ATTRIBUTE_NODE: + if (namespaceURI == null) { + clone = document.createAttribute(localName); + } else { + clone = document.createAttributeNS(namespaceURI, localName); + } + break; + case Node.CDATA_SECTION_NODE: + clone = document.createCDATASection(((CDATASection) node).getData()); + break; + case Node.COMMENT_NODE: + clone = document.createComment(((Comment) node).getData()); + break; + case Node.DOCUMENT_FRAGMENT_NODE: + clone = document.createDocumentFragment(); + break; + case Node.DOCUMENT_NODE: + clone = document; + break; + case Node.ELEMENT_NODE: + if (namespaceURI == null) { + clone = document.createElement(localName); + } else { + clone = document.createElementNS(namespaceURI, localName); + } + break; + case Node.ENTITY_NODE: + // TODO + break; + case Node.ENTITY_REFERENCE_NODE: + clone = document.createEntityReference(localName); + // TODO + break; + case Node.NOTATION_NODE: + // TODO + break; + case Node.PROCESSING_INSTRUCTION_NODE: + clone = document.createProcessingInstruction(((ProcessingInstruction) node).getData(), localName); + break; + case Node.TEXT_NODE: + clone = document.createTextNode(((Text) node ).getData()); + break; + default: + break; + } + + NodeList children = node.getChildNodes(); + if (children != null) { + for (int i = 0; i < children.getLength(); i++) { + clone.appendChild(cloneNode(document, children.item(i))); + } + } + + return clone; + } }