Author: indika
Date: Mon Jun 15 05:53:26 2009
New Revision: 784658
URL: http://svn.apache.org/viewvc?rev=784658&view=rev
Log:
apply patch for SYNAPSE-553 with a test case for test ...Thanks Supun for
contributing
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/FaultMediatorSerializationTest.java
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java?rev=784658&r1=784657&r2=784658&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
Mon Jun 15 05:53:26 2009
@@ -28,6 +28,7 @@
import javax.xml.namespace.QName;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.Iterator;
/**
* Factory for {...@link FaultMediator} instances.
@@ -189,8 +190,19 @@
handleException("Unable to build the XPath for fault
detail " +
"from the expression : " +
detailExpr.getAttributeValue(), e);
}
+ } else if (detail.getChildElements().hasNext()) {
+ Iterator it = detail.getChildElements();
+ while (it.hasNext()) {
+ OMElement child = (OMElement) it.next();
+ if (child != null) {
+ faultMediator.addFaultDetailElement(child);
+ }
+ }
} else if (detail.getText() != null) {
faultMediator.setFaultDetail(detail.getText());
+ } else {
+ // we have an empty detail element
+ faultMediator.setFaultDetail("");
}
}
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java?rev=784658&r1=784657&r2=784658&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
Mon Jun 15 05:53:26 2009
@@ -115,6 +115,13 @@
} else if (mediator.getFaultDetail() != null) {
OMElement detail = fac.createOMElement("detail", synNS, fault);
detail.setText(mediator.getFaultDetail());
+ } else if (!mediator.getFaultDetailElements().isEmpty()) {
+ OMElement detail = fac.createOMElement("detail", synNS, fault);
+ for (OMElement element : mediator.getFaultDetailElements()) {
+ if (element != null) {
+ detail.addChild(element.cloneOMElement());
+ }
+ }
}
if (parent != null) {
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=784658&r1=784657&r2=784658&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
Mon Jun 15 05:53:26 2009
@@ -36,6 +36,8 @@
import javax.xml.namespace.QName;
import java.net.URI;
import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
/**
* This transforms the current message instance into a SOAP Fault message. The
@@ -80,7 +82,9 @@
/** The fault detail to be used */
private String faultDetail = null;
/** An XPath expression that will give the fault code QName at runtime */
- private SynapseXPath faultDetailExpr = null;
+ private SynapseXPath faultDetailExpr = null;
+ /** array of fault detail elements */
+ private final List<OMElement> faultDetailElements = new
ArrayList<OMElement>();
public boolean mediate(MessageContext synCtx) {
@@ -377,6 +381,12 @@
SOAPFaultDetail soapFaultDetail = factory.createSOAPFaultDetail();
soapFaultDetail.setText(faultDetailExpr.stringValueOf(synCtx));
fault.setDetail(soapFaultDetail);
+ } else if (!faultDetailElements.isEmpty()) {
+ SOAPFaultDetail soapFaultDetail = factory.createSOAPFaultDetail();
+ for (OMElement faultDetailElement : faultDetailElements) {
+ soapFaultDetail.addChild(faultDetailElement.cloneOMElement());
+ }
+ fault.setDetail(soapFaultDetail);
} else if (fault.getDetail() != null) {
// work around for a rampart issue in the following thread
//
http://www.nabble.com/Access-to-validation-error-message-tf4498668.html#a13284520
@@ -496,6 +506,14 @@
this.faultDetailExpr = faultDetailExpr;
}
+ public List<OMElement> getFaultDetailElements() {
+ return faultDetailElements;
+ }
+
+ public void addFaultDetailElement(OMElement element) {
+ faultDetailElements.add(element);
+ }
+
private void handleException(String msg) {
log.error(msg);
throw new SynapseException(msg);
Modified:
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/FaultMediatorSerializationTest.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/FaultMediatorSerializationTest.java?rev=784658&r1=784657&r2=784658&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/FaultMediatorSerializationTest.java
(original)
+++
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/FaultMediatorSerializationTest.java
Mon Jun 15 05:53:26 2009
@@ -30,6 +30,7 @@
private static final String SOAP11 = "soap11";
private static final String SOAP12 = "soap12";
private static final String EMPTY = "";
+ private final static String DETAILS = "<test>Test
Details</test><test2>Test2 Details</test2>";
public FaultMediatorSerializationTest() {
super(FaultMediatorSerializationTest.class.getName());
@@ -43,12 +44,24 @@
assertTrue(serialization(inputXml, faultMediatorSerializer));
}
+ public void testFaultMediatorSerializationSOAP11NonEmptyDetails() throws
Exception {
+ String inputXml = getXmlOfMediatorForSOAP11(SOAP11, "ns2:Client",
"reason", EMPTY, DETAILS);
+ assertTrue(serialization(inputXml, faultMediatorFactory,
faultMediatorSerializer));
+ assertTrue(serialization(inputXml, faultMediatorSerializer));
+ }
+
public void testFaultMediatorSerializationSOAP12() throws Exception {
String inputXml = getXmlOfMediatorForSOAP12(SOAP12, "soap:Sender",
"reason", EMPTY, EMPTY, EMPTY, "false");
assertTrue(serialization(inputXml, faultMediatorFactory,
faultMediatorSerializer));
assertTrue(serialization(inputXml, faultMediatorSerializer));
}
+ public void testFaultMediatorSerializationSOAP12NonEmptyDetails() throws
Exception {
+ String inputXml = getXmlOfMediatorForSOAP12(SOAP12, "soap:Sender",
"reason", EMPTY, EMPTY, DETAILS, "false");
+ assertTrue(serialization(inputXml, faultMediatorFactory,
faultMediatorSerializer));
+ assertTrue(serialization(inputXml, faultMediatorSerializer));
+ }
+
public void testFaultMediatorSerializationSOAP12withResponse() throws
Exception {
String inputXml = getXmlOfMediatorForSOAP12(SOAP12, "soap:Sender",
"reason", EMPTY, EMPTY, EMPTY, "true");
assertTrue(serialization(inputXml, faultMediatorFactory,
faultMediatorSerializer));