Author: hiranya
Date: Fri Jul 19 21:52:03 2013
New Revision: 1505038

URL: http://svn.apache.org/r1505038
Log:
Applying the patch for SYNAPSE-877, Appling XQuery transformations on empty 
SOAP body. Added a test case to verify the fix.

Modified:
    
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/xquery/XQueryMediator.java
    
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/xquery/XQueryMediatorTest.java

Modified: 
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/xquery/XQueryMediator.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/xquery/XQueryMediator.java?rev=1505038&r1=1505037&r2=1505038&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/xquery/XQueryMediator.java
 (original)
+++ 
synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/xquery/XQueryMediator.java
 Fri Jul 19 21:52:03 2013
@@ -382,6 +382,27 @@ public class XQueryMediator extends Abst
                         ((OMElement) destination).setText(
                                 String.valueOf(xqItem.getItemAsString()));
                     }
+                } else if (target.getXPath() == null) {
+                    //In the case soap body doesn't have the first element --> 
Empty soap body
+                    destination = synCtx.getEnvelope().getBody();
+                    if (synLog.isTraceOrDebugEnabled()) {
+                        synLog.traceOrDebug("The target node " + destination);
+                    }
+
+                    //If the result is XML
+                    if (XQItemType.XQITEMKIND_DOCUMENT_ELEMENT == itemKind ||
+                            XQItemType.XQITEMKIND_ELEMENT == itemKind ||
+                            XQItemType.XQITEMKIND_DOCUMENT == itemKind) {
+                        StAXOMBuilder builder = new StAXOMBuilder(
+                                
XMLInputFactory.newInstance().createXMLStreamReader(
+                                        new 
StringReader(xqItem.getItemAsString())));
+                        OMElement resultOM = builder.getDocumentElement();
+                        if (resultOM != null) {
+                            ((OMElement) destination).addChild(resultOM);
+                        }
+                    }
+                    //No else part since soap body could have only XML part 
not text values
+
                 }
                 break;   // Only take the *first* value of the result sequence
             }

Modified: 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/xquery/XQueryMediatorTest.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/xquery/XQueryMediatorTest.java?rev=1505038&r1=1505037&r2=1505038&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/xquery/XQueryMediatorTest.java
 (original)
+++ 
synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/mediators/xquery/XQueryMediatorTest.java
 Fri Jul 19 21:52:03 2013
@@ -19,6 +19,7 @@
 package org.apache.synapse.mediators.xquery;
 
 import junit.framework.TestCase;
+import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.config.SynapseConfigUtils;
 import org.apache.synapse.mediators.TestUtils;
@@ -255,4 +256,17 @@ public class XQueryMediatorTest extends 
         assertTrue(mediator.mediate(mc));
         assertEquals("true", 
mc.getEnvelope().getBody().getFirstElement().getText());
     }
+
+    public void testEmptyBodyQuery() throws Exception {
+        MessageContext mc = TestUtils.getTestContext(sampleXml3, null);
+        
mc.setEnvelope(OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope());
+
+        XQueryMediator mediator = new XQueryMediator();
+        mediator.setQuerySource(" declare namespace 
m0=\"http://services.samples/xsd\";\n"; +
+                " declare variable $payload as document-node() external;\n" +
+                " declare variable $commission as document-node() external;\n" 
+
+                " <testing/>");
+        assertTrue(mediator.mediate(mc));
+        assertEquals("testing", 
mc.getEnvelope().getBody().getFirstElement().getLocalName());
+    }
 }


Reply via email to