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());
+ }
}