You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2016/06/09 00:39:35 UTC

svn commit: r1747473 - in /synapse/trunk/java/modules/core/src: main/java/org/apache/synapse/mediators/transform/FaultMediator.java main/java/org/apache/synapse/util/POXUtils.java test/java/org/apache/synapse/mediators/transform/FaultMediatorTest.java

Author: hiranya
Date: Thu Jun  9 00:39:35 2016
New Revision: 1747473

URL: http://svn.apache.org/viewvc?rev=1747473&view=rev
Log:
Preventing Strings from being set as fault detail in the FaultMediator; Applied patch from SYNAPSE-1041 with a couple of unit tests

Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/POXUtils.java
    synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/FaultMediatorTest.java

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java?rev=1747473&r1=1747472&r2=1747473&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java Thu Jun  9 00:39:35 2016
@@ -29,6 +29,7 @@ import org.apache.synapse.SynapseLog;
 import org.apache.synapse.core.axis2.Axis2MessageContext;
 import org.apache.synapse.mediators.AbstractMediator;
 import org.apache.synapse.util.xpath.SynapseXPath;
+import org.apache.synapse.util.POXUtils;
 import org.jaxen.JaxenException;
 
 import javax.xml.namespace.QName;
@@ -392,7 +393,10 @@ public class FaultMediator extends Abstr
                     }
                 }
             } else {
-                soapFaultDetail.setText(faultDetailExpr.stringValueOf(synCtx));
+                OMElement om = POXUtils.getOMFromXML(faultDetailExpr.stringValueOf(synCtx));
+                if (om != null) {
+                    soapFaultDetail.addChild(om);
+                }
             }
             fault.setDetail(soapFaultDetail);
         } else if (!faultDetailElements.isEmpty()) {

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/POXUtils.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/POXUtils.java?rev=1747473&r1=1747472&r2=1747473&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/POXUtils.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/POXUtils.java Thu Jun  9 00:39:35 2016
@@ -20,7 +20,9 @@
 package org.apache.synapse.util;
 
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.util.AXIOMUtil;
 import org.apache.axiom.soap.SOAPBody;
 import org.apache.axiom.soap.SOAPFault;
 import org.apache.axis2.context.MessageContext;
@@ -28,6 +30,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
 
 /**
  *
@@ -52,8 +55,10 @@ public class POXUtils {
                 if (log.isDebugEnabled()) {
                     log.debug("Setting the fault detail : " + faultDetail + " as athe POX Fault");
                 }
-                faultPayload.setText(faultDetail);
-
+                OMElement om = POXUtils.getOMFromXML(faultDetail);
+                if(om != null) {
+                    faultPayload.addChild(om);
+                }
             } else if (fault.getReason() != null && !fault.getReason().getText().equals("")) {
 
                 String faultReasonValue = fault.getReason().getText();
@@ -89,4 +94,16 @@ public class POXUtils {
             body.addChild(faultPayload);
         }
     }
+
+    /**
+     * If the input string is valid xml, this method will convert it into an OMElement and
+     * return back. Otherwise returns null.
+     */
+    public static OMElement getOMFromXML(String text) {
+        try {
+            return AXIOMUtil.stringToOM(text);
+        } catch (Exception ignore) {
+            return null;
+        }
+    }
 }

Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/FaultMediatorTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/FaultMediatorTest.java?rev=1747473&r1=1747472&r2=1747473&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/FaultMediatorTest.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/FaultMediatorTest.java Thu Jun  9 00:39:35 2016
@@ -24,9 +24,11 @@ import junit.framework.TestCase;
 import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFault;
+import org.apache.axiom.soap.SOAPFaultDetail;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.config.Entry;
 import org.apache.synapse.mediators.TestUtils;
+import org.apache.synapse.util.xpath.SynapseXPath;
 
 import javax.xml.namespace.QName;
 import java.net.URI;
@@ -40,7 +42,6 @@ public class FaultMediatorTest extends T
     private static final String F_DETAIL = "Some detail text";
 
     public void testSOAP11Fault() throws Exception {
-
         FaultMediator faultMediator = new FaultMediator();
         faultMediator.setSoapVersion(FaultMediator.SOAP11);
         faultMediator.setFaultCodeValue(F_CODE);
@@ -48,7 +49,7 @@ public class FaultMediatorTest extends T
         faultMediator.setFaultRole(new URI(F_ACTOR_URI));
         faultMediator.setFaultDetail(F_DETAIL);
 
-        // invoke transformation, with static enveope
+        // invoke transformation, with static envelope
         MessageContext synCtx = TestUtils.getAxis2MessageContext(
                 "<empty/>", new HashMap<String, Entry>());
         faultMediator.mediate(synCtx);
@@ -61,4 +62,52 @@ public class FaultMediatorTest extends T
         assertTrue(F_DETAIL.equals(fault.getDetail().getText()));
         assertEquals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI, envelope.getNamespace().getNamespaceURI());
     }
+
+    public void testSOAP11FaultWithExpression() throws Exception {
+        FaultMediator faultMediator = new FaultMediator();
+        faultMediator.setSoapVersion(FaultMediator.SOAP11);
+        faultMediator.setFaultCodeValue(F_CODE);
+        faultMediator.setFaultReasonValue(F_STRING);
+        faultMediator.setFaultRole(new URI(F_ACTOR_URI));
+        faultMediator.setFaultDetailExpr(new SynapseXPath("get-property('foo')"));
+
+        // invoke transformation, with static envelope
+        MessageContext synCtx = TestUtils.getAxis2MessageContext(
+                "<empty/>", new HashMap<String, Entry>());
+        synCtx.setProperty("foo", "<test>some text</test>");
+        faultMediator.mediate(synCtx);
+
+        SOAPEnvelope envelope = synCtx.getEnvelope();
+        SOAPFault fault = envelope.getBody().getFault();
+        assertTrue(F_CODE.equals(fault.getCode().getTextAsQName()));
+        assertTrue(F_STRING.equals(fault.getReason().getText()));
+        assertTrue(F_ACTOR_URI.equals(fault.getRole().getRoleValue()));
+        SOAPFaultDetail detail = fault.getDetail();
+        assertNotNull(detail.getFirstElement());
+        assertEquals("test", detail.getFirstElement().getLocalName());
+        assertEquals("some text", detail.getFirstElement().getText());
+    }
+
+    public void testSOAP11FaultWithInvalidOutputExpression() throws Exception {
+        FaultMediator faultMediator = new FaultMediator();
+        faultMediator.setSoapVersion(FaultMediator.SOAP11);
+        faultMediator.setFaultCodeValue(F_CODE);
+        faultMediator.setFaultReasonValue(F_STRING);
+        faultMediator.setFaultRole(new URI(F_ACTOR_URI));
+        faultMediator.setFaultDetailExpr(new SynapseXPath("get-property('foo')"));
+
+        // invoke transformation, with static envelope
+        MessageContext synCtx = TestUtils.getAxis2MessageContext(
+                "<empty/>", new HashMap<String, Entry>());
+        synCtx.setProperty("foo", F_DETAIL);
+        faultMediator.mediate(synCtx);
+
+        SOAPEnvelope envelope = synCtx.getEnvelope();
+        SOAPFault fault = envelope.getBody().getFault();
+        assertTrue(F_CODE.equals(fault.getCode().getTextAsQName()));
+        assertTrue(F_STRING.equals(fault.getReason().getText()));
+        assertTrue(F_ACTOR_URI.equals(fault.getRole().getRoleValue()));
+        SOAPFaultDetail detail = fault.getDetail();
+        assertNull(detail.getFirstElement());
+    }
 }