Author: supun
Date: Thu Jun  4 03:36:41 2009
New Revision: 37749
URL: http://wso2.org/svn/browse/wso2?view=rev&revision=37749

Log:
Adding functionality to include multiple XML elements in fault detail through 
FaultMediator

Modified:
   
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
   
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
   
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java

Modified: 
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
URL: 
http://wso2.org/svn/browse/wso2/branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java?rev=37749&r1=37748&r2=37749&view=diff
==============================================================================
--- 
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
      (original)
+++ 
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorFactory.java
      Thu Jun  4 03:36:41 2009
@@ -30,6 +30,7 @@
 import javax.xml.namespace.QName;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.Iterator;
 
 /**
  * Factory for {...@link FaultMediator} instances.
@@ -191,13 +192,13 @@
                     handleException("Unable to build the XPath for fault 
detail " +
                             "from the expression : " + 
detailExpr.getAttributeValue(), e);
                 }
-            } else if (detail.getFirstOMChild() != null) {
-                OMNode detailNode = detail.getFirstOMChild();
-                if (detailNode instanceof OMText) {
-                    faultMediator.setFaultDetail(detail.getText());
-                } else if (detailNode instanceof OMElement) {
-                    
faultMediator.setFaultDetailElement(detail.getFirstElement());
+            } else if (detail.getChildElements().hasNext()) {
+                Iterator it = detail.getChildElements();
+                while (it.hasNext()) {
+                    faultMediator.addFaultDetailElement((OMElement) it.next());
                 }
+            } else if (detail.getText() != null) {
+                faultMediator.setFaultDetail(detail.getText());
             } else {
                 // we have an empry detail element
                 faultMediator.setFaultDetail("");

Modified: 
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
URL: 
http://wso2.org/svn/browse/wso2/branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java?rev=37749&r1=37748&r2=37749&view=diff
==============================================================================
--- 
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
   (original)
+++ 
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/config/xml/FaultMediatorSerializer.java
   Thu Jun  4 03:36:41 2009
@@ -115,9 +115,11 @@
         } else if (mediator.getFaultDetail() != null) {
             OMElement detail = fac.createOMElement("detail", synNS, fault);
             detail.setText(mediator.getFaultDetail());
-        } else if (mediator.getFaultDetailElement() != null) {
+        } else if (mediator.getFaultDetailElements().size() > 0) {
             OMElement detail = fac.createOMElement("detail", synNS, fault);
-            detail.addChild(mediator.getFaultDetailElement());    
+            for (OMElement e : mediator.getFaultDetailElements()) {
+                detail.addChild(e.cloneOMElement());    
+            }
         }
 
         if (parent != null) {

Modified: 
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
URL: 
http://wso2.org/svn/browse/wso2/branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java?rev=37749&r1=37748&r2=37749&view=diff
==============================================================================
--- 
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
    (original)
+++ 
branches/synapse/1.3-wso2v1/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
    Thu Jun  4 03:36:41 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,9 +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;
-    /** The fault detail as an element to be used */
-    private OMElement faultDetailElement = null;
+    private SynapseXPath faultDetailExpr = null;    
+    /** array of fault detail elements */
+    private List<OMElement> faultDetailElements = new ArrayList<OMElement>();
 
     public boolean mediate(MessageContext synCtx) {
 
@@ -379,9 +381,11 @@
             SOAPFaultDetail soapFaultDetail = factory.createSOAPFaultDetail();
             soapFaultDetail.setText(faultDetailExpr.stringValueOf(synCtx));
             fault.setDetail(soapFaultDetail);
-        } else if (faultDetailElement != null) {
+        } else if (!faultDetailElements.isEmpty()) {
             SOAPFaultDetail soapFaultDetail = factory.createSOAPFaultDetail();
-            soapFaultDetail.addChild(faultDetailElement.cloneOMElement());
+            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
@@ -502,12 +506,20 @@
         this.faultDetailExpr = faultDetailExpr;
     }
 
-    public OMElement getFaultDetailElement() {
-        return faultDetailElement;
+    public List<OMElement> getFaultDetailElements() {
+        return faultDetailElements;
+    }
+
+    public void addFaultDetailElement(OMElement element) {
+        faultDetailElements.add(element);
+    }
+
+    public void addAllFaultDetailElements(List<OMElement> list) {
+        faultDetailElements.addAll(list);
     }
 
-    public void setFaultDetailElement(OMElement faultDetailElement) {
-        this.faultDetailElement = faultDetailElement;
+    public OMElement removeFaultDetailElement(int pos) {
+        return faultDetailElements.remove(pos);
     }
 
     private void handleException(String msg) {

_______________________________________________
Esb-java-dev mailing list
[email protected]
https://wso2.org/cgi-bin/mailman/listinfo/esb-java-dev

Reply via email to