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));


Reply via email to